github.com/gopherd/gonum@v0.0.4/mathext/internal/amos/amoslib/zbknu.f (about) 1 SUBROUTINE ZBKNU(ZR, ZI, FNU, KODE, N, YR, YI, NZ, TOL, ELIM, 2 * ALIM) 3 C***BEGIN PROLOGUE ZBKNU 4 C***REFER TO ZBESI,ZBESK,ZAIRY,ZBESH 5 C 6 C ZBKNU COMPUTES THE K BESSEL FUNCTION IN THE RIGHT HALF Z PLANE. 7 C 8 C***ROUTINES CALLED DGAMLN,I1MACH,D1MACH,ZKSCL,ZSHCH,ZUCHK,ZABS,ZDIV, 9 C ZEXP,ZLOG,ZMLT,ZSQRT 10 C***END PROLOGUE ZBKNU 11 C 12 DOUBLE PRECISION AA, AK, ALIM, ASCLE, A1, A2, BB, BK, BRY, CAZ, 13 * CBI, CBR, CC, CCHI, CCHR, CKI, CKR, COEFI, COEFR, CONEI, CONER, 14 * CRSCR, CSCLR, CSHI, CSHR, CSI, CSR, CSRR, CSSR, CTWOR, 15 * CZEROI, CZEROR, CZI, CZR, DNU, DNU2, DPI, ELIM, ETEST, FC, FHS, 16 * FI, FK, FKS, FMUI, FMUR, FNU, FPI, FR, G1, G2, HPI, PI, PR, PTI, 17 * PTR, P1I, P1R, P2I, P2M, P2R, QI, QR, RAK, RCAZ, RTHPI, RZI, 18 * RZR, R1, S, SMUI, SMUR, SPI, STI, STR, S1I, S1R, S2I, S2R, TM, 19 * TOL, TTH, T1, T2, YI, YR, ZI, ZR, DGAMLN, D1MACH, ZABS, ELM, 20 * CELMR, ZDR, ZDI, AS, ALAS, HELIM, CYR, CYI 21 INTEGER I, IFLAG, INU, K, KFLAG, KK, KMAX, KODE, KODED, N, NZ, 22 * IDUM, I1MACH, J, IC, INUB, NW 23 DIMENSION YR(N), YI(N), CC(8), CSSR(3), CSRR(3), BRY(3), CYR(2), 24 * CYI(2) 25 C COMPLEX Z,Y,A,B,RZ,SMU,FU,FMU,F,FLRZ,CZ,S1,S2,CSH,CCH 26 C COMPLEX CK,P,Q,COEF,P1,P2,CBK,PT,CZERO,CONE,CTWO,ST,EZ,CS,DK 27 C 28 DATA KMAX / 30 / 29 DATA CZEROR,CZEROI,CONER,CONEI,CTWOR,R1/ 30 1 0.0D0 , 0.0D0 , 1.0D0 , 0.0D0 , 2.0D0 , 2.0D0 / 31 DATA DPI, RTHPI, SPI ,HPI, FPI, TTH / 32 1 3.14159265358979324D0, 1.25331413731550025D0, 33 2 1.90985931710274403D0, 1.57079632679489662D0, 34 3 1.89769999331517738D0, 6.66666666666666666D-01/ 35 DATA CC(1), CC(2), CC(3), CC(4), CC(5), CC(6), CC(7), CC(8)/ 36 1 5.77215664901532861D-01, -4.20026350340952355D-02, 37 2 -4.21977345555443367D-02, 7.21894324666309954D-03, 38 3 -2.15241674114950973D-04, -2.01348547807882387D-05, 39 4 1.13302723198169588D-06, 6.11609510448141582D-09/ 40 C 41 CAZ = ZABS(CMPLX(ZR,ZI,kind=KIND(1.0D0))) 42 CSCLR = 1.0D0/TOL 43 CRSCR = TOL 44 CSSR(1) = CSCLR 45 CSSR(2) = 1.0D0 46 CSSR(3) = CRSCR 47 CSRR(1) = CRSCR 48 CSRR(2) = 1.0D0 49 CSRR(3) = CSCLR 50 BRY(1) = 1.0D+3*D1MACH(1)/TOL 51 BRY(2) = 1.0D0/BRY(1) 52 BRY(3) = D1MACH(2) 53 NZ = 0 54 IFLAG = 0 55 KODED = KODE 56 RCAZ = 1.0D0/CAZ 57 STR = ZR*RCAZ 58 STI = -ZI*RCAZ 59 RZR = (STR+STR)*RCAZ 60 RZI = (STI+STI)*RCAZ 61 INU = INT(SNGL(FNU+0.5D0)) 62 DNU = FNU - DBLE(FLOAT(INU)) 63 IF (DABS(DNU).EQ.0.5D0) GO TO 110 64 DNU2 = 0.0D0 65 IF (DABS(DNU).GT.TOL) DNU2 = DNU*DNU 66 IF (CAZ.GT.R1) GO TO 110 67 C----------------------------------------------------------------------- 68 C SERIES FOR CABS(Z).LE.R1 69 C----------------------------------------------------------------------- 70 FC = 1.0D0 71 CALL ZLOG(RZR, RZI, SMUR, SMUI, IDUM) 72 FMUR = SMUR*DNU 73 FMUI = SMUI*DNU 74 CALL ZSHCH(FMUR, FMUI, CSHR, CSHI, CCHR, CCHI) 75 IF (DNU.EQ.0.0D0) GO TO 10 76 FC = DNU*DPI 77 FC = FC/DSIN(FC) 78 SMUR = CSHR/DNU 79 SMUI = CSHI/DNU 80 10 CONTINUE 81 A2 = 1.0D0 + DNU 82 C----------------------------------------------------------------------- 83 C GAM(1-Z)*GAM(1+Z)=PI*Z/SIN(PI*Z), T1=1/GAM(1-DNU), T2=1/GAM(1+DNU) 84 C----------------------------------------------------------------------- 85 T2 = DEXP(-DGAMLN(A2,IDUM)) 86 T1 = 1.0D0/(T2*FC) 87 IF (DABS(DNU).GT.0.1D0) GO TO 40 88 C----------------------------------------------------------------------- 89 C SERIES FOR F0 TO RESOLVE INDETERMINACY FOR SMALL ABS(DNU) 90 C----------------------------------------------------------------------- 91 AK = 1.0D0 92 S = CC(1) 93 DO 20 K=2,8 94 AK = AK*DNU2 95 TM = CC(K)*AK 96 S = S + TM 97 IF (DABS(TM).LT.TOL) GO TO 30 98 20 CONTINUE 99 30 G1 = -S 100 GO TO 50 101 40 CONTINUE 102 G1 = (T1-T2)/(DNU+DNU) 103 50 CONTINUE 104 G2 = (T1+T2)*0.5D0 105 FR = FC*(CCHR*G1+SMUR*G2) 106 FI = FC*(CCHI*G1+SMUI*G2) 107 CALL ZEXP(FMUR, FMUI, STR, STI) 108 PR = 0.5D0*STR/T2 109 PI = 0.5D0*STI/T2 110 CALL ZDIV(0.5D0, 0.0D0, STR, STI, PTR, PTI) 111 QR = PTR/T1 112 QI = PTI/T1 113 S1R = FR 114 S1I = FI 115 S2R = PR 116 S2I = PI 117 AK = 1.0D0 118 A1 = 1.0D0 119 CKR = CONER 120 CKI = CONEI 121 BK = 1.0D0 - DNU2 122 IF (INU.GT.0 .OR. N.GT.1) GO TO 80 123 C----------------------------------------------------------------------- 124 C GENERATE K(FNU,Z), 0.0D0 .LE. FNU .LT. 0.5D0 AND N=1 125 C----------------------------------------------------------------------- 126 IF (CAZ.LT.TOL) GO TO 70 127 CALL ZMLT(ZR, ZI, ZR, ZI, CZR, CZI) 128 CZR = 0.25D0*CZR 129 CZI = 0.25D0*CZI 130 T1 = 0.25D0*CAZ*CAZ 131 60 CONTINUE 132 FR = (FR*AK+PR+QR)/BK 133 FI = (FI*AK+PI+QI)/BK 134 STR = 1.0D0/(AK-DNU) 135 PR = PR*STR 136 PI = PI*STR 137 STR = 1.0D0/(AK+DNU) 138 QR = QR*STR 139 QI = QI*STR 140 STR = CKR*CZR - CKI*CZI 141 RAK = 1.0D0/AK 142 CKI = (CKR*CZI+CKI*CZR)*RAK 143 CKR = STR*RAK 144 S1R = CKR*FR - CKI*FI + S1R 145 S1I = CKR*FI + CKI*FR + S1I 146 A1 = A1*T1*RAK 147 BK = BK + AK + AK + 1.0D0 148 AK = AK + 1.0D0 149 IF (A1.GT.TOL) GO TO 60 150 70 CONTINUE 151 YR(1) = S1R 152 YI(1) = S1I 153 IF (KODED.EQ.1) RETURN 154 CALL ZEXP(ZR, ZI, STR, STI) 155 CALL ZMLT(S1R, S1I, STR, STI, YR(1), YI(1)) 156 RETURN 157 C----------------------------------------------------------------------- 158 C GENERATE K(DNU,Z) AND K(DNU+1,Z) FOR FORWARD RECURRENCE 159 C----------------------------------------------------------------------- 160 80 CONTINUE 161 IF (CAZ.LT.TOL) GO TO 100 162 CALL ZMLT(ZR, ZI, ZR, ZI, CZR, CZI) 163 CZR = 0.25D0*CZR 164 CZI = 0.25D0*CZI 165 T1 = 0.25D0*CAZ*CAZ 166 90 CONTINUE 167 FR = (FR*AK+PR+QR)/BK 168 FI = (FI*AK+PI+QI)/BK 169 STR = 1.0D0/(AK-DNU) 170 PR = PR*STR 171 PI = PI*STR 172 STR = 1.0D0/(AK+DNU) 173 QR = QR*STR 174 QI = QI*STR 175 STR = CKR*CZR - CKI*CZI 176 RAK = 1.0D0/AK 177 CKI = (CKR*CZI+CKI*CZR)*RAK 178 CKR = STR*RAK 179 S1R = CKR*FR - CKI*FI + S1R 180 S1I = CKR*FI + CKI*FR + S1I 181 STR = PR - FR*AK 182 STI = PI - FI*AK 183 S2R = CKR*STR - CKI*STI + S2R 184 S2I = CKR*STI + CKI*STR + S2I 185 A1 = A1*T1*RAK 186 BK = BK + AK + AK + 1.0D0 187 AK = AK + 1.0D0 188 IF (A1.GT.TOL) GO TO 90 189 100 CONTINUE 190 KFLAG = 2 191 A1 = FNU + 1.0D0 192 AK = A1*DABS(SMUR) 193 IF (AK.GT.ALIM) KFLAG = 3 194 STR = CSSR(KFLAG) 195 P2R = S2R*STR 196 P2I = S2I*STR 197 CALL ZMLT(P2R, P2I, RZR, RZI, S2R, S2I) 198 S1R = S1R*STR 199 S1I = S1I*STR 200 IF (KODED.EQ.1) GO TO 210 201 CALL ZEXP(ZR, ZI, FR, FI) 202 CALL ZMLT(S1R, S1I, FR, FI, S1R, S1I) 203 CALL ZMLT(S2R, S2I, FR, FI, S2R, S2I) 204 GO TO 210 205 C----------------------------------------------------------------------- 206 C IFLAG=0 MEANS NO UNDERFLOW OCCURRED 207 C IFLAG=1 MEANS AN UNDERFLOW OCCURRED- COMPUTATION PROCEEDS WITH 208 C KODED=2 AND A TEST FOR ON SCALE VALUES IS MADE DURING FORWARD 209 C RECURSION 210 C----------------------------------------------------------------------- 211 110 CONTINUE 212 CALL ZSQRT(ZR, ZI, STR, STI) 213 CALL ZDIV(RTHPI, CZEROI, STR, STI, COEFR, COEFI) 214 KFLAG = 2 215 IF (KODED.EQ.2) GO TO 120 216 IF (ZR.GT.ALIM) GO TO 290 217 C BLANK LINE 218 STR = DEXP(-ZR)*CSSR(KFLAG) 219 STI = -STR*DSIN(ZI) 220 STR = STR*DCOS(ZI) 221 CALL ZMLT(COEFR, COEFI, STR, STI, COEFR, COEFI) 222 120 CONTINUE 223 IF (DABS(DNU).EQ.0.5D0) GO TO 300 224 C----------------------------------------------------------------------- 225 C MILLER ALGORITHM FOR CABS(Z).GT.R1 226 C----------------------------------------------------------------------- 227 AK = DCOS(DPI*DNU) 228 AK = DABS(AK) 229 IF (AK.EQ.CZEROR) GO TO 300 230 FHS = DABS(0.25D0-DNU2) 231 IF (FHS.EQ.CZEROR) GO TO 300 232 C----------------------------------------------------------------------- 233 C COMPUTE R2=F(E). IF CABS(Z).GE.R2, USE FORWARD RECURRENCE TO 234 C DETERMINE THE BACKWARD INDEX K. R2=F(E) IS A STRAIGHT LINE ON 235 C 12.LE.E.LE.60. E IS COMPUTED FROM 2**(-E)=B**(1-I1MACH(14))= 236 C TOL WHERE B IS THE BASE OF THE ARITHMETIC. 237 C----------------------------------------------------------------------- 238 T1 = DBLE(FLOAT(I1MACH(14)-1)) 239 T1 = T1*D1MACH(5)*3.321928094D0 240 T1 = DMAX1(T1,12.0D0) 241 T1 = DMIN1(T1,60.0D0) 242 T2 = TTH*T1 - 6.0D0 243 IF (ZR.NE.0.0D0) GO TO 130 244 T1 = HPI 245 GO TO 140 246 130 CONTINUE 247 T1 = DATAN(ZI/ZR) 248 T1 = DABS(T1) 249 140 CONTINUE 250 IF (T2.GT.CAZ) GO TO 170 251 C----------------------------------------------------------------------- 252 C FORWARD RECURRENCE LOOP WHEN CABS(Z).GE.R2 253 C----------------------------------------------------------------------- 254 ETEST = AK/(DPI*CAZ*TOL) 255 FK = CONER 256 IF (ETEST.LT.CONER) GO TO 180 257 FKS = CTWOR 258 CKR = CAZ + CAZ + CTWOR 259 P1R = CZEROR 260 P2R = CONER 261 DO 150 I=1,KMAX 262 AK = FHS/FKS 263 CBR = CKR/(FK+CONER) 264 PTR = P2R 265 P2R = CBR*P2R - P1R*AK 266 P1R = PTR 267 CKR = CKR + CTWOR 268 FKS = FKS + FK + FK + CTWOR 269 FHS = FHS + FK + FK 270 FK = FK + CONER 271 STR = DABS(P2R)*FK 272 IF (ETEST.LT.STR) GO TO 160 273 150 CONTINUE 274 GO TO 310 275 160 CONTINUE 276 FK = FK + SPI*T1*DSQRT(T2/CAZ) 277 FHS = DABS(0.25D0-DNU2) 278 GO TO 180 279 170 CONTINUE 280 C----------------------------------------------------------------------- 281 C COMPUTE BACKWARD INDEX K FOR CABS(Z).LT.R2 282 C----------------------------------------------------------------------- 283 A2 = DSQRT(CAZ) 284 AK = FPI*AK/(TOL*DSQRT(A2)) 285 AA = 3.0D0*T1/(1.0D0+CAZ) 286 BB = 14.7D0*T1/(28.0D0+CAZ) 287 AK = (DLOG(AK)+CAZ*DCOS(AA)/(1.0D0+0.008D0*CAZ))/DCOS(BB) 288 FK = 0.12125D0*AK*AK/CAZ + 1.5D0 289 180 CONTINUE 290 C----------------------------------------------------------------------- 291 C BACKWARD RECURRENCE LOOP FOR MILLER ALGORITHM 292 C----------------------------------------------------------------------- 293 K = INT(SNGL(FK)) 294 FK = DBLE(FLOAT(K)) 295 FKS = FK*FK 296 P1R = CZEROR 297 P1I = CZEROI 298 P2R = TOL 299 P2I = CZEROI 300 CSR = P2R 301 CSI = P2I 302 DO 190 I=1,K 303 A1 = FKS - FK 304 AK = (FKS+FK)/(A1+FHS) 305 RAK = 2.0D0/(FK+CONER) 306 CBR = (FK+ZR)*RAK 307 CBI = ZI*RAK 308 PTR = P2R 309 PTI = P2I 310 P2R = (PTR*CBR-PTI*CBI-P1R)*AK 311 P2I = (PTI*CBR+PTR*CBI-P1I)*AK 312 P1R = PTR 313 P1I = PTI 314 CSR = CSR + P2R 315 CSI = CSI + P2I 316 FKS = A1 - FK + CONER 317 FK = FK - CONER 318 190 CONTINUE 319 C----------------------------------------------------------------------- 320 C COMPUTE (P2/CS)=(P2/CABS(CS))*(CONJG(CS)/CABS(CS)) FOR BETTER 321 C SCALING 322 C----------------------------------------------------------------------- 323 TM = ZABS(CMPLX(CSR,CSI,kind=KIND(1.0D0))) 324 PTR = 1.0D0/TM 325 S1R = P2R*PTR 326 S1I = P2I*PTR 327 CSR = CSR*PTR 328 CSI = -CSI*PTR 329 CALL ZMLT(COEFR, COEFI, S1R, S1I, STR, STI) 330 CALL ZMLT(STR, STI, CSR, CSI, S1R, S1I) 331 IF (INU.GT.0 .OR. N.GT.1) GO TO 200 332 ZDR = ZR 333 ZDI = ZI 334 IF(IFLAG.EQ.1) GO TO 270 335 GO TO 240 336 200 CONTINUE 337 C----------------------------------------------------------------------- 338 C COMPUTE P1/P2=(P1/CABS(P2)*CONJG(P2)/CABS(P2) FOR SCALING 339 C----------------------------------------------------------------------- 340 TM = ZABS(CMPLX(P2R,P2I,kind=KIND(1.0D0))) 341 PTR = 1.0D0/TM 342 P1R = P1R*PTR 343 P1I = P1I*PTR 344 P2R = P2R*PTR 345 P2I = -P2I*PTR 346 CALL ZMLT(P1R, P1I, P2R, P2I, PTR, PTI) 347 STR = DNU + 0.5D0 - PTR 348 STI = -PTI 349 CALL ZDIV(STR, STI, ZR, ZI, STR, STI) 350 STR = STR + 1.0D0 351 CALL ZMLT(STR, STI, S1R, S1I, S2R, S2I) 352 C----------------------------------------------------------------------- 353 C FORWARD RECURSION ON THE THREE TERM RECURSION WITH RELATION WITH 354 C SCALING NEAR EXPONENT EXTREMES ON KFLAG=1 OR KFLAG=3 355 C----------------------------------------------------------------------- 356 210 CONTINUE 357 STR = DNU + 1.0D0 358 CKR = STR*RZR 359 CKI = STR*RZI 360 IF (N.EQ.1) INU = INU - 1 361 IF (INU.GT.0) GO TO 220 362 IF (N.GT.1) GO TO 215 363 S1R = S2R 364 S1I = S2I 365 215 CONTINUE 366 ZDR = ZR 367 ZDI = ZI 368 IF(IFLAG.EQ.1) GO TO 270 369 GO TO 240 370 220 CONTINUE 371 INUB = 1 372 IF(IFLAG.EQ.1) GO TO 261 373 225 CONTINUE 374 P1R = CSRR(KFLAG) 375 ASCLE = BRY(KFLAG) 376 DO 230 I=INUB,INU 377 STR = S2R 378 STI = S2I 379 S2R = CKR*STR - CKI*STI + S1R 380 S2I = CKR*STI + CKI*STR + S1I 381 S1R = STR 382 S1I = STI 383 CKR = CKR + RZR 384 CKI = CKI + RZI 385 IF (KFLAG.GE.3) GO TO 230 386 P2R = S2R*P1R 387 P2I = S2I*P1R 388 STR = DABS(P2R) 389 STI = DABS(P2I) 390 P2M = DMAX1(STR,STI) 391 IF (P2M.LE.ASCLE) GO TO 230 392 KFLAG = KFLAG + 1 393 ASCLE = BRY(KFLAG) 394 S1R = S1R*P1R 395 S1I = S1I*P1R 396 S2R = P2R 397 S2I = P2I 398 STR = CSSR(KFLAG) 399 S1R = S1R*STR 400 S1I = S1I*STR 401 S2R = S2R*STR 402 S2I = S2I*STR 403 P1R = CSRR(KFLAG) 404 230 CONTINUE 405 IF (N.NE.1) GO TO 240 406 S1R = S2R 407 S1I = S2I 408 240 CONTINUE 409 STR = CSRR(KFLAG) 410 YR(1) = S1R*STR 411 YI(1) = S1I*STR 412 IF (N.EQ.1) RETURN 413 YR(2) = S2R*STR 414 YI(2) = S2I*STR 415 IF (N.EQ.2) RETURN 416 KK = 2 417 250 CONTINUE 418 KK = KK + 1 419 IF (KK.GT.N) RETURN 420 P1R = CSRR(KFLAG) 421 ASCLE = BRY(KFLAG) 422 DO 260 I=KK,N 423 P2R = S2R 424 P2I = S2I 425 S2R = CKR*P2R - CKI*P2I + S1R 426 S2I = CKI*P2R + CKR*P2I + S1I 427 S1R = P2R 428 S1I = P2I 429 CKR = CKR + RZR 430 CKI = CKI + RZI 431 P2R = S2R*P1R 432 P2I = S2I*P1R 433 YR(I) = P2R 434 YI(I) = P2I 435 IF (KFLAG.GE.3) GO TO 260 436 STR = DABS(P2R) 437 STI = DABS(P2I) 438 P2M = DMAX1(STR,STI) 439 IF (P2M.LE.ASCLE) GO TO 260 440 KFLAG = KFLAG + 1 441 ASCLE = BRY(KFLAG) 442 S1R = S1R*P1R 443 S1I = S1I*P1R 444 S2R = P2R 445 S2I = P2I 446 STR = CSSR(KFLAG) 447 S1R = S1R*STR 448 S1I = S1I*STR 449 S2R = S2R*STR 450 S2I = S2I*STR 451 P1R = CSRR(KFLAG) 452 260 CONTINUE 453 RETURN 454 C----------------------------------------------------------------------- 455 C IFLAG=1 CASES, FORWARD RECURRENCE ON SCALED VALUES ON UNDERFLOW 456 C----------------------------------------------------------------------- 457 261 CONTINUE 458 HELIM = 0.5D0*ELIM 459 ELM = DEXP(-ELIM) 460 CELMR = ELM 461 ASCLE = BRY(1) 462 ZDR = ZR 463 ZDI = ZI 464 IC = -1 465 J = 2 466 DO 262 I=1,INU 467 STR = S2R 468 STI = S2I 469 S2R = STR*CKR-STI*CKI+S1R 470 S2I = STI*CKR+STR*CKI+S1I 471 S1R = STR 472 S1I = STI 473 CKR = CKR+RZR 474 CKI = CKI+RZI 475 AS = ZABS(CMPLX(S2R,S2I,kind=KIND(1.0D0))) 476 ALAS = DLOG(AS) 477 P2R = -ZDR+ALAS 478 IF(P2R.LT.(-ELIM)) GO TO 263 479 CALL ZLOG(S2R,S2I,STR,STI,IDUM) 480 P2R = -ZDR+STR 481 P2I = -ZDI+STI 482 P2M = DEXP(P2R)/TOL 483 P1R = P2M*DCOS(P2I) 484 P1I = P2M*DSIN(P2I) 485 CALL ZUCHK(P1R,P1I,NW,ASCLE,TOL) 486 IF(NW.NE.0) GO TO 263 487 J = 3 - J 488 CYR(J) = P1R 489 CYI(J) = P1I 490 IF(IC.EQ.(I-1)) GO TO 264 491 IC = I 492 GO TO 262 493 263 CONTINUE 494 IF(ALAS.LT.HELIM) GO TO 262 495 ZDR = ZDR-ELIM 496 S1R = S1R*CELMR 497 S1I = S1I*CELMR 498 S2R = S2R*CELMR 499 S2I = S2I*CELMR 500 262 CONTINUE 501 IF(N.NE.1) GO TO 270 502 S1R = S2R 503 S1I = S2I 504 GO TO 270 505 264 CONTINUE 506 KFLAG = 1 507 INUB = I+1 508 S2R = CYR(J) 509 S2I = CYI(J) 510 J = 3 - J 511 S1R = CYR(J) 512 S1I = CYI(J) 513 IF(INUB.LE.INU) GO TO 225 514 IF(N.NE.1) GO TO 240 515 S1R = S2R 516 S1I = S2I 517 GO TO 240 518 270 CONTINUE 519 YR(1) = S1R 520 YI(1) = S1I 521 IF(N.EQ.1) GO TO 280 522 YR(2) = S2R 523 YI(2) = S2I 524 280 CONTINUE 525 ASCLE = BRY(1) 526 CALL ZKSCL(ZDR,ZDI,FNU,N,YR,YI,NZ,RZR,RZI,ASCLE,TOL,ELIM) 527 INU = N - NZ 528 IF (INU.LE.0) RETURN 529 KK = NZ + 1 530 S1R = YR(KK) 531 S1I = YI(KK) 532 YR(KK) = S1R*CSRR(1) 533 YI(KK) = S1I*CSRR(1) 534 IF (INU.EQ.1) RETURN 535 KK = NZ + 2 536 S2R = YR(KK) 537 S2I = YI(KK) 538 YR(KK) = S2R*CSRR(1) 539 YI(KK) = S2I*CSRR(1) 540 IF (INU.EQ.2) RETURN 541 T2 = FNU + DBLE(FLOAT(KK-1)) 542 CKR = T2*RZR 543 CKI = T2*RZI 544 KFLAG = 1 545 GO TO 250 546 290 CONTINUE 547 C----------------------------------------------------------------------- 548 C SCALE BY DEXP(Z), IFLAG = 1 CASES 549 C----------------------------------------------------------------------- 550 KODED = 2 551 IFLAG = 1 552 KFLAG = 2 553 GO TO 120 554 C----------------------------------------------------------------------- 555 C FNU=HALF ODD INTEGER CASE, DNU=-0.5 556 C----------------------------------------------------------------------- 557 300 CONTINUE 558 S1R = COEFR 559 S1I = COEFI 560 S2R = COEFR 561 S2I = COEFI 562 GO TO 210 563 C 564 C 565 310 CONTINUE 566 NZ=-2 567 RETURN 568 END