GNU Octave 10.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 
Loading...
Searching...
No Matches
zacon.f
Go to the documentation of this file.
1 SUBROUTINE zacon(ZR, ZI, FNU, KODE, MR, N, YR, YI, NZ, RL, FNUL,
2 * TOL, ELIM, ALIM)
3C***BEGIN PROLOGUE ZACON
4C***REFER TO ZBESK,ZBESH
5C
6C ZACON APPLIES THE ANALYTIC CONTINUATION FORMULA
7C
8C K(FNU,ZN*EXP(MP))=K(FNU,ZN)*EXP(-MP*FNU) - MP*I(FNU,ZN)
9C MP=PI*MR*CMPLX(0.0,1.0)
10C
11C TO CONTINUE THE K FUNCTION FROM THE RIGHT HALF TO THE LEFT
12C HALF Z PLANE
13C
14C***ROUTINES CALLED ZBINU,ZBKNU,ZS1S2,D1MACH,XZABS,ZMLT
15C***END PROLOGUE ZACON
16C COMPLEX CK,CONE,CSCL,CSCR,CSGN,CSPN,CY,CZERO,C1,C2,RZ,SC1,SC2,ST,
17C *S1,S2,Y,Z,ZN
18 DOUBLE PRECISION ALIM, ARG, ASCLE, AS2, AZN, BRY, BSCLE, CKI,
19 * ckr, coner, cpn, cscl, cscr, csgni, csgnr, cspni, cspnr,
20 * csr, csrr, cssr, cyi, cyr, c1i, c1m, c1r, c2i, c2r, elim, fmr,
21 * fn, fnu, fnul, pi, pti, ptr, razn, rl, rzi, rzr, sc1i, sc1r,
22 * sc2i, sc2r, sgn, spn, sti, str, s1i, s1r, s2i, s2r, tol, yi, yr,
23 * yy, zeror, zi, zni, znr, zr, d1mach, xzabs
24 INTEGER I, INU, IUF, KFLAG, KODE, MR, N, NN, NW, NZ
25 dimension yr(n), yi(n), cyr(2), cyi(2), cssr(3), csrr(3), bry(3)
26 DATA pi / 3.14159265358979324d0 /
27 DATA zeror,coner / 0.0d0,1.0d0 /
28 nz = 0
29 znr = -zr
30 zni = -zi
31 nn = n
32 CALL zbinu(znr, zni, fnu, kode, nn, yr, yi, nw, rl, fnul, tol,
33 * elim, alim)
34 IF (nw.LT.0) GO TO 90
35C-----------------------------------------------------------------------
36C ANALYTIC CONTINUATION TO THE LEFT HALF PLANE FOR THE K FUNCTION
37C-----------------------------------------------------------------------
38 nn = min0(2,n)
39 CALL zbknu(znr, zni, fnu, kode, nn, cyr, cyi, nw, tol, elim, alim)
40 IF (nw.NE.0) GO TO 90
41 s1r = cyr(1)
42 s1i = cyi(1)
43 fmr = dble(float(mr))
44 sgn = -dsign(pi,fmr)
45 csgnr = zeror
46 csgni = sgn
47 IF (kode.EQ.1) GO TO 10
48 yy = -zni
49 cpn = dcos(yy)
50 spn = dsin(yy)
51 CALL zmlt(csgnr, csgni, cpn, spn, csgnr, csgni)
52 10 CONTINUE
53C-----------------------------------------------------------------------
54C CALCULATE CSPN=EXP(FNU*PI*I) TO MINIMIZE LOSSES OF SIGNIFICANCE
55C WHEN FNU IS LARGE
56C-----------------------------------------------------------------------
57 inu = int(sngl(fnu))
58 arg = (fnu-dble(float(inu)))*sgn
59 cpn = dcos(arg)
60 spn = dsin(arg)
61 cspnr = cpn
62 cspni = spn
63 IF (mod(inu,2).EQ.0) GO TO 20
64 cspnr = -cspnr
65 cspni = -cspni
66 20 CONTINUE
67 iuf = 0
68 c1r = s1r
69 c1i = s1i
70 c2r = yr(1)
71 c2i = yi(1)
72 ascle = 1.0d+3*d1mach(1)/tol
73 IF (kode.EQ.1) GO TO 30
74 CALL zs1s2(znr, zni, c1r, c1i, c2r, c2i, nw, ascle, alim, iuf)
75 nz = nz + nw
76 sc1r = c1r
77 sc1i = c1i
78 30 CONTINUE
79 CALL zmlt(cspnr, cspni, c1r, c1i, str, sti)
80 CALL zmlt(csgnr, csgni, c2r, c2i, ptr, pti)
81 yr(1) = str + ptr
82 yi(1) = sti + pti
83 IF (n.EQ.1) RETURN
84 cspnr = -cspnr
85 cspni = -cspni
86 s2r = cyr(2)
87 s2i = cyi(2)
88 c1r = s2r
89 c1i = s2i
90 c2r = yr(2)
91 c2i = yi(2)
92 IF (kode.EQ.1) GO TO 40
93 CALL zs1s2(znr, zni, c1r, c1i, c2r, c2i, nw, ascle, alim, iuf)
94 nz = nz + nw
95 sc2r = c1r
96 sc2i = c1i
97 40 CONTINUE
98 CALL zmlt(cspnr, cspni, c1r, c1i, str, sti)
99 CALL zmlt(csgnr, csgni, c2r, c2i, ptr, pti)
100 yr(2) = str + ptr
101 yi(2) = sti + pti
102 IF (n.EQ.2) RETURN
103 cspnr = -cspnr
104 cspni = -cspni
105 azn = xzabs(znr,zni)
106 razn = 1.0d0/azn
107 str = znr*razn
108 sti = -zni*razn
109 rzr = (str+str)*razn
110 rzi = (sti+sti)*razn
111 fn = fnu + 1.0d0
112 ckr = fn*rzr
113 cki = fn*rzi
114C-----------------------------------------------------------------------
115C SCALE NEAR EXPONENT EXTREMES DURING RECURRENCE ON K FUNCTIONS
116C-----------------------------------------------------------------------
117 cscl = 1.0d0/tol
118 cscr = tol
119 cssr(1) = cscl
120 cssr(2) = coner
121 cssr(3) = cscr
122 csrr(1) = cscr
123 csrr(2) = coner
124 csrr(3) = cscl
125 bry(1) = ascle
126 bry(2) = 1.0d0/ascle
127 bry(3) = d1mach(2)
128 as2 = xzabs(s2r,s2i)
129 kflag = 2
130 IF (as2.GT.bry(1)) GO TO 50
131 kflag = 1
132 GO TO 60
133 50 CONTINUE
134 IF (as2.LT.bry(2)) GO TO 60
135 kflag = 3
136 60 CONTINUE
137 bscle = bry(kflag)
138 s1r = s1r*cssr(kflag)
139 s1i = s1i*cssr(kflag)
140 s2r = s2r*cssr(kflag)
141 s2i = s2i*cssr(kflag)
142 csr = csrr(kflag)
143 DO 80 i=3,n
144 str = s2r
145 sti = s2i
146 s2r = ckr*str - cki*sti + s1r
147 s2i = ckr*sti + cki*str + s1i
148 s1r = str
149 s1i = sti
150 c1r = s2r*csr
151 c1i = s2i*csr
152 str = c1r
153 sti = c1i
154 c2r = yr(i)
155 c2i = yi(i)
156 IF (kode.EQ.1) GO TO 70
157 IF (iuf.LT.0) GO TO 70
158 CALL zs1s2(znr, zni, c1r, c1i, c2r, c2i, nw, ascle, alim, iuf)
159 nz = nz + nw
160 sc1r = sc2r
161 sc1i = sc2i
162 sc2r = c1r
163 sc2i = c1i
164 IF (iuf.NE.3) GO TO 70
165 iuf = -4
166 s1r = sc1r*cssr(kflag)
167 s1i = sc1i*cssr(kflag)
168 s2r = sc2r*cssr(kflag)
169 s2i = sc2i*cssr(kflag)
170 str = sc2r
171 sti = sc2i
172 70 CONTINUE
173 ptr = cspnr*c1r - cspni*c1i
174 pti = cspnr*c1i + cspni*c1r
175 yr(i) = ptr + csgnr*c2r - csgni*c2i
176 yi(i) = pti + csgnr*c2i + csgni*c2r
177 ckr = ckr + rzr
178 cki = cki + rzi
179 cspnr = -cspnr
180 cspni = -cspni
181 IF (kflag.GE.3) GO TO 80
182 ptr = dabs(c1r)
183 pti = dabs(c1i)
184 c1m = dmax1(ptr,pti)
185 IF (c1m.LE.bscle) GO TO 80
186 kflag = kflag + 1
187 bscle = bry(kflag)
188 s1r = s1r*csr
189 s1i = s1i*csr
190 s2r = str
191 s2i = sti
192 s1r = s1r*cssr(kflag)
193 s1i = s1i*cssr(kflag)
194 s2r = s2r*cssr(kflag)
195 s2i = s2i*cssr(kflag)
196 csr = csrr(kflag)
197 80 CONTINUE
198 RETURN
199 90 CONTINUE
200 nz = -1
201 IF(nw.EQ.(-2)) nz=-2
202 RETURN
203 END
double precision function d1mach(i)
Definition d1mach.f:23
T mod(T x, T y)
Definition lo-mappers.h:294
double precision function xzabs(zr, zi)
Definition xzabs.f:2
subroutine zacon(zr, zi, fnu, kode, mr, n, yr, yi, nz, rl, fnul, tol, elim, alim)
Definition zacon.f:3
subroutine zbinu(zr, zi, fnu, kode, n, cyr, cyi, nz, rl, fnul, tol, elim, alim)
Definition zbinu.f:3
subroutine zbknu(zr, zi, fnu, kode, n, yr, yi, nz, tol, elim, alim)
Definition zbknu.f:3
subroutine zmlt(ar, ai, br, bi, cr, ci)
Definition zmlt.f:2
subroutine zs1s2(zrr, zri, s1r, s1i, s2r, s2i, nz, ascle, alim, iuf)
Definition zs1s2.f:3