cbinu.f 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. *DECK CBINU
  2. SUBROUTINE CBINU (Z, FNU, KODE, N, CY, NZ, RL, FNUL, TOL, ELIM,
  3. + ALIM)
  4. C***BEGIN PROLOGUE CBINU
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CAIRY, CBESH, CBESI, CBESJ, CBESK and CBIRY
  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 CBINU COMPUTES THE I FUNCTION IN THE RIGHT HALF Z PLANE
  13. C
  14. C***SEE ALSO CAIRY, CBESH, CBESI, CBESJ, CBESK, CBIRY
  15. C***ROUTINES CALLED CASYI, CBUNI, CMLRI, CSERI, CUOIK, CWRSK
  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 CBINU
  20. COMPLEX CW, CY, CZERO, Z
  21. REAL ALIM, AZ, DFNU, ELIM, FNU, FNUL, RL, TOL
  22. INTEGER I, INW, KODE, N, NLAST, NN, NUI, NW, NZ
  23. DIMENSION CY(N), CW(2)
  24. DATA CZERO / (0.0E0,0.0E0) /
  25. C***FIRST EXECUTABLE STATEMENT CBINU
  26. NZ = 0
  27. AZ = ABS(Z)
  28. NN = N
  29. DFNU = FNU + (N-1)
  30. IF (AZ.LE.2.0E0) GO TO 10
  31. IF (AZ*AZ*0.25E0.GT.DFNU+1.0E0) GO TO 20
  32. 10 CONTINUE
  33. C-----------------------------------------------------------------------
  34. C POWER SERIES
  35. C-----------------------------------------------------------------------
  36. CALL CSERI(Z, FNU, KODE, NN, CY, NW, TOL, ELIM, ALIM)
  37. INW = ABS(NW)
  38. NZ = NZ + INW
  39. NN = NN - INW
  40. IF (NN.EQ.0) RETURN
  41. IF (NW.GE.0) GO TO 120
  42. DFNU = FNU + (NN-1)
  43. 20 CONTINUE
  44. IF (AZ.LT.RL) GO TO 40
  45. IF (DFNU.LE.1.0E0) GO TO 30
  46. IF (AZ+AZ.LT.DFNU*DFNU) GO TO 50
  47. C-----------------------------------------------------------------------
  48. C ASYMPTOTIC EXPANSION FOR LARGE Z
  49. C-----------------------------------------------------------------------
  50. 30 CONTINUE
  51. CALL CASYI(Z, FNU, KODE, NN, CY, NW, RL, TOL, ELIM, ALIM)
  52. IF (NW.LT.0) GO TO 130
  53. GO TO 120
  54. 40 CONTINUE
  55. IF (DFNU.LE.1.0E0) GO TO 70
  56. 50 CONTINUE
  57. C-----------------------------------------------------------------------
  58. C OVERFLOW AND UNDERFLOW TEST ON I SEQUENCE FOR MILLER ALGORITHM
  59. C-----------------------------------------------------------------------
  60. CALL CUOIK(Z, FNU, KODE, 1, NN, CY, NW, TOL, ELIM, ALIM)
  61. IF (NW.LT.0) GO TO 130
  62. NZ = NZ + NW
  63. NN = NN - NW
  64. IF (NN.EQ.0) RETURN
  65. DFNU = FNU+(NN-1)
  66. IF (DFNU.GT.FNUL) GO TO 110
  67. IF (AZ.GT.FNUL) GO TO 110
  68. 60 CONTINUE
  69. IF (AZ.GT.RL) GO TO 80
  70. 70 CONTINUE
  71. C-----------------------------------------------------------------------
  72. C MILLER ALGORITHM NORMALIZED BY THE SERIES
  73. C-----------------------------------------------------------------------
  74. CALL CMLRI(Z, FNU, KODE, NN, CY, NW, TOL)
  75. IF(NW.LT.0) GO TO 130
  76. GO TO 120
  77. 80 CONTINUE
  78. C-----------------------------------------------------------------------
  79. C MILLER ALGORITHM NORMALIZED BY THE WRONSKIAN
  80. C-----------------------------------------------------------------------
  81. C-----------------------------------------------------------------------
  82. C OVERFLOW TEST ON K FUNCTIONS USED IN WRONSKIAN
  83. C-----------------------------------------------------------------------
  84. CALL CUOIK(Z, FNU, KODE, 2, 2, CW, NW, TOL, ELIM, ALIM)
  85. IF (NW.GE.0) GO TO 100
  86. NZ = NN
  87. DO 90 I=1,NN
  88. CY(I) = CZERO
  89. 90 CONTINUE
  90. RETURN
  91. 100 CONTINUE
  92. IF (NW.GT.0) GO TO 130
  93. CALL CWRSK(Z, FNU, KODE, NN, CY, NW, CW, TOL, ELIM, ALIM)
  94. IF (NW.LT.0) GO TO 130
  95. GO TO 120
  96. 110 CONTINUE
  97. C-----------------------------------------------------------------------
  98. C INCREMENT FNU+NN-1 UP TO FNUL, COMPUTE AND RECUR BACKWARD
  99. C-----------------------------------------------------------------------
  100. NUI = FNUL-DFNU + 1
  101. NUI = MAX(NUI,0)
  102. CALL CBUNI(Z, FNU, KODE, NN, CY, NW, NUI, NLAST, FNUL, TOL, ELIM,
  103. * ALIM)
  104. IF (NW.LT.0) GO TO 130
  105. NZ = NZ + NW
  106. IF (NLAST.EQ.0) GO TO 120
  107. NN = NLAST
  108. GO TO 60
  109. 120 CONTINUE
  110. RETURN
  111. 130 CONTINUE
  112. NZ = -1
  113. IF(NW.EQ.(-2)) NZ=-2
  114. RETURN
  115. END