zunik.f 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. *DECK ZUNIK
  2. SUBROUTINE ZUNIK (ZRR, ZRI, FNU, IKFLG, IPMTR, TOL, INIT, PHIR,
  3. + PHII, ZETA1R, ZETA1I, ZETA2R, ZETA2I, SUMR, SUMI, CWRKR, CWRKI)
  4. C***BEGIN PROLOGUE ZUNIK
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to ZBESI and ZBESK
  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 ZUNIK 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 ZBESI, ZBESK
  28. C***ROUTINES CALLED D1MACH, ZDIV, ZLOG, ZSQRT
  29. C***REVISION HISTORY (YYMMDD)
  30. C 830501 DATE WRITTEN
  31. C 910415 Prologue converted to Version 4.0 format. (BAB)
  32. C 930122 Added EXTERNAL statement with ZLOG and ZSQRT. (RWC)
  33. C***END PROLOGUE ZUNIK
  34. C COMPLEX CFN,CON,CONE,CRFN,CWRK,CZERO,PHI,S,SR,SUM,T,T2,ZETA1,
  35. C *ZETA2,ZN,ZR
  36. DOUBLE PRECISION AC, C, CON, CONEI, CONER, CRFNI, CRFNR, CWRKI,
  37. * CWRKR, FNU, PHII, PHIR, RFN, SI, SR, SRI, SRR, STI, STR, SUMI,
  38. * SUMR, TEST, TI, TOL, TR, T2I, T2R, ZEROI, ZEROR, ZETA1I, ZETA1R,
  39. * ZETA2I, ZETA2R, ZNI, ZNR, ZRI, ZRR, D1MACH
  40. INTEGER I, IDUM, IKFLG, INIT, IPMTR, J, K, L
  41. DIMENSION C(120), CWRKR(16), CWRKI(16), CON(2)
  42. EXTERNAL ZLOG, ZSQRT
  43. DATA ZEROR,ZEROI,CONER,CONEI / 0.0D0, 0.0D0, 1.0D0, 0.0D0 /
  44. DATA CON(1), CON(2) /
  45. 1 3.98942280401432678D-01, 1.25331413731550025D+00 /
  46. DATA C(1), C(2), C(3), C(4), C(5), C(6), C(7), C(8), C(9), C(10),
  47. 1 C(11), C(12), C(13), C(14), C(15), C(16), C(17), C(18),
  48. 2 C(19), C(20), C(21), C(22), C(23), C(24)/
  49. 3 1.00000000000000000D+00, -2.08333333333333333D-01,
  50. 4 1.25000000000000000D-01, 3.34201388888888889D-01,
  51. 5 -4.01041666666666667D-01, 7.03125000000000000D-02,
  52. 6 -1.02581259645061728D+00, 1.84646267361111111D+00,
  53. 7 -8.91210937500000000D-01, 7.32421875000000000D-02,
  54. 8 4.66958442342624743D+00, -1.12070026162229938D+01,
  55. 9 8.78912353515625000D+00, -2.36408691406250000D+00,
  56. A 1.12152099609375000D-01, -2.82120725582002449D+01,
  57. B 8.46362176746007346D+01, -9.18182415432400174D+01,
  58. C 4.25349987453884549D+01, -7.36879435947963170D+00,
  59. D 2.27108001708984375D-01, 2.12570130039217123D+02,
  60. E -7.65252468141181642D+02, 1.05999045252799988D+03/
  61. DATA C(25), C(26), C(27), C(28), C(29), C(30), C(31), C(32),
  62. 1 C(33), C(34), C(35), C(36), C(37), C(38), C(39), C(40),
  63. 2 C(41), C(42), C(43), C(44), C(45), C(46), C(47), C(48)/
  64. 3 -6.99579627376132541D+02, 2.18190511744211590D+02,
  65. 4 -2.64914304869515555D+01, 5.72501420974731445D-01,
  66. 5 -1.91945766231840700D+03, 8.06172218173730938D+03,
  67. 6 -1.35865500064341374D+04, 1.16553933368645332D+04,
  68. 7 -5.30564697861340311D+03, 1.20090291321635246D+03,
  69. 8 -1.08090919788394656D+02, 1.72772750258445740D+00,
  70. 9 2.02042913309661486D+04, -9.69805983886375135D+04,
  71. A 1.92547001232531532D+05, -2.03400177280415534D+05,
  72. B 1.22200464983017460D+05, -4.11926549688975513D+04,
  73. C 7.10951430248936372D+03, -4.93915304773088012D+02,
  74. D 6.07404200127348304D+00, -2.42919187900551333D+05,
  75. E 1.31176361466297720D+06, -2.99801591853810675D+06/
  76. DATA C(49), C(50), C(51), C(52), C(53), C(54), C(55), C(56),
  77. 1 C(57), C(58), C(59), C(60), C(61), C(62), C(63), C(64),
  78. 2 C(65), C(66), C(67), C(68), C(69), C(70), C(71), C(72)/
  79. 3 3.76327129765640400D+06, -2.81356322658653411D+06,
  80. 4 1.26836527332162478D+06, -3.31645172484563578D+05,
  81. 5 4.52187689813627263D+04, -2.49983048181120962D+03,
  82. 6 2.43805296995560639D+01, 3.28446985307203782D+06,
  83. 7 -1.97068191184322269D+07, 5.09526024926646422D+07,
  84. 8 -7.41051482115326577D+07, 6.63445122747290267D+07,
  85. 9 -3.75671766607633513D+07, 1.32887671664218183D+07,
  86. A -2.78561812808645469D+06, 3.08186404612662398D+05,
  87. B -1.38860897537170405D+04, 1.10017140269246738D+02,
  88. C -4.93292536645099620D+07, 3.25573074185765749D+08,
  89. D -9.39462359681578403D+08, 1.55359689957058006D+09,
  90. E -1.62108055210833708D+09, 1.10684281682301447D+09/
  91. DATA C(73), C(74), C(75), C(76), C(77), C(78), C(79), C(80),
  92. 1 C(81), C(82), C(83), C(84), C(85), C(86), C(87), C(88),
  93. 2 C(89), C(90), C(91), C(92), C(93), C(94), C(95), C(96)/
  94. 3 -4.95889784275030309D+08, 1.42062907797533095D+08,
  95. 4 -2.44740627257387285D+07, 2.24376817792244943D+06,
  96. 5 -8.40054336030240853D+04, 5.51335896122020586D+02,
  97. 6 8.14789096118312115D+08, -5.86648149205184723D+09,
  98. 7 1.86882075092958249D+10, -3.46320433881587779D+10,
  99. 8 4.12801855797539740D+10, -3.30265997498007231D+10,
  100. 9 1.79542137311556001D+10, -6.56329379261928433D+09,
  101. A 1.55927986487925751D+09, -2.25105661889415278D+08,
  102. B 1.73951075539781645D+07, -5.49842327572288687D+05,
  103. C 3.03809051092238427D+03, -1.46792612476956167D+10,
  104. D 1.14498237732025810D+11, -3.99096175224466498D+11,
  105. E 8.19218669548577329D+11, -1.09837515608122331D+12/
  106. DATA C(97), C(98), C(99), C(100), C(101), C(102), C(103), C(104),
  107. 1 C(105), C(106), C(107), C(108), C(109), C(110), C(111),
  108. 2 C(112), C(113), C(114), C(115), C(116), C(117), C(118)/
  109. 3 1.00815810686538209D+12, -6.45364869245376503D+11,
  110. 4 2.87900649906150589D+11, -8.78670721780232657D+10,
  111. 5 1.76347306068349694D+10, -2.16716498322379509D+09,
  112. 6 1.43157876718888981D+08, -3.87183344257261262D+06,
  113. 7 1.82577554742931747D+04, 2.86464035717679043D+11,
  114. 8 -2.40629790002850396D+12, 9.10934118523989896D+12,
  115. 9 -2.05168994109344374D+13, 3.05651255199353206D+13,
  116. A -3.16670885847851584D+13, 2.33483640445818409D+13,
  117. B -1.23204913055982872D+13, 4.61272578084913197D+12,
  118. C -1.19655288019618160D+12, 2.05914503232410016D+11,
  119. D -2.18229277575292237D+10, 1.24700929351271032D+09/
  120. DATA C(119), C(120)/
  121. 1 -2.91883881222208134D+07, 1.18838426256783253D+05/
  122. C***FIRST EXECUTABLE STATEMENT ZUNIK
  123. IF (INIT.NE.0) GO TO 40
  124. C-----------------------------------------------------------------------
  125. C INITIALIZE ALL VARIABLES
  126. C-----------------------------------------------------------------------
  127. RFN = 1.0D0/FNU
  128. C-----------------------------------------------------------------------
  129. C OVERFLOW TEST (ZR/FNU TOO SMALL)
  130. C-----------------------------------------------------------------------
  131. TEST = D1MACH(1)*1.0D+3
  132. AC = FNU*TEST
  133. IF (ABS(ZRR).GT.AC .OR. ABS(ZRI).GT.AC) GO TO 15
  134. ZETA1R = 2.0D0*ABS(LOG(TEST))+FNU
  135. ZETA1I = 0.0D0
  136. ZETA2R = FNU
  137. ZETA2I = 0.0D0
  138. PHIR = 1.0D0
  139. PHII = 0.0D0
  140. RETURN
  141. 15 CONTINUE
  142. TR = ZRR*RFN
  143. TI = ZRI*RFN
  144. SR = CONER + (TR*TR-TI*TI)
  145. SI = CONEI + (TR*TI+TI*TR)
  146. CALL ZSQRT(SR, SI, SRR, SRI)
  147. STR = CONER + SRR
  148. STI = CONEI + SRI
  149. CALL ZDIV(STR, STI, TR, TI, ZNR, ZNI)
  150. CALL ZLOG(ZNR, ZNI, STR, STI, IDUM)
  151. ZETA1R = FNU*STR
  152. ZETA1I = FNU*STI
  153. ZETA2R = FNU*SRR
  154. ZETA2I = FNU*SRI
  155. CALL ZDIV(CONER, CONEI, SRR, SRI, TR, TI)
  156. SRR = TR*RFN
  157. SRI = TI*RFN
  158. CALL ZSQRT(SRR, SRI, CWRKR(16), CWRKI(16))
  159. PHIR = CWRKR(16)*CON(IKFLG)
  160. PHII = CWRKI(16)*CON(IKFLG)
  161. IF (IPMTR.NE.0) RETURN
  162. CALL ZDIV(CONER, CONEI, SR, SI, T2R, T2I)
  163. CWRKR(1) = CONER
  164. CWRKI(1) = CONEI
  165. CRFNR = CONER
  166. CRFNI = CONEI
  167. AC = 1.0D0
  168. L = 1
  169. DO 20 K=2,15
  170. SR = ZEROR
  171. SI = ZEROI
  172. DO 10 J=1,K
  173. L = L + 1
  174. STR = SR*T2R - SI*T2I + C(L)
  175. SI = SR*T2I + SI*T2R
  176. SR = STR
  177. 10 CONTINUE
  178. STR = CRFNR*SRR - CRFNI*SRI
  179. CRFNI = CRFNR*SRI + CRFNI*SRR
  180. CRFNR = STR
  181. CWRKR(K) = CRFNR*SR - CRFNI*SI
  182. CWRKI(K) = CRFNR*SI + CRFNI*SR
  183. AC = AC*RFN
  184. TEST = ABS(CWRKR(K)) + ABS(CWRKI(K))
  185. IF (AC.LT.TOL .AND. TEST.LT.TOL) GO TO 30
  186. 20 CONTINUE
  187. K = 15
  188. 30 CONTINUE
  189. INIT = K
  190. 40 CONTINUE
  191. IF (IKFLG.EQ.2) GO TO 60
  192. C-----------------------------------------------------------------------
  193. C COMPUTE SUM FOR THE I FUNCTION
  194. C-----------------------------------------------------------------------
  195. SR = ZEROR
  196. SI = ZEROI
  197. DO 50 I=1,INIT
  198. SR = SR + CWRKR(I)
  199. SI = SI + CWRKI(I)
  200. 50 CONTINUE
  201. SUMR = SR
  202. SUMI = SI
  203. PHIR = CWRKR(16)*CON(1)
  204. PHII = CWRKI(16)*CON(1)
  205. RETURN
  206. 60 CONTINUE
  207. C-----------------------------------------------------------------------
  208. C COMPUTE SUM FOR THE K FUNCTION
  209. C-----------------------------------------------------------------------
  210. SR = ZEROR
  211. SI = ZEROI
  212. TR = CONER
  213. DO 70 I=1,INIT
  214. SR = SR + TR*CWRKR(I)
  215. SI = SI + TR*CWRKI(I)
  216. TR = -TR
  217. 70 CONTINUE
  218. SUMR = SR
  219. SUMI = SI
  220. PHIR = CWRKR(16)*CON(2)
  221. PHII = CWRKI(16)*CON(2)
  222. RETURN
  223. END