]>
Commit | Line | Data |
---|---|---|
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) | |
12 | C | |
13 | C evaluate the ASYMPTOTIC EXPANSION for the | |
14 | C LOGARITHMIC DERIVATIVE OF THE REGULAR SOLUTION | |
15 | C | |
16 | C *** CF1A = f = F'(XL,ETA,RHO)/F(XL,ETA,RHO) | |
17 | C | |
18 | C that is valid for REAL(RHO)>0, and best for RHO >> ETA**2, XL, | |
19 | C and is derived from the 2F0 expansions for H+ and H- | |
20 | C e.g. by Froeberg (Rev. Mod. Physics Vol 27, p399 , 1955) | |
21 | C Some lines of this subprogram are for convenience copied from | |
22 | C Takemasa, Tamura & Wolter CPC 17 (1979) 351. | |
23 | C | |
24 | C Evaluate to accuracy EPS with at most NMAX terms. | |
25 | C | |
26 | C If the terms start diverging, | |
27 | C the corresponding continued fraction is found by RCF | |
28 | C & evaluated progressively by Steed's method to obtain convergence. | |
29 | C | |
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)) | |
38 | C | |
39 | T1=SIN(REAL(PSI)) | |
40 | T2=COS(REAL(PSI)) | |
41 | ATL=TANH(AIMAG(PSI)) | |
42 | ||
43 | C 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 |