zbinu.f 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. *DECK ZBINU
  2. SUBROUTINE ZBINU (ZR, ZI, FNU, KODE, N, CYR, CYI, NZ, RL, FNUL,
  3. + TOL, ELIM, ALIM)
  4. C***BEGIN PROLOGUE ZBINU
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to ZAIRY, ZBESH, ZBESI, ZBESJ, ZBESK and ZBIRY
  7. C***LIBRARY SLATEC
  8. C***TYPE ALL (CBINU-A, ZBINU-A)
  9. C***AUTHOR Amos, D. E., (SNL)
  10. C***DESCRIPTION
  11. C
  12. C ZBINU COMPUTES THE I FUNCTION IN THE RIGHT HALF Z PLANE
  13. C
  14. C***SEE ALSO ZAIRY, ZBESH, ZBESI, ZBESJ, ZBESK, ZBIRY
  15. C***ROUTINES CALLED ZABS, ZASYI, ZBUNI, ZMLRI, ZSERI, ZUOIK, ZWRSK
  16. C***REVISION HISTORY (YYMMDD)
  17. C 830501 DATE WRITTEN
  18. C 910415 Prologue converted to Version 4.0 format. (BAB)
  19. C***END PROLOGUE ZBINU
  20. DOUBLE PRECISION ALIM, AZ, CWI, CWR, CYI, CYR, DFNU, ELIM, FNU,
  21. * FNUL, RL, TOL, ZEROI, ZEROR, ZI, ZR, ZABS
  22. INTEGER I, INW, KODE, N, NLAST, NN, NUI, NW, NZ
  23. DIMENSION CYR(N), CYI(N), CWR(2), CWI(2)
  24. EXTERNAL ZABS
  25. DATA ZEROR,ZEROI / 0.0D0, 0.0D0 /
  26. C***FIRST EXECUTABLE STATEMENT ZBINU
  27. NZ = 0
  28. AZ = ZABS(ZR,ZI)
  29. NN = N
  30. DFNU = FNU + (N-1)
  31. IF (AZ.LE.2.0D0) GO TO 10
  32. IF (AZ*AZ*0.25D0.GT.DFNU+1.0D0) GO TO 20
  33. 10 CONTINUE
  34. C-----------------------------------------------------------------------
  35. C POWER SERIES
  36. C-----------------------------------------------------------------------
  37. CALL ZSERI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, TOL, ELIM, ALIM)
  38. INW = ABS(NW)
  39. NZ = NZ + INW
  40. NN = NN - INW
  41. IF (NN.EQ.0) RETURN
  42. IF (NW.GE.0) GO TO 120
  43. DFNU = FNU + (NN-1)
  44. 20 CONTINUE
  45. IF (AZ.LT.RL) GO TO 40
  46. IF (DFNU.LE.1.0D0) GO TO 30
  47. IF (AZ+AZ.LT.DFNU*DFNU) GO TO 50
  48. C-----------------------------------------------------------------------
  49. C ASYMPTOTIC EXPANSION FOR LARGE Z
  50. C-----------------------------------------------------------------------
  51. 30 CONTINUE
  52. CALL ZASYI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, RL, TOL, ELIM,
  53. * ALIM)
  54. IF (NW.LT.0) GO TO 130
  55. GO TO 120
  56. 40 CONTINUE
  57. IF (DFNU.LE.1.0D0) GO TO 70
  58. 50 CONTINUE
  59. C-----------------------------------------------------------------------
  60. C OVERFLOW AND UNDERFLOW TEST ON I SEQUENCE FOR MILLER ALGORITHM
  61. C-----------------------------------------------------------------------
  62. CALL ZUOIK(ZR, ZI, FNU, KODE, 1, NN, CYR, CYI, NW, TOL, ELIM,
  63. * ALIM)
  64. IF (NW.LT.0) GO TO 130
  65. NZ = NZ + NW
  66. NN = NN - NW
  67. IF (NN.EQ.0) RETURN
  68. DFNU = FNU+(NN-1)
  69. IF (DFNU.GT.FNUL) GO TO 110
  70. IF (AZ.GT.FNUL) GO TO 110
  71. 60 CONTINUE
  72. IF (AZ.GT.RL) GO TO 80
  73. 70 CONTINUE
  74. C-----------------------------------------------------------------------
  75. C MILLER ALGORITHM NORMALIZED BY THE SERIES
  76. C-----------------------------------------------------------------------
  77. CALL ZMLRI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, TOL)
  78. IF(NW.LT.0) GO TO 130
  79. GO TO 120
  80. 80 CONTINUE
  81. C-----------------------------------------------------------------------
  82. C MILLER ALGORITHM NORMALIZED BY THE WRONSKIAN
  83. C-----------------------------------------------------------------------
  84. C-----------------------------------------------------------------------
  85. C OVERFLOW TEST ON K FUNCTIONS USED IN WRONSKIAN
  86. C-----------------------------------------------------------------------
  87. CALL ZUOIK(ZR, ZI, FNU, KODE, 2, 2, CWR, CWI, NW, TOL, ELIM,
  88. * ALIM)
  89. IF (NW.GE.0) GO TO 100
  90. NZ = NN
  91. DO 90 I=1,NN
  92. CYR(I) = ZEROR
  93. CYI(I) = ZEROI
  94. 90 CONTINUE
  95. RETURN
  96. 100 CONTINUE
  97. IF (NW.GT.0) GO TO 130
  98. CALL ZWRSK(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, CWR, CWI, TOL,
  99. * ELIM, ALIM)
  100. IF (NW.LT.0) GO TO 130
  101. GO TO 120
  102. 110 CONTINUE
  103. C-----------------------------------------------------------------------
  104. C INCREMENT FNU+NN-1 UP TO FNUL, COMPUTE AND RECUR BACKWARD
  105. C-----------------------------------------------------------------------
  106. NUI = FNUL-DFNU + 1
  107. NUI = MAX(NUI,0)
  108. CALL ZBUNI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, NUI, NLAST, FNUL,
  109. * TOL, ELIM, ALIM)
  110. IF (NW.LT.0) GO TO 130
  111. NZ = NZ + NW
  112. IF (NLAST.EQ.0) GO TO 120
  113. NN = NLAST
  114. GO TO 60
  115. 120 CONTINUE
  116. RETURN
  117. 130 CONTINUE
  118. NZ = -1
  119. IF(NW.EQ.(-2)) NZ=-2
  120. RETURN
  121. END