zunhj.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. /* zunhj.f -- translated by f2c (version 20100827).
  2. This file no longer depends on f2c.
  3. */
  4. #include "slatec-internal.hpp"
  5. /* Table of constant values */
  6. static integer const c__1 = 1;
  7. int zunhj_(double *zr, double *zi, double const *fnu,
  8. integer const *ipmtr, double *tol, double *phir, double *phii,
  9. double *argr, double *argi, double *zeta1r, double *
  10. zeta1i, double *zeta2r, double *zeta2i, double *asumr,
  11. double *asumi, double *bsumr, double *bsumi)
  12. {
  13. /* Initialized data */
  14. static double const ar[14] = { 1.,.104166666666666667,.0835503472222222222,
  15. .12822657455632716,.291849026464140464,.881627267443757652,
  16. 3.32140828186276754,14.9957629868625547,78.9230130115865181,
  17. 474.451538868264323,3207.49009089066193,24086.5496408740049,
  18. 198923.119169509794,1791902.00777534383 };
  19. static double const gpi = 3.14159265358979324;
  20. static double const thpi = 4.71238898038468986;
  21. static double const zeror = 0.;
  22. static double const zeroi = 0.;
  23. static double const coner = 1.;
  24. static double const conei = 0.;
  25. static double const br[14] = { 1.,-.145833333333333333,
  26. -.0987413194444444444,-.143312053915895062,-.317227202678413548,
  27. -.942429147957120249,-3.51120304082635426,-15.7272636203680451,
  28. -82.2814390971859444,-492.355370523670524,-3316.21856854797251,
  29. -24827.6742452085896,-204526.587315129788,-1838444.9170682099 };
  30. static double const c__[105] = { 1.,-.208333333333333333,.125,
  31. .334201388888888889,-.401041666666666667,.0703125,
  32. -1.02581259645061728,1.84646267361111111,-.8912109375,.0732421875,
  33. 4.66958442342624743,-11.2070026162229938,8.78912353515625,
  34. -2.3640869140625,.112152099609375,-28.2120725582002449,
  35. 84.6362176746007346,-91.8182415432400174,42.5349987453884549,
  36. -7.3687943594796317,.227108001708984375,212.570130039217123,
  37. -765.252468141181642,1059.99045252799988,-699.579627376132541,
  38. 218.19051174421159,-26.4914304869515555,.572501420974731445,
  39. -1919.457662318407,8061.72218173730938,-13586.5500064341374,
  40. 11655.3933368645332,-5305.64697861340311,1200.90291321635246,
  41. -108.090919788394656,1.7277275025844574,20204.2913309661486,
  42. -96980.5983886375135,192547.001232531532,-203400.177280415534,
  43. 122200.46498301746,-41192.6549688975513,7109.51430248936372,
  44. -493.915304773088012,6.07404200127348304,-242919.187900551333,
  45. 1311763.6146629772,-2998015.91853810675,3763271.297656404,
  46. -2813563.22658653411,1268365.27332162478,-331645.172484563578,
  47. 45218.7689813627263,-2499.83048181120962,24.3805296995560639,
  48. 3284469.85307203782,-19706819.1184322269,50952602.4926646422,
  49. -74105148.2115326577,66344512.2747290267,-37567176.6607633513,
  50. 13288767.1664218183,-2785618.12808645469,308186.404612662398,
  51. -13886.0897537170405,110.017140269246738,-49329253.664509962,
  52. 325573074.185765749,-939462359.681578403,1553596899.57058006,
  53. -1621080552.10833708,1106842816.82301447,-495889784.275030309,
  54. 142062907.797533095,-24474062.7257387285,2243768.17792244943,
  55. -84005.4336030240853,551.335896122020586,814789096.118312115,
  56. -5866481492.05184723,18688207509.2958249,-34632043388.1587779,
  57. 41280185579.753974,-33026599749.8007231,17954213731.1556001,
  58. -6563293792.61928433,1559279864.87925751,-225105661.889415278,
  59. 17395107.5539781645,-549842.327572288687,3038.09051092238427,
  60. -14679261247.6956167,114498237732.02581,-399096175224.466498,
  61. 819218669548.577329,-1098375156081.22331,1008158106865.38209,
  62. -645364869245.376503,287900649906.150589,-87867072178.0232657,
  63. 17634730606.8349694,-2167164983.22379509,143157876.718888981,
  64. -3871833.44257261262,18257.7554742931747 };
  65. static double const alfa[180] = { -.00444444444444444444,
  66. -9.22077922077922078e-4,-8.84892884892884893e-5,
  67. 1.65927687832449737e-4,2.4669137274179291e-4,
  68. 2.6599558934625478e-4,2.61824297061500945e-4,
  69. 2.48730437344655609e-4,2.32721040083232098e-4,
  70. 2.16362485712365082e-4,2.00738858762752355e-4,
  71. 1.86267636637545172e-4,1.73060775917876493e-4,
  72. 1.61091705929015752e-4,1.50274774160908134e-4,
  73. 1.40503497391269794e-4,1.31668816545922806e-4,
  74. 1.23667445598253261e-4,1.16405271474737902e-4,
  75. 1.09798298372713369e-4,1.03772410422992823e-4,
  76. 9.82626078369363448e-5,9.32120517249503256e-5,
  77. 8.85710852478711718e-5,8.42963105715700223e-5,
  78. 8.03497548407791151e-5,7.66981345359207388e-5,
  79. 7.33122157481777809e-5,7.01662625163141333e-5,
  80. 6.72375633790160292e-5,6.93735541354588974e-4,
  81. 2.32241745182921654e-4,-1.41986273556691197e-5,
  82. -1.1644493167204864e-4,-1.50803558053048762e-4,
  83. -1.55121924918096223e-4,-1.46809756646465549e-4,
  84. -1.33815503867491367e-4,-1.19744975684254051e-4,
  85. -1.0618431920797402e-4,-9.37699549891194492e-5,
  86. -8.26923045588193274e-5,-7.29374348155221211e-5,
  87. -6.44042357721016283e-5,-5.69611566009369048e-5,
  88. -5.04731044303561628e-5,-4.48134868008882786e-5,
  89. -3.98688727717598864e-5,-3.55400532972042498e-5,
  90. -3.1741425660902248e-5,-2.83996793904174811e-5,
  91. -2.54522720634870566e-5,-2.28459297164724555e-5,
  92. -2.05352753106480604e-5,-1.84816217627666085e-5,
  93. -1.66519330021393806e-5,-1.50179412980119482e-5,
  94. -1.35554031379040526e-5,-1.22434746473858131e-5,
  95. -1.10641884811308169e-5,-3.54211971457743841e-4,
  96. -1.56161263945159416e-4,3.0446550359493641e-5,
  97. 1.30198655773242693e-4,1.67471106699712269e-4,
  98. 1.70222587683592569e-4,1.56501427608594704e-4,
  99. 1.3633917097744512e-4,1.14886692029825128e-4,
  100. 9.45869093034688111e-5,7.64498419250898258e-5,
  101. 6.07570334965197354e-5,4.74394299290508799e-5,
  102. 3.62757512005344297e-5,2.69939714979224901e-5,
  103. 1.93210938247939253e-5,1.30056674793963203e-5,
  104. 7.82620866744496661e-6,3.59257485819351583e-6,
  105. 1.44040049814251817e-7,-2.65396769697939116e-6,
  106. -4.9134686709848591e-6,-6.72739296091248287e-6,
  107. -8.17269379678657923e-6,-9.31304715093561232e-6,
  108. -1.02011418798016441e-5,-1.0880596251059288e-5,
  109. -1.13875481509603555e-5,-1.17519675674556414e-5,
  110. -1.19987364870944141e-5,3.78194199201772914e-4,
  111. 2.02471952761816167e-4,-6.37938506318862408e-5,
  112. -2.38598230603005903e-4,-3.10916256027361568e-4,
  113. -3.13680115247576316e-4,-2.78950273791323387e-4,
  114. -2.28564082619141374e-4,-1.75245280340846749e-4,
  115. -1.25544063060690348e-4,-8.22982872820208365e-5,
  116. -4.62860730588116458e-5,-1.72334302366962267e-5,
  117. 5.60690482304602267e-6,2.313954431482868e-5,
  118. 3.62642745856793957e-5,4.58006124490188752e-5,
  119. 5.2459529495911405e-5,5.68396208545815266e-5,
  120. 5.94349820393104052e-5,6.06478527578421742e-5,
  121. 6.08023907788436497e-5,6.01577894539460388e-5,
  122. 5.891996573446985e-5,5.72515823777593053e-5,
  123. 5.52804375585852577e-5,5.3106377380288017e-5,
  124. 5.08069302012325706e-5,4.84418647620094842e-5,
  125. 4.6056858160747537e-5,-6.91141397288294174e-4,
  126. -4.29976633058871912e-4,1.83067735980039018e-4,
  127. 6.60088147542014144e-4,8.75964969951185931e-4,
  128. 8.77335235958235514e-4,7.49369585378990637e-4,
  129. 5.63832329756980918e-4,3.68059319971443156e-4,
  130. 1.88464535514455599e-4,3.70663057664904149e-5,
  131. -8.28520220232137023e-5,-1.72751952869172998e-4,
  132. -2.36314873605872983e-4,-2.77966150694906658e-4,
  133. -3.02079514155456919e-4,-3.12594712643820127e-4,
  134. -3.12872558758067163e-4,-3.05678038466324377e-4,
  135. -2.93226470614557331e-4,-2.77255655582934777e-4,
  136. -2.59103928467031709e-4,-2.39784014396480342e-4,
  137. -2.20048260045422848e-4,-2.00443911094971498e-4,
  138. -1.81358692210970687e-4,-1.63057674478657464e-4,
  139. -1.45712672175205844e-4,-1.29425421983924587e-4,
  140. -1.14245691942445952e-4,.00192821964248775885,
  141. .00135592576302022234,-7.17858090421302995e-4,
  142. -.00258084802575270346,-.00349271130826168475,
  143. -.00346986299340960628,-.00282285233351310182,
  144. -.00188103076404891354,-8.895317183839476e-4,
  145. 3.87912102631035228e-6,7.28688540119691412e-4,
  146. .00126566373053457758,.00162518158372674427,.00183203153216373172,
  147. .00191588388990527909,.00190588846755546138,.00182798982421825727,
  148. .0017038950642112153,.00155097127171097686,.00138261421852276159,
  149. .00120881424230064774,.00103676532638344962,
  150. 8.71437918068619115e-4,7.16080155297701002e-4,
  151. 5.72637002558129372e-4,4.42089819465802277e-4,
  152. 3.24724948503090564e-4,2.20342042730246599e-4,
  153. 1.28412898401353882e-4,4.82005924552095464e-5 };
  154. static double const beta[210] = { .0179988721413553309,
  155. .00559964911064388073,.00288501402231132779,.00180096606761053941,
  156. .00124753110589199202,9.22878876572938311e-4,
  157. 7.14430421727287357e-4,5.71787281789704872e-4,
  158. 4.69431007606481533e-4,3.93232835462916638e-4,
  159. 3.34818889318297664e-4,2.88952148495751517e-4,
  160. 2.52211615549573284e-4,2.22280580798883327e-4,
  161. 1.97541838033062524e-4,1.76836855019718004e-4,
  162. 1.59316899661821081e-4,1.44347930197333986e-4,
  163. 1.31448068119965379e-4,1.20245444949302884e-4,
  164. 1.10449144504599392e-4,1.01828770740567258e-4,
  165. 9.41998224204237509e-5,8.74130545753834437e-5,
  166. 8.13466262162801467e-5,7.59002269646219339e-5,
  167. 7.09906300634153481e-5,6.65482874842468183e-5,
  168. 6.25146958969275078e-5,5.88403394426251749e-5,
  169. -.00149282953213429172,-8.78204709546389328e-4,
  170. -5.02916549572034614e-4,-2.94822138512746025e-4,
  171. -1.75463996970782828e-4,-1.04008550460816434e-4,
  172. -5.96141953046457895e-5,-3.1203892907609834e-5,
  173. -1.26089735980230047e-5,-2.42892608575730389e-7,
  174. 8.05996165414273571e-6,1.36507009262147391e-5,
  175. 1.73964125472926261e-5,1.9867297884213378e-5,
  176. 2.14463263790822639e-5,2.23954659232456514e-5,
  177. 2.28967783814712629e-5,2.30785389811177817e-5,
  178. 2.30321976080909144e-5,2.28236073720348722e-5,
  179. 2.25005881105292418e-5,2.20981015361991429e-5,
  180. 2.16418427448103905e-5,2.11507649256220843e-5,
  181. 2.06388749782170737e-5,2.01165241997081666e-5,
  182. 1.95913450141179244e-5,1.9068936791043674e-5,
  183. 1.85533719641636667e-5,1.80475722259674218e-5,
  184. 5.5221307672129279e-4,4.47932581552384646e-4,
  185. 2.79520653992020589e-4,1.52468156198446602e-4,
  186. 6.93271105657043598e-5,1.76258683069991397e-5,
  187. -1.35744996343269136e-5,-3.17972413350427135e-5,
  188. -4.18861861696693365e-5,-4.69004889379141029e-5,
  189. -4.87665447413787352e-5,-4.87010031186735069e-5,
  190. -4.74755620890086638e-5,-4.55813058138628452e-5,
  191. -4.33309644511266036e-5,-4.09230193157750364e-5,
  192. -3.84822638603221274e-5,-3.60857167535410501e-5,
  193. -3.37793306123367417e-5,-3.15888560772109621e-5,
  194. -2.95269561750807315e-5,-2.75978914828335759e-5,
  195. -2.58006174666883713e-5,-2.413083567612802e-5,
  196. -2.25823509518346033e-5,-2.11479656768912971e-5,
  197. -1.98200638885294927e-5,-1.85909870801065077e-5,
  198. -1.74532699844210224e-5,-1.63997823854497997e-5,
  199. -4.74617796559959808e-4,-4.77864567147321487e-4,
  200. -3.20390228067037603e-4,-1.61105016119962282e-4,
  201. -4.25778101285435204e-5,3.44571294294967503e-5,
  202. 7.97092684075674924e-5,1.031382367082722e-4,
  203. 1.12466775262204158e-4,1.13103642108481389e-4,
  204. 1.08651634848774268e-4,1.01437951597661973e-4,
  205. 9.29298396593363896e-5,8.40293133016089978e-5,
  206. 7.52727991349134062e-5,6.69632521975730872e-5,
  207. 5.92564547323194704e-5,5.22169308826975567e-5,
  208. 4.58539485165360646e-5,4.01445513891486808e-5,
  209. 3.50481730031328081e-5,3.05157995034346659e-5,
  210. 2.64956119950516039e-5,2.29363633690998152e-5,
  211. 1.97893056664021636e-5,1.70091984636412623e-5,
  212. 1.45547428261524004e-5,1.23886640995878413e-5,
  213. 1.04775876076583236e-5,8.79179954978479373e-6,
  214. 7.36465810572578444e-4,8.72790805146193976e-4,
  215. 6.22614862573135066e-4,2.85998154194304147e-4,
  216. 3.84737672879366102e-6,-1.87906003636971558e-4,
  217. -2.97603646594554535e-4,-3.45998126832656348e-4,
  218. -3.53382470916037712e-4,-3.35715635775048757e-4,
  219. -3.04321124789039809e-4,-2.66722723047612821e-4,
  220. -2.27654214122819527e-4,-1.89922611854562356e-4,
  221. -1.5505891859909387e-4,-1.2377824076187363e-4,
  222. -9.62926147717644187e-5,-7.25178327714425337e-5,
  223. -5.22070028895633801e-5,-3.50347750511900522e-5,
  224. -2.06489761035551757e-5,-8.70106096849767054e-6,
  225. 1.1369868667510029e-6,9.16426474122778849e-6,
  226. 1.5647778542887262e-5,2.08223629482466847e-5,
  227. 2.48923381004595156e-5,2.80340509574146325e-5,
  228. 3.03987774629861915e-5,3.21156731406700616e-5,
  229. -.00180182191963885708,-.00243402962938042533,
  230. -.00183422663549856802,-7.62204596354009765e-4,
  231. 2.39079475256927218e-4,9.49266117176881141e-4,
  232. .00134467449701540359,.00148457495259449178,.00144732339830617591,
  233. .00130268261285657186,.00110351597375642682,
  234. 8.86047440419791759e-4,6.73073208165665473e-4,
  235. 4.77603872856582378e-4,3.05991926358789362e-4,
  236. 1.6031569459472163e-4,4.00749555270613286e-5,
  237. -5.66607461635251611e-5,-1.32506186772982638e-4,
  238. -1.90296187989614057e-4,-2.32811450376937408e-4,
  239. -2.62628811464668841e-4,-2.82050469867598672e-4,
  240. -2.93081563192861167e-4,-2.97435962176316616e-4,
  241. -2.96557334239348078e-4,-2.91647363312090861e-4,
  242. -2.83696203837734166e-4,-2.73512317095673346e-4,
  243. -2.6175015580676858e-4,.00638585891212050914,
  244. .00962374215806377941,.00761878061207001043,.00283219055545628054,
  245. -.0020984135201272009,-.00573826764216626498,
  246. -.0077080424449541462,-.00821011692264844401,
  247. -.00765824520346905413,-.00647209729391045177,
  248. -.00499132412004966473,-.0034561228971313328,
  249. -.00201785580014170775,-7.59430686781961401e-4,
  250. 2.84173631523859138e-4,.00110891667586337403,
  251. .00172901493872728771,.00216812590802684701,.00245357710494539735,
  252. .00261281821058334862,.00267141039656276912,.0026520307339598043,
  253. .00257411652877287315,.00245389126236094427,.00230460058071795494,
  254. .00213684837686712662,.00195896528478870911,.00177737008679454412,
  255. .00159690280765839059,.00142111975664438546 };
  256. static double const gama[30] = { .629960524947436582,.251984209978974633,
  257. .154790300415655846,.110713062416159013,.0857309395527394825,
  258. .0697161316958684292,.0586085671893713576,.0504698873536310685,
  259. .0442600580689154809,.0393720661543509966,.0354283195924455368,
  260. .0321818857502098231,.0294646240791157679,.0271581677112934479,
  261. .0251768272973861779,.0234570755306078891,.0219508390134907203,
  262. .020621082823564624,.0194388240897880846,.0183810633800683158,
  263. .0174293213231963172,.0165685837786612353,.0157865285987918445,
  264. .0150729501494095594,.0144193250839954639,.0138184805735341786,
  265. .0132643378994276568,.0127517121970498651,.0122761545318762767,
  266. .0118338262398482403 };
  267. static double const ex1 = .333333333333333333;
  268. static double const ex2 = .666666666666666667;
  269. static double const hpi = 1.57079632679489662;
  270. /* System generated locals */
  271. integer i__1, i__2;
  272. double d__1;
  273. /* Local variables */
  274. integer j, k, l, m, l1, l2;
  275. double ac, ap[30], pi[30];
  276. integer is, jr, ks, ju;
  277. double pp, wi, pr[30];
  278. integer lr;
  279. double wr, aw2;
  280. integer kp1;
  281. double t2i, w2i, t2r, w2r, ang, fn13, fn23;
  282. integer ias;
  283. double cri[14], dri[14];
  284. integer ibs;
  285. double zai, zbi, zci, crr[14], drr[14], raw, zar, upi[14], sti, zbr,
  286. zcr, upr[14], str, raw2;
  287. integer lrp1;
  288. double rfn13;
  289. integer idum;
  290. double atol, btol, tfni;
  291. integer kmax;
  292. double azth, tzai, tfnr, rfnu;
  293. double zthi, test, tzar, zthr, rfnu2, zetai, ptfni, sumai, sumbi,
  294. zetar, ptfnr, razth, sumar, sumbr, rzthi;
  295. double rzthr, rtzti;
  296. double rtztr, przthi, przthr;
  297. /* ***BEGIN PROLOGUE ZUNHJ */
  298. /* ***SUBSIDIARY */
  299. /* ***PURPOSE Subsidiary to ZBESI and ZBESK */
  300. /* ***LIBRARY SLATEC */
  301. /* ***TYPE ALL (CUNHJ-A, ZUNHJ-A) */
  302. /* ***AUTHOR Amos, D. E., (SNL) */
  303. /* ***DESCRIPTION */
  304. /* REFERENCES */
  305. /* HANDBOOK OF MATHEMATICAL FUNCTIONS BY M. ABRAMOWITZ AND I.A. */
  306. /* STEGUN, AMS55, NATIONAL BUREAU OF STANDARDS, 1965, CHAPTER 9. */
  307. /* ASYMPTOTICS AND SPECIAL FUNCTIONS BY F.W.J. OLVER, ACADEMIC */
  308. /* PRESS, N.Y., 1974, PAGE 420 */
  309. /* ABSTRACT */
  310. /* ZUNHJ COMPUTES PARAMETERS FOR BESSEL FUNCTIONS C(FNU,Z) = */
  311. /* J(FNU,Z), Y(FNU,Z) OR H(I,FNU,Z) I=1,2 FOR LARGE ORDERS FNU */
  312. /* BY MEANS OF THE UNIFORM ASYMPTOTIC EXPANSION */
  313. /* C(FNU,Z)=C1*PHI*( ASUM*AIRY(ARG) + C2*BSUM*DAIRY(ARG) ) */
  314. /* FOR PROPER CHOICES OF C1, C2, AIRY AND DAIRY WHERE AIRY IS */
  315. /* AN AIRY FUNCTION AND DAIRY IS ITS DERIVATIVE. */
  316. /* (2/3)*FNU*ZETA**1.5 = ZETA1-ZETA2, */
  317. /* ZETA1=0.5*FNU*CLOG((1+W)/(1-W)), ZETA2=FNU*W FOR SCALING */
  318. /* PURPOSES IN AIRY FUNCTIONS FROM CAIRY OR CBIRY. */
  319. /* MCONJ=SIGN OF AIMAG(Z), BUT IS AMBIGUOUS WHEN Z IS REAL AND */
  320. /* MUST BE SPECIFIED. IPMTR=0 RETURNS ALL PARAMETERS. IPMTR= */
  321. /* 1 COMPUTES ALL EXCEPT ASUM AND BSUM. */
  322. /* ***SEE ALSO ZBESI, ZBESK */
  323. /* ***ROUTINES CALLED D1MACH, ZABS, ZDIV, ZLOG, ZSQRT */
  324. /* ***REVISION HISTORY (YYMMDD) */
  325. /* 830501 DATE WRITTEN */
  326. /* 910415 Prologue converted to Version 4.0 format. (BAB) */
  327. /* 930122 Added ZLOG and ZSQRT to EXTERNAL statement. (RWC) */
  328. /* ***END PROLOGUE ZUNHJ */
  329. /* COMPLEX ARG,ASUM,BSUM,CFNU,CONE,CR,CZERO,DR,P,PHI,PRZTH,PTFN, */
  330. /* *RFN13,RTZTA,RZTH,SUMA,SUMB,TFN,T2,UP,W,W2,Z,ZA,ZB,ZC,ZETA,ZETA1, */
  331. /* *ZETA2,ZTH */
  332. /* ***FIRST EXECUTABLE STATEMENT ZUNHJ */
  333. rfnu = 1. / *fnu;
  334. /* ----------------------------------------------------------------------- */
  335. /* OVERFLOW TEST (Z/FNU TOO SMALL) */
  336. /* ----------------------------------------------------------------------- */
  337. test = d1mach_(1) * 1e3;
  338. ac = *fnu * test;
  339. if (abs(*zr) > ac || abs(*zi) > ac) {
  340. goto L15;
  341. }
  342. *zeta1r = (d__1 = log(test), abs(d__1)) * 2. + *fnu;
  343. *zeta1i = 0.;
  344. *zeta2r = *fnu;
  345. *zeta2i = 0.;
  346. *phir = 1.;
  347. *phii = 0.;
  348. *argr = 1.;
  349. *argi = 0.;
  350. return 0;
  351. L15:
  352. zbr = *zr * rfnu;
  353. zbi = *zi * rfnu;
  354. rfnu2 = rfnu * rfnu;
  355. /* ----------------------------------------------------------------------- */
  356. /* COMPUTE IN THE FOURTH QUADRANT */
  357. /* ----------------------------------------------------------------------- */
  358. fn13 = f2c::pow_dd(fnu, &ex1);
  359. fn23 = fn13 * fn13;
  360. rfn13 = 1. / fn13;
  361. w2r = coner - zbr * zbr + zbi * zbi;
  362. w2i = conei - zbr * zbi - zbr * zbi;
  363. aw2 = zabs_(&w2r, &w2i);
  364. if (aw2 > .25) {
  365. goto L130;
  366. }
  367. /* ----------------------------------------------------------------------- */
  368. /* POWER SERIES FOR ABS(W2).LE.0.25D0 */
  369. /* ----------------------------------------------------------------------- */
  370. k = 1;
  371. pr[0] = coner;
  372. pi[0] = conei;
  373. sumar = gama[0];
  374. sumai = zeroi;
  375. ap[0] = 1.;
  376. if (aw2 < *tol) {
  377. goto L20;
  378. }
  379. for (k = 2; k <= 30; ++k) {
  380. pr[k - 1] = pr[k - 2] * w2r - pi[k - 2] * w2i;
  381. pi[k - 1] = pr[k - 2] * w2i + pi[k - 2] * w2r;
  382. sumar += pr[k - 1] * gama[k - 1];
  383. sumai += pi[k - 1] * gama[k - 1];
  384. ap[k - 1] = ap[k - 2] * aw2;
  385. if (ap[k - 1] < *tol) {
  386. goto L20;
  387. }
  388. /* L10: */
  389. }
  390. k = 30;
  391. L20:
  392. kmax = k;
  393. zetar = w2r * sumar - w2i * sumai;
  394. zetai = w2r * sumai + w2i * sumar;
  395. *argr = zetar * fn23;
  396. *argi = zetai * fn23;
  397. zsqrt_(&sumar, &sumai, &zar, &zai);
  398. zsqrt_(&w2r, &w2i, &str, &sti);
  399. *zeta2r = str * *fnu;
  400. *zeta2i = sti * *fnu;
  401. str = coner + ex2 * (zetar * zar - zetai * zai);
  402. sti = conei + ex2 * (zetar * zai + zetai * zar);
  403. *zeta1r = str * *zeta2r - sti * *zeta2i;
  404. *zeta1i = str * *zeta2i + sti * *zeta2r;
  405. zar += zar;
  406. zai += zai;
  407. zsqrt_(&zar, &zai, &str, &sti);
  408. *phir = str * rfn13;
  409. *phii = sti * rfn13;
  410. if (*ipmtr == 1) {
  411. goto L120;
  412. }
  413. /* ----------------------------------------------------------------------- */
  414. /* SUM SERIES FOR ASUM AND BSUM */
  415. /* ----------------------------------------------------------------------- */
  416. sumbr = zeror;
  417. sumbi = zeroi;
  418. i__1 = kmax;
  419. for (k = 1; k <= i__1; ++k) {
  420. sumbr += pr[k - 1] * beta[k - 1];
  421. sumbi += pi[k - 1] * beta[k - 1];
  422. /* L30: */
  423. }
  424. *asumr = zeror;
  425. *asumi = zeroi;
  426. *bsumr = sumbr;
  427. *bsumi = sumbi;
  428. l1 = 0;
  429. l2 = 30;
  430. btol = *tol * (abs(*bsumr) + abs(*bsumi));
  431. atol = *tol;
  432. pp = 1.;
  433. ias = 0;
  434. ibs = 0;
  435. if (rfnu2 < *tol) {
  436. goto L110;
  437. }
  438. for (is = 2; is <= 7; ++is) {
  439. atol /= rfnu2;
  440. pp *= rfnu2;
  441. if (ias == 1) {
  442. goto L60;
  443. }
  444. sumar = zeror;
  445. sumai = zeroi;
  446. i__1 = kmax;
  447. for (k = 1; k <= i__1; ++k) {
  448. m = l1 + k;
  449. sumar += pr[k - 1] * alfa[m - 1];
  450. sumai += pi[k - 1] * alfa[m - 1];
  451. if (ap[k - 1] < atol) {
  452. goto L50;
  453. }
  454. /* L40: */
  455. }
  456. L50:
  457. *asumr += sumar * pp;
  458. *asumi += sumai * pp;
  459. if (pp < *tol) {
  460. ias = 1;
  461. }
  462. L60:
  463. if (ibs == 1) {
  464. goto L90;
  465. }
  466. sumbr = zeror;
  467. sumbi = zeroi;
  468. i__1 = kmax;
  469. for (k = 1; k <= i__1; ++k) {
  470. m = l2 + k;
  471. sumbr += pr[k - 1] * beta[m - 1];
  472. sumbi += pi[k - 1] * beta[m - 1];
  473. if (ap[k - 1] < atol) {
  474. goto L80;
  475. }
  476. /* L70: */
  477. }
  478. L80:
  479. *bsumr += sumbr * pp;
  480. *bsumi += sumbi * pp;
  481. if (pp < btol) {
  482. ibs = 1;
  483. }
  484. L90:
  485. if (ias == 1 && ibs == 1) {
  486. goto L110;
  487. }
  488. l1 += 30;
  489. l2 += 30;
  490. /* L100: */
  491. }
  492. L110:
  493. *asumr += coner;
  494. pp = rfnu * rfn13;
  495. *bsumr *= pp;
  496. *bsumi *= pp;
  497. L120:
  498. return 0;
  499. /* ----------------------------------------------------------------------- */
  500. /* ABS(W2).GT.0.25D0 */
  501. /* ----------------------------------------------------------------------- */
  502. L130:
  503. zsqrt_(&w2r, &w2i, &wr, &wi);
  504. if (wr < 0.) {
  505. wr = 0.;
  506. }
  507. if (wi < 0.) {
  508. wi = 0.;
  509. }
  510. str = coner + wr;
  511. sti = wi;
  512. zdiv_(&str, &sti, &zbr, &zbi, &zar, &zai);
  513. zlog_(&zar, &zai, &zcr, &zci, &idum);
  514. if (zci < 0.) {
  515. zci = 0.;
  516. }
  517. if (zci > hpi) {
  518. zci = hpi;
  519. }
  520. if (zcr < 0.) {
  521. zcr = 0.;
  522. }
  523. zthr = (zcr - wr) * 1.5;
  524. zthi = (zci - wi) * 1.5;
  525. *zeta1r = zcr * *fnu;
  526. *zeta1i = zci * *fnu;
  527. *zeta2r = wr * *fnu;
  528. *zeta2i = wi * *fnu;
  529. azth = zabs_(&zthr, &zthi);
  530. ang = thpi;
  531. if (zthr >= 0. && zthi < 0.) {
  532. goto L140;
  533. }
  534. ang = hpi;
  535. if (zthr == 0.) {
  536. goto L140;
  537. }
  538. ang = atan(zthi / zthr);
  539. if (zthr < 0.) {
  540. ang += gpi;
  541. }
  542. L140:
  543. pp = f2c::pow_dd(&azth, &ex2);
  544. ang *= ex2;
  545. zetar = pp * cos(ang);
  546. zetai = pp * sin(ang);
  547. if (zetai < 0.) {
  548. zetai = 0.;
  549. }
  550. *argr = zetar * fn23;
  551. *argi = zetai * fn23;
  552. zdiv_(&zthr, &zthi, &zetar, &zetai, &rtztr, &rtzti);
  553. zdiv_(&rtztr, &rtzti, &wr, &wi, &zar, &zai);
  554. tzar = zar + zar;
  555. tzai = zai + zai;
  556. zsqrt_(&tzar, &tzai, &str, &sti);
  557. *phir = str * rfn13;
  558. *phii = sti * rfn13;
  559. if (*ipmtr == 1) {
  560. goto L120;
  561. }
  562. raw = 1. / sqrt(aw2);
  563. str = wr * raw;
  564. sti = -wi * raw;
  565. tfnr = str * rfnu * raw;
  566. tfni = sti * rfnu * raw;
  567. razth = 1. / azth;
  568. str = zthr * razth;
  569. sti = -zthi * razth;
  570. rzthr = str * razth * rfnu;
  571. rzthi = sti * razth * rfnu;
  572. zcr = rzthr * ar[1];
  573. zci = rzthi * ar[1];
  574. raw2 = 1. / aw2;
  575. str = w2r * raw2;
  576. sti = -w2i * raw2;
  577. t2r = str * raw2;
  578. t2i = sti * raw2;
  579. str = t2r * c__[1] + c__[2];
  580. sti = t2i * c__[1];
  581. upr[1] = str * tfnr - sti * tfni;
  582. upi[1] = str * tfni + sti * tfnr;
  583. *bsumr = upr[1] + zcr;
  584. *bsumi = upi[1] + zci;
  585. *asumr = zeror;
  586. *asumi = zeroi;
  587. if (rfnu < *tol) {
  588. goto L220;
  589. }
  590. przthr = rzthr;
  591. przthi = rzthi;
  592. ptfnr = tfnr;
  593. ptfni = tfni;
  594. upr[0] = coner;
  595. upi[0] = conei;
  596. pp = 1.;
  597. btol = *tol * (abs(*bsumr) + abs(*bsumi));
  598. ks = 0;
  599. kp1 = 2;
  600. l = 3;
  601. ias = 0;
  602. ibs = 0;
  603. for (lr = 2; lr <= 12; lr += 2) {
  604. lrp1 = lr + 1;
  605. /* ----------------------------------------------------------------------- */
  606. /* COMPUTE TWO ADDITIONAL CR, DR, AND UP FOR TWO MORE TERMS IN */
  607. /* NEXT SUMA AND SUMB */
  608. /* ----------------------------------------------------------------------- */
  609. i__1 = lrp1;
  610. for (k = lr; k <= i__1; ++k) {
  611. ++ks;
  612. ++kp1;
  613. ++l;
  614. zar = c__[l - 1];
  615. zai = zeroi;
  616. i__2 = kp1;
  617. for (j = 2; j <= i__2; ++j) {
  618. ++l;
  619. str = zar * t2r - t2i * zai + c__[l - 1];
  620. zai = zar * t2i + zai * t2r;
  621. zar = str;
  622. /* L150: */
  623. }
  624. str = ptfnr * tfnr - ptfni * tfni;
  625. ptfni = ptfnr * tfni + ptfni * tfnr;
  626. ptfnr = str;
  627. upr[kp1 - 1] = ptfnr * zar - ptfni * zai;
  628. upi[kp1 - 1] = ptfni * zar + ptfnr * zai;
  629. crr[ks - 1] = przthr * br[ks];
  630. cri[ks - 1] = przthi * br[ks];
  631. str = przthr * rzthr - przthi * rzthi;
  632. przthi = przthr * rzthi + przthi * rzthr;
  633. przthr = str;
  634. drr[ks - 1] = przthr * ar[ks + 1];
  635. dri[ks - 1] = przthi * ar[ks + 1];
  636. /* L160: */
  637. }
  638. pp *= rfnu2;
  639. if (ias == 1) {
  640. goto L180;
  641. }
  642. sumar = upr[lrp1 - 1];
  643. sumai = upi[lrp1 - 1];
  644. ju = lrp1;
  645. i__1 = lr;
  646. for (jr = 1; jr <= i__1; ++jr) {
  647. --ju;
  648. sumar = sumar + crr[jr - 1] * upr[ju - 1] - cri[jr - 1] * upi[ju
  649. - 1];
  650. sumai = sumai + crr[jr - 1] * upi[ju - 1] + cri[jr - 1] * upr[ju
  651. - 1];
  652. /* L170: */
  653. }
  654. *asumr += sumar;
  655. *asumi += sumai;
  656. test = abs(sumar) + abs(sumai);
  657. if (pp < *tol && test < *tol) {
  658. ias = 1;
  659. }
  660. L180:
  661. if (ibs == 1) {
  662. goto L200;
  663. }
  664. sumbr = upr[lr + 1] + upr[lrp1 - 1] * zcr - upi[lrp1 - 1] * zci;
  665. sumbi = upi[lr + 1] + upr[lrp1 - 1] * zci + upi[lrp1 - 1] * zcr;
  666. ju = lrp1;
  667. i__1 = lr;
  668. for (jr = 1; jr <= i__1; ++jr) {
  669. --ju;
  670. sumbr = sumbr + drr[jr - 1] * upr[ju - 1] - dri[jr - 1] * upi[ju
  671. - 1];
  672. sumbi = sumbi + drr[jr - 1] * upi[ju - 1] + dri[jr - 1] * upr[ju
  673. - 1];
  674. /* L190: */
  675. }
  676. *bsumr += sumbr;
  677. *bsumi += sumbi;
  678. test = abs(sumbr) + abs(sumbi);
  679. if (pp < btol && test < btol) {
  680. ibs = 1;
  681. }
  682. L200:
  683. if (ias == 1 && ibs == 1) {
  684. goto L220;
  685. }
  686. /* L210: */
  687. }
  688. L220:
  689. *asumr += coner;
  690. str = -(*bsumr) * rfn13;
  691. sti = -(*bsumi) * rfn13;
  692. zdiv_(&str, &sti, &rtztr, &rtzti, bsumr, bsumi);
  693. goto L120;
  694. } /* zunhj_ */