]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/mathlib/gen/c/r6sp.F
Fixing for Sun
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / c / r6sp.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/04/01 15:01:57 mclareni
6* Mathlib gen
7*
8*
9#include "gen/pilot.h"
10#if defined(CERNLIB_SINGLE)
11 FUNCTION C309R6(RHO,ETA,XL,PSI,EPS,NMAX,NUSED,FCL,RE,FPMAX,XX,G,C)
12C
13C evaluate the ASYMPTOTIC EXPANSION for the
14C LOGARITHMIC DERIVATIVE OF THE REGULAR SOLUTION
15C
16C *** CF1A = f = F'(XL,ETA,RHO)/F(XL,ETA,RHO)
17C
18C that is valid for REAL(RHO)>0, and best for RHO >> ETA**2, XL,
19C and is derived from the 2F0 expansions for H+ and H-
20C e.g. by Froeberg (Rev. Mod. Physics Vol 27, p399 , 1955)
21C Some lines of this subprogram are for convenience copied from
22C Takemasa, Tamura & Wolter CPC 17 (1979) 351.
23C
24C Evaluate to accuracy EPS with at most NMAX terms.
25C
26C If the terms start diverging,
27C the corresponding continued fraction is found by RCF
28C & evaluated progressively by Steed's method to obtain convergence.
29C
30 IMPLICIT COMPLEX(A-H,O-Z)
31 DIMENSION XX(2,NMAX),G(NMAX),C(NMAX)
32 REAL RE,EPS,T1,T2,T3,AT,ATL,ABSC,FPMAX
33 REAL HPI
34
35 PARAMETER(HPI = 1.57079 63267 94896 619D0)
36
37 ABSC(W)=ABS(REAL(W))+ABS(AIMAG(W))
38C
39 T1=SIN(REAL(PSI))
40 T2=COS(REAL(PSI))
41 ATL=TANH(AIMAG(PSI))
42
43C GIVE COS(PSI)/COSH(IM(PSI)), WHICH ALWAYS HAS CORRECT SIGN
44
45 COSL=CMPLX(T2,-T1*ATL)
46 TANL=CMPLX(T1,T2*ATL)/COSL
47 RE=0
48 XLL1=XL*XL+XL
49 ETASQ=ETA*ETA
50 SL1=1
51 SL=SL1
52 SC1=0
53 SC=SC1
54 TL1=SC
55 TL=TL1
56 TC1=1-ETA/RHO
57 TC=TC1
58 FCL=TL+SL*TANL
59 G(1)=(TC+SC*TANL)/FCL
60 GLAST=G(1)
61 ATL=ABSC(GLAST)
62 F=GLAST
63 D=1
64 DF=GLAST
65 J=0
66 DO 10 N = 2,NMAX
67 T1=N-1
68 T2=2*T1-1
69 T3=T1*T1-T1
70 DENOM=2*RHO*T1
71 C1=(ETA*T2)/DENOM
72 C2=(ETASQ+XLL1-T3)/DENOM
73 SL2=C1*SL1-C2*TL1
74 TL2=C1*TL1+C2*SL1
75 SC2=C1*SC1-C2*TC1-SL2/RHO
76 TC2=C1*TC1+C2*SC1-TL2/RHO
77 SL=SL+SL2
78 TL=TL+TL2
79 SC=SC+SC2
80 TC=TC+TC2
81 SL1=SL2
82 TL1=TL2
83 SC1=SC2
84 TC1=TC2
85 FCL=TL+SL*TANL
86 IF(ABSC(FCL) .GT. FPMAX .OR. ABSC(FCL) .LT. 1./FPMAX) THEN
87 C309R6=G(1)
88 FCL=1
89 RE=1
90 NUSED=0
91 RETURN
92 END IF
93 GSUM=(TC+SC*TANL)/FCL
94 G(N)=GSUM-GLAST
95 GLAST=GSUM
96 AT=ABSC(G(N))
97 IF(AT .LT. ABSC(GSUM)*EPS) THEN
98 FCL=FCL*COSL
99 C309R6=GSUM
100 RE=AT/ABSC(GSUM)
101 NUSED=N
102 RETURN
103 END IF
104 IF(J .GT. 0 .OR. AT .GT. ATL .OR. N .GE. NMAX-2) J=J+1
105 IF(J .EQ. 0) GO TO 10
106 CALL C309R7(G,C,J,N,XX,EPS)
107 IF(N .LT. 0) THEN
108 C309R6=G(1)
109 FCL=1
110 RE=1
111 NUSED=0
112 RETURN
113 END IF
114 DO 60 K = MAX(J,2),N
115 D=1/(D*C(K)+1)
116 DF=DF*D-DF
117 F=F+DF
118 IF(ABSC(DF) .LT. ABSC(F)*EPS .OR.
119 1 DF .EQ. 0 .AND. F .EQ. 0 .AND. N .GE. 4) THEN
120 C309R6=F
121 FCL=FCL*COSL
122 RE=ABSC(DF)/ABSC(F)
123 NUSED=K
124 RETURN
125 END IF
126 60 CONTINUE
127 J=N
128 10 ATL=AT
129 C309R6=F
130 FCL=FCL*COSL
131 RE=ABSC(DF)/ABSC(F)
132 NUSED=-NMAX
133 RETURN
134 END
135#endif