cunik.f 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. *DECK CUNIK
  2. SUBROUTINE CUNIK (ZR, FNU, IKFLG, IPMTR, TOL, INIT, PHI, ZETA1,
  3. + ZETA2, SUM, CWRK)
  4. C***BEGIN PROLOGUE CUNIK
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CBESI and CBESK
  7. C***LIBRARY SLATEC
  8. C***TYPE ALL (CUNIK-A, ZUNIK-A)
  9. C***AUTHOR Amos, D. E., (SNL)
  10. C***DESCRIPTION
  11. C
  12. C CUNIK COMPUTES PARAMETERS FOR THE UNIFORM ASYMPTOTIC
  13. C EXPANSIONS OF THE I AND K FUNCTIONS ON IKFLG= 1 OR 2
  14. C RESPECTIVELY BY
  15. C
  16. C W(FNU,ZR) = PHI*EXP(ZETA)*SUM
  17. C
  18. C WHERE ZETA=-ZETA1 + ZETA2 OR
  19. C ZETA1 - ZETA2
  20. C
  21. C THE FIRST CALL MUST HAVE INIT=0. SUBSEQUENT CALLS WITH THE
  22. C SAME ZR AND FNU WILL RETURN THE I OR K FUNCTION ON IKFLG=
  23. C 1 OR 2 WITH NO CHANGE IN INIT. CWRK IS A COMPLEX WORK
  24. C ARRAY. IPMTR=0 COMPUTES ALL PARAMETERS. IPMTR=1 COMPUTES PHI,
  25. C ZETA1,ZETA2.
  26. C
  27. C***SEE ALSO CBESI, CBESK
  28. C***ROUTINES CALLED R1MACH
  29. C***REVISION HISTORY (YYMMDD)
  30. C 830501 DATE WRITTEN
  31. C 910415 Prologue converted to Version 4.0 format. (BAB)
  32. C***END PROLOGUE CUNIK
  33. COMPLEX CFN, CON, CONE, CRFN, CWRK, CZERO, PHI, S, SR, SUM, T,
  34. * T2, ZETA1, ZETA2, ZN, ZR
  35. REAL AC, C, FNU, RFN, TEST, TOL, TSTR, TSTI, R1MACH
  36. INTEGER I, IKFLG, INIT, IPMTR, J, K, L
  37. DIMENSION C(120), CWRK(16), CON(2)
  38. DATA CZERO, CONE / (0.0E0,0.0E0), (1.0E0,0.0E0) /
  39. DATA CON(1), CON(2) /
  40. 1(3.98942280401432678E-01,0.0E0),(1.25331413731550025E+00,0.0E0)/
  41. DATA C(1), C(2), C(3), C(4), C(5), C(6), C(7), C(8), C(9), C(10),
  42. 1 C(11), C(12), C(13), C(14), C(15), C(16), C(17), C(18),
  43. 2 C(19), C(20), C(21), C(22), C(23), C(24)/
  44. 3 1.00000000000000000E+00, -2.08333333333333333E-01,
  45. 4 1.25000000000000000E-01, 3.34201388888888889E-01,
  46. 5 -4.01041666666666667E-01, 7.03125000000000000E-02,
  47. 6 -1.02581259645061728E+00, 1.84646267361111111E+00,
  48. 7 -8.91210937500000000E-01, 7.32421875000000000E-02,
  49. 8 4.66958442342624743E+00, -1.12070026162229938E+01,
  50. 9 8.78912353515625000E+00, -2.36408691406250000E+00,
  51. A 1.12152099609375000E-01, -2.82120725582002449E+01,
  52. B 8.46362176746007346E+01, -9.18182415432400174E+01,
  53. C 4.25349987453884549E+01, -7.36879435947963170E+00,
  54. D 2.27108001708984375E-01, 2.12570130039217123E+02,
  55. E -7.65252468141181642E+02, 1.05999045252799988E+03/
  56. DATA C(25), C(26), C(27), C(28), C(29), C(30), C(31), C(32),
  57. 1 C(33), C(34), C(35), C(36), C(37), C(38), C(39), C(40),
  58. 2 C(41), C(42), C(43), C(44), C(45), C(46), C(47), C(48)/
  59. 3 -6.99579627376132541E+02, 2.18190511744211590E+02,
  60. 4 -2.64914304869515555E+01, 5.72501420974731445E-01,
  61. 5 -1.91945766231840700E+03, 8.06172218173730938E+03,
  62. 6 -1.35865500064341374E+04, 1.16553933368645332E+04,
  63. 7 -5.30564697861340311E+03, 1.20090291321635246E+03,
  64. 8 -1.08090919788394656E+02, 1.72772750258445740E+00,
  65. 9 2.02042913309661486E+04, -9.69805983886375135E+04,
  66. A 1.92547001232531532E+05, -2.03400177280415534E+05,
  67. B 1.22200464983017460E+05, -4.11926549688975513E+04,
  68. C 7.10951430248936372E+03, -4.93915304773088012E+02,
  69. D 6.07404200127348304E+00, -2.42919187900551333E+05,
  70. E 1.31176361466297720E+06, -2.99801591853810675E+06/
  71. DATA C(49), C(50), C(51), C(52), C(53), C(54), C(55), C(56),
  72. 1 C(57), C(58), C(59), C(60), C(61), C(62), C(63), C(64),
  73. 2 C(65), C(66), C(67), C(68), C(69), C(70), C(71), C(72)/
  74. 3 3.76327129765640400E+06, -2.81356322658653411E+06,
  75. 4 1.26836527332162478E+06, -3.31645172484563578E+05,
  76. 5 4.52187689813627263E+04, -2.49983048181120962E+03,
  77. 6 2.43805296995560639E+01, 3.28446985307203782E+06,
  78. 7 -1.97068191184322269E+07, 5.09526024926646422E+07,
  79. 8 -7.41051482115326577E+07, 6.63445122747290267E+07,
  80. 9 -3.75671766607633513E+07, 1.32887671664218183E+07,
  81. A -2.78561812808645469E+06, 3.08186404612662398E+05,
  82. B -1.38860897537170405E+04, 1.10017140269246738E+02,
  83. C -4.93292536645099620E+07, 3.25573074185765749E+08,
  84. D -9.39462359681578403E+08, 1.55359689957058006E+09,
  85. E -1.62108055210833708E+09, 1.10684281682301447E+09/
  86. DATA C(73), C(74), C(75), C(76), C(77), C(78), C(79), C(80),
  87. 1 C(81), C(82), C(83), C(84), C(85), C(86), C(87), C(88),
  88. 2 C(89), C(90), C(91), C(92), C(93), C(94), C(95), C(96)/
  89. 3 -4.95889784275030309E+08, 1.42062907797533095E+08,
  90. 4 -2.44740627257387285E+07, 2.24376817792244943E+06,
  91. 5 -8.40054336030240853E+04, 5.51335896122020586E+02,
  92. 6 8.14789096118312115E+08, -5.86648149205184723E+09,
  93. 7 1.86882075092958249E+10, -3.46320433881587779E+10,
  94. 8 4.12801855797539740E+10, -3.30265997498007231E+10,
  95. 9 1.79542137311556001E+10, -6.56329379261928433E+09,
  96. A 1.55927986487925751E+09, -2.25105661889415278E+08,
  97. B 1.73951075539781645E+07, -5.49842327572288687E+05,
  98. C 3.03809051092238427E+03, -1.46792612476956167E+10,
  99. D 1.14498237732025810E+11, -3.99096175224466498E+11,
  100. E 8.19218669548577329E+11, -1.09837515608122331E+12/
  101. DATA C(97), C(98), C(99), C(100), C(101), C(102), C(103), C(104),
  102. 1 C(105), C(106), C(107), C(108), C(109), C(110), C(111),
  103. 2 C(112), C(113), C(114), C(115), C(116), C(117), C(118)/
  104. 3 1.00815810686538209E+12, -6.45364869245376503E+11,
  105. 4 2.87900649906150589E+11, -8.78670721780232657E+10,
  106. 5 1.76347306068349694E+10, -2.16716498322379509E+09,
  107. 6 1.43157876718888981E+08, -3.87183344257261262E+06,
  108. 7 1.82577554742931747E+04, 2.86464035717679043E+11,
  109. 8 -2.40629790002850396E+12, 9.10934118523989896E+12,
  110. 9 -2.05168994109344374E+13, 3.05651255199353206E+13,
  111. A -3.16670885847851584E+13, 2.33483640445818409E+13,
  112. B -1.23204913055982872E+13, 4.61272578084913197E+12,
  113. C -1.19655288019618160E+12, 2.05914503232410016E+11,
  114. D -2.18229277575292237E+10, 1.24700929351271032E+09/
  115. DATA C(119), C(120)/
  116. 1 -2.91883881222208134E+07, 1.18838426256783253E+05/
  117. C***FIRST EXECUTABLE STATEMENT CUNIK
  118. IF (INIT.NE.0) GO TO 40
  119. C-----------------------------------------------------------------------
  120. C INITIALIZE ALL VARIABLES
  121. C-----------------------------------------------------------------------
  122. RFN = 1.0E0/FNU
  123. CRFN = CMPLX(RFN,0.0E0)
  124. C T = ZR*CRFN
  125. C-----------------------------------------------------------------------
  126. C OVERFLOW TEST (ZR/FNU TOO SMALL)
  127. C-----------------------------------------------------------------------
  128. TSTR = REAL(ZR)
  129. TSTI = AIMAG(ZR)
  130. TEST = R1MACH(1)*1.0E+3
  131. AC = FNU*TEST
  132. IF (ABS(TSTR).GT.AC .OR. ABS(TSTI).GT.AC) GO TO 15
  133. AC = 2.0E0*ABS(ALOG(TEST))+FNU
  134. ZETA1 = CMPLX(AC,0.0E0)
  135. ZETA2 = CMPLX(FNU,0.0E0)
  136. PHI=CONE
  137. RETURN
  138. 15 CONTINUE
  139. T=ZR*CRFN
  140. S = CONE + T*T
  141. SR = CSQRT(S)
  142. CFN = CMPLX(FNU,0.0E0)
  143. ZN = (CONE+SR)/T
  144. ZETA1 = CFN*CLOG(ZN)
  145. ZETA2 = CFN*SR
  146. T = CONE/SR
  147. SR = T*CRFN
  148. CWRK(16) = CSQRT(SR)
  149. PHI = CWRK(16)*CON(IKFLG)
  150. IF (IPMTR.NE.0) RETURN
  151. T2 = CONE/S
  152. CWRK(1) = CONE
  153. CRFN = CONE
  154. AC = 1.0E0
  155. L = 1
  156. DO 20 K=2,15
  157. S = CZERO
  158. DO 10 J=1,K
  159. L = L + 1
  160. S = S*T2 + CMPLX(C(L),0.0E0)
  161. 10 CONTINUE
  162. CRFN = CRFN*SR
  163. CWRK(K) = CRFN*S
  164. AC = AC*RFN
  165. TSTR = REAL(CWRK(K))
  166. TSTI = AIMAG(CWRK(K))
  167. TEST = ABS(TSTR) + ABS(TSTI)
  168. IF (AC.LT.TOL .AND. TEST.LT.TOL) GO TO 30
  169. 20 CONTINUE
  170. K = 15
  171. 30 CONTINUE
  172. INIT = K
  173. 40 CONTINUE
  174. IF (IKFLG.EQ.2) GO TO 60
  175. C-----------------------------------------------------------------------
  176. C COMPUTE SUM FOR THE I FUNCTION
  177. C-----------------------------------------------------------------------
  178. S = CZERO
  179. DO 50 I=1,INIT
  180. S = S + CWRK(I)
  181. 50 CONTINUE
  182. SUM = S
  183. PHI = CWRK(16)*CON(1)
  184. RETURN
  185. 60 CONTINUE
  186. C-----------------------------------------------------------------------
  187. C COMPUTE SUM FOR THE K FUNCTION
  188. C-----------------------------------------------------------------------
  189. S = CZERO
  190. T = CONE
  191. DO 70 I=1,INIT
  192. S = S + T*CWRK(I)
  193. T = -T
  194. 70 CONTINUE
  195. SUM = S
  196. PHI = CWRK(16)*CON(2)
  197. RETURN
  198. END