1 SUBROUTINE ZBINU(ZR, ZI, FNU, KODE, N, CYR, CYI, NZ, RL, FNUL, 2 * TOL, ELIM, ALIM) 3C***BEGIN PROLOGUE ZBINU 4C***REFER TO ZBESH,ZBESI,ZBESJ,ZBESK,ZAIRY,ZBIRY 5C 6C ZBINU COMPUTES THE I FUNCTION IN THE RIGHT HALF Z PLANE 7C 8C***ROUTINES CALLED ZABS,ZASYI,ZBUNI,ZMLRI,ZSERI,ZUOIK,ZWRSK 9C***END PROLOGUE ZBINU 10 DOUBLE PRECISION ALIM, AZ, CWI, CWR, CYI, CYR, DFNU, ELIM, FNU, 11 * FNUL, RL, TOL, ZEROI, ZEROR, ZI, ZR, ZABS 12 INTEGER I, INW, KODE, N, NLAST, NN, NUI, NW, NZ 13 DIMENSION CYR(N), CYI(N), CWR(2), CWI(2) 14 DATA ZEROR,ZEROI / 0.0D0, 0.0D0 / 15C 16 NZ = 0 17 AZ = ZABS(CMPLX(ZR,ZI,kind=KIND(1.0D0))) 18 NN = N 19 DFNU = FNU + DBLE(FLOAT(N-1)) 20 IF (AZ.LE.2.0D0) GO TO 10 21 IF (AZ*AZ*0.25D0.GT.DFNU+1.0D0) GO TO 20 22 10 CONTINUE 23C----------------------------------------------------------------------- 24C POWER SERIES 25C----------------------------------------------------------------------- 26 CALL ZSERI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, TOL, ELIM, ALIM) 27 INW = IABS(NW) 28 NZ = NZ + INW 29 NN = NN - INW 30 IF (NN.EQ.0) RETURN 31 IF (NW.GE.0) GO TO 120 32 DFNU = FNU + DBLE(FLOAT(NN-1)) 33 20 CONTINUE 34 IF (AZ.LT.RL) GO TO 40 35 IF (DFNU.LE.1.0D0) GO TO 30 36 IF (AZ+AZ.LT.DFNU*DFNU) GO TO 50 37C----------------------------------------------------------------------- 38C ASYMPTOTIC EXPANSION FOR LARGE Z 39C----------------------------------------------------------------------- 40 30 CONTINUE 41 CALL ZASYI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, RL, TOL, ELIM, 42 * ALIM) 43 IF (NW.LT.0) GO TO 130 44 GO TO 120 45 40 CONTINUE 46 IF (DFNU.LE.1.0D0) GO TO 70 47 50 CONTINUE 48C----------------------------------------------------------------------- 49C OVERFLOW AND UNDERFLOW TEST ON I SEQUENCE FOR MILLER ALGORITHM 50C----------------------------------------------------------------------- 51 CALL ZUOIK(ZR, ZI, FNU, KODE, 1, NN, CYR, CYI, NW, TOL, ELIM, 52 * ALIM) 53 IF (NW.LT.0) GO TO 130 54 NZ = NZ + NW 55 NN = NN - NW 56 IF (NN.EQ.0) RETURN 57 DFNU = FNU+DBLE(FLOAT(NN-1)) 58 IF (DFNU.GT.FNUL) GO TO 110 59 IF (AZ.GT.FNUL) GO TO 110 60 60 CONTINUE 61 IF (AZ.GT.RL) GO TO 80 62 70 CONTINUE 63C----------------------------------------------------------------------- 64C MILLER ALGORITHM NORMALIZED BY THE SERIES 65C----------------------------------------------------------------------- 66 CALL ZMLRI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, TOL) 67 IF(NW.LT.0) GO TO 130 68 GO TO 120 69 80 CONTINUE 70C----------------------------------------------------------------------- 71C MILLER ALGORITHM NORMALIZED BY THE WRONSKIAN 72C----------------------------------------------------------------------- 73C----------------------------------------------------------------------- 74C OVERFLOW TEST ON K FUNCTIONS USED IN WRONSKIAN 75C----------------------------------------------------------------------- 76 CALL ZUOIK(ZR, ZI, FNU, KODE, 2, 2, CWR, CWI, NW, TOL, ELIM, 77 * ALIM) 78 IF (NW.GE.0) GO TO 100 79 NZ = NN 80 DO 90 I=1,NN 81 CYR(I) = ZEROR 82 CYI(I) = ZEROI 83 90 CONTINUE 84 RETURN 85 100 CONTINUE 86 IF (NW.GT.0) GO TO 130 87 CALL ZWRSK(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, CWR, CWI, TOL, 88 * ELIM, ALIM) 89 IF (NW.LT.0) GO TO 130 90 GO TO 120 91 110 CONTINUE 92C----------------------------------------------------------------------- 93C INCREMENT FNU+NN-1 UP TO FNUL, COMPUTE AND RECUR BACKWARD 94C----------------------------------------------------------------------- 95 NUI = INT(SNGL(FNUL-DFNU)) + 1 96 NUI = MAX0(NUI,0) 97 CALL ZBUNI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, NUI, NLAST, FNUL, 98 * TOL, ELIM, ALIM) 99 IF (NW.LT.0) GO TO 130 100 NZ = NZ + NW 101 IF (NLAST.EQ.0) GO TO 120 102 NN = NLAST 103 GO TO 60 104 120 CONTINUE 105 RETURN 106 130 CONTINUE 107 NZ = -1 108 IF(NW.EQ.(-2)) NZ=-2 109 RETURN 110 END 111