12INTEGER,
PARAMETER,
PUBLIC :: dp = kind(1.0d0)
15PUBLIC :: cbesh, cbesi, cbesj, cbesk, cbesy, cairy, cbiry, gamln
21SUBROUTINE cbesh(z, fnu, kode, m, n, cy, nz, ierr)
165COMPLEX (dp),
INTENT(IN) :: z
166real(dp),
INTENT(IN) :: fnu
167INTEGER,
INTENT(IN) :: kode
168INTEGER,
INTENT(IN) :: m
169INTEGER,
INTENT(IN) :: n
170COMPLEX (dp),
INTENT(OUT) :: cy(n)
171INTEGER,
INTENT(OUT) :: nz
172INTEGER,
INTENT(OUT) :: ierr
174COMPLEX (dp) :: zn, zt, csgn
175real(dp) :: aa, alim, aln, arg, az, cpn, dig, elim, fmm, fn, fnul, &
176 rhpi, rl, r1m5, sgn, spn, tol, ufl, xn, xx, yn, yy, &
177 bb, ascle, rtol, atol
178INTEGER :: i, inu, inuh, ir, k, k1, k2, mm, mr, nn, nuf, nw
180real(dp),
PARAMETER :: hpi = 1.57079632679489662_dp
187IF (xx == 0.0_dp .AND. yy == 0.0_dp) ierr = 1
188IF (fnu < 0.0_dp) ierr = 1
189IF (m < 1 .OR. m > 2) ierr = 1
190IF (kode < 1 .OR. kode > 2) ierr = 1
205tol = max(epsilon(0.0_dp), 1.0d-18)
206k1 = minexponent(0.0_dp)
207k2 = maxexponent(0.0_dp)
208r1m5 = log10( real( radix(0.0_dp), kind=dp) )
209k = min(abs(k1), abs(k2))
210elim = 2.303_dp * (k*r1m5 - 3.0_dp)
211k1 = digits(0.0_dp) - 1
213dig = min(aa, 18.0_dp)
215alim = elim + max(-aa, -41.45_dp)
216fnul = 10.0_dp + 6.0_dp * (dig - 3.0_dp)
217rl = 1.2_dp * dig + 3.0_dp
221zn = z * cmplx(0.0_dp, -fmm, kind=dp)
222xn = real(zn, kind=dp)
234 IF (az > aa) ierr = 3
235 IF (fn > aa) ierr = 3
239 ufl = tiny(0.0_dp) * 1.0d+3
241 IF (fnu <= fnul)
THEN
242 IF (fn > 1.0_dp)
THEN
243 IF (fn <= 2.0_dp)
THEN
244 IF (az > tol)
GO TO 10
247 IF (aln > elim)
GO TO 50
249 CALL cuoik(zn, fnu, kode, 2, nn, cy, nuf, tol, elim, alim)
250 IF (nuf < 0)
GO TO 50
257 IF (nn == 0)
GO TO 40
261 10
IF (.NOT.(xn < 0.0_dp .OR. (xn == 0.0_dp .AND. yn < 0.0_dp &
267 CALL cbknu(zn, fnu, kode, nn, cy, nz, tol, elim, alim)
274 CALL cacon(zn, fnu, kode, mr, nn, cy, nw, rl, fnul, tol, elim, alim)
282 IF (.NOT.(xn >= 0.0_dp .AND. (xn /= 0.0_dp .OR. yn >= 0.0_dp &
285 IF (xn == 0.0_dp .AND. yn < 0.0_dp) zn = -zn
287 CALL cbunk(zn, fnu, kode, mr, nn, cy, nw, tol, elim, alim)
296 20 sgn = sign(hpi,-fmm)
304 arg = (fnu - (inu-ir)) * sgn
306 cpn = rhpi * cos(arg)
307 spn = rhpi * sin(arg)
309 csgn = cmplx(-spn, cpn, kind=dp)
311 IF (mod(inuh,2) == 1) csgn = -csgn
312 zt = cmplx(0.0_dp, -fmm, kind=dp)
319 aa = real(zn, kind=dp)
322 IF (max(abs(aa),abs(bb)) <= ascle)
THEN
332 40
IF (xn >= 0.0_dp)
RETURN
339 60
IF (nw == -1)
GO TO 50
352SUBROUTINE cbesi(z, fnu, kode, n, cy, nz, ierr)
495COMPLEX (dp),
INTENT(IN) :: z
496real(dp),
INTENT(IN) :: fnu
497INTEGER,
INTENT(IN) :: kode
498INTEGER,
INTENT(IN) :: n
499COMPLEX (dp),
INTENT(OUT) :: cy(n)
500INTEGER,
INTENT(OUT) :: nz
501INTEGER,
INTENT(OUT) :: ierr
503COMPLEX (dp) :: csgn, zn
504real(dp) :: aa, alim, arg, dig, elim, fnul, rl, r1m5, s1, s2, &
505 tol, xx, yy, az, fn, bb, ascle, rtol, atol
506INTEGER :: i, inu, k, k1, k2, nn
508real(dp),
PARAMETER :: pi = 3.14159265358979324_dp
509COMPLEX (dp),
PARAMETER :: cone = (1.0_dp, 0.0_dp)
514IF (fnu < 0.0_dp) ierr = 1
515IF (kode < 1 .OR. kode > 2) ierr = 1
531tol = max(epsilon(0.0_dp), 1.0d-18)
532k1 = minexponent(0.0_dp)
533k2 = maxexponent(0.0_dp)
534r1m5 = log10( real( radix(0.0_dp), kind=dp) )
535k = min(abs(k1),abs(k2))
536elim = 2.303_dp * (k*r1m5 - 3.0_dp)
537k1 = digits(0.0_dp) - 1
539dig = min(aa, 18.0_dp)
541alim = elim + max(-aa, -41.45_dp)
542rl = 1.2_dp * dig + 3.0_dp
543fnul = 10.0_dp + 6.0_dp * (dig - 3.0_dp)
555 IF (az > aa) ierr = 3
556 IF (fn > aa) ierr = 3
559 IF (xx < 0.0_dp)
THEN
566 arg = (fnu - inu) * pi
567 IF (yy < 0.0_dp) arg = -arg
570 csgn = cmplx(s1, s2, kind=dp)
571 IF (mod(inu,2) == 1) csgn = -csgn
573 CALL cbinu(zn, fnu, kode, n, cy, nz, rl, fnul, tol, elim, alim)
575 IF (xx >= 0.0_dp)
RETURN
582 ascle = tiny(0.0_dp) * rtol * 1.0e+3
586 aa = real(zn, kind=dp)
589 IF (max(abs(aa),abs(bb)) <= ascle)
THEN
616SUBROUTINE cbesj(z, fnu, kode, n, cy, nz, ierr)
750COMPLEX (dp),
INTENT(IN) :: z
751real(dp),
INTENT(IN) :: fnu
752INTEGER,
INTENT(IN) :: kode
753INTEGER,
INTENT(IN) :: n
754COMPLEX (dp),
INTENT(OUT) :: cy(n)
755INTEGER,
INTENT(OUT) :: nz
756INTEGER,
INTENT(OUT) :: ierr
758COMPLEX (dp) :: ci, csgn, zn
759real(dp) :: aa, alim, arg, dig, elim, fnul, rl, r1, r1m5, r2, &
760 tol, yy, az, fn, bb, ascle, rtol, atol
761INTEGER :: i, inu, inuh, ir, k1, k2, nl, k
763real(dp),
PARAMETER :: hpi = 1.570796326794896619_dp
768IF (fnu < 0.0_dp) ierr = 1
769IF (kode < 1 .OR. kode > 2) ierr = 1
783tol = max(epsilon(0.0_dp), 1.0d-18)
784k1 = minexponent(0.0_dp)
785k2 = maxexponent(0.0_dp)
786r1m5 = log10( real( radix(0.0_dp), kind=dp) )
787k = min(abs(k1),abs(k2))
788elim = 2.303_dp * (k*r1m5 - 3.0_dp)
789k1 = digits(0.0_dp) - 1
791dig = min(aa, 18.0_dp)
793alim = elim + max(-aa, -41.45_dp)
794rl = 1.2_dp * dig + 3.0_dp
795fnul = 10.0_dp + 6.0_dp * (dig - 3.0_dp)
796ci = cmplx(0.0_dp, 1.0_dp, kind=dp)
809 IF (az > aa) ierr = 3
810 IF (fn > aa) ierr = 3
818 arg = (fnu - (inu-ir)) * hpi
821 csgn = cmplx(r1, r2, kind=dp)
822 IF (mod(inuh,2) == 1) csgn = -csgn
827 IF (yy < 0.0_dp)
THEN
832 CALL cbinu(zn, fnu, kode, n, cy, nz, rl, fnul, tol, elim, alim)
837 ascle = tiny(0.0_dp) * rtol * 1.0e+3
841 aa = real(zn, kind=dp)
844 IF (max(abs(aa),abs(bb)) <= ascle)
THEN
871SUBROUTINE cbesk(z, fnu, kode, n, cy, nz, ierr)
1004COMPLEX (dp),
INTENT(IN) :: z
1005real(dp),
INTENT(IN) :: fnu
1006INTEGER,
INTENT(IN) :: kode
1007INTEGER,
INTENT(IN) :: n
1008COMPLEX (dp),
INTENT(OUT) :: cy(n)
1009INTEGER,
INTENT(OUT) :: nz
1010INTEGER,
INTENT(OUT) :: ierr
1012real(dp) :: aa, alim, aln, arg, az, dig, elim, fn, fnul, rl, r1m5, &
1013 tol, ufl, xx, yy, bb
1014INTEGER :: k, k1, k2, mr, nn, nuf, nw
1019xx = real(z, kind=dp)
1021IF (yy == 0.0_dp .AND. xx == 0.0_dp) ierr = 1
1022IF (fnu < 0.0_dp) ierr = 1
1023IF (kode < 1 .OR. kode > 2) ierr = 1
1025IF (ierr /= 0)
RETURN
1038tol = max(epsilon(0.0_dp), 1.0d-18)
1039k1 = minexponent(0.0_dp)
1040k2 = maxexponent(0.0_dp)
1041r1m5 = log10( real( radix(0.0_dp), kind=dp) )
1042k = min(abs(k1),abs(k2))
1043elim = 2.303_dp * (k*r1m5 - 3.0_dp)
1044k1 = digits(0.0_dp) - 1
1046dig = min(aa, 18.0_dp)
1048alim = elim + max(-aa, -41.45_dp)
1049fnul = 10.0_dp + 6.0_dp * (dig - 3.0_dp)
1050rl = 1.2_dp * dig + 3.0_dp
1057bb = huge(0) * 0.5_dp
1062 IF (az > aa) ierr = 3
1063 IF (fn > aa) ierr = 3
1068 ufl = tiny(0.0_dp) * 1.0e+3
1070 IF (fnu <= fnul)
THEN
1071 IF (fn > 1.0_dp)
THEN
1072 IF (fn <= 2.0_dp)
THEN
1073 IF (az > tol)
GO TO 10
1075 aln = -fn * log(arg)
1076 IF (aln > elim)
GO TO 30
1078 CALL cuoik(z, fnu, kode, 2, nn, cy, nuf, tol, elim, alim)
1079 IF (nuf < 0)
GO TO 30
1086 IF (nn == 0)
GO TO 20
1090 10
IF (xx >= 0.0_dp)
THEN
1094 CALL cbknu(z, fnu, kode, nn, cy, nw, tol, elim, alim)
1095 IF (nw < 0)
GO TO 40
1103 IF (nz /= 0)
GO TO 30
1105 IF (yy < 0.0_dp) mr = -1
1106 CALL cacon(z, fnu, kode, mr, nn, cy, nw, rl, fnul, tol, elim, alim)
1107 IF (nw < 0)
GO TO 40
1115 IF (xx < 0.0_dp)
THEN
1117 IF (yy < 0.0_dp) mr = -1
1119 CALL cbunk(z, fnu, kode, mr, nn, cy, nw, tol, elim, alim)
1120 IF (nw < 0)
GO TO 40
1124 20
IF (xx >= 0.0_dp)
RETURN
1131 40
IF (nw == -1)
GO TO 30
1144SUBROUTINE cbesy(z, fnu, kode, n, cy, nz, ierr)
1284COMPLEX (dp),
INTENT(IN) :: z
1285real(dp),
INTENT(IN) :: fnu
1286INTEGER,
INTENT(IN) :: kode
1287INTEGER,
INTENT(IN) :: n
1288COMPLEX (dp),
INTENT(OUT) :: cy(n)
1289INTEGER,
INTENT(OUT) :: nz
1290INTEGER,
INTENT(OUT) :: ierr
1292COMPLEX (dp) :: ci, csgn, cspn, cwrk(n), ex, zu, zv, zz, zn
1293real(dp) :: arg, elim, ey, r1, r2, tay, xx, yy, ascle, rtol, &
1294 atol, tol, aa, bb, ffnu, rhpi, r1m5
1295INTEGER :: i, ifnu, k, k1, k2, nz1, nz2, i4
1296COMPLEX (dp),
PARAMETER :: cip(4) = (/ (1.0_dp, 0.0_dp), (0.0_dp, 1.0_dp), &
1297 (-1.0_dp, 0.0_dp), (0.0_dp, -1.0_dp) /)
1298real(dp),
PARAMETER :: hpi = 1.57079632679489662_dp
1301xx = real(z, kind=dp)
1305IF (xx == 0.0_dp .AND. yy == 0.0_dp) ierr = 1
1306IF (fnu < 0.0_dp) ierr = 1
1307IF (kode < 1 .OR. kode > 2) ierr = 1
1309IF (ierr /= 0)
RETURN
1310ci = cmplx(0.0_dp, 1.0_dp, kind=dp)
1312IF (yy < 0.0_dp) zz = conjg(z)
1314CALL cbesi(zn, fnu, kode, n, cy, nz1, ierr)
1315IF (ierr == 0 .OR. ierr == 3)
THEN
1316 CALL cbesk(zn, fnu, kode, n, cwrk, nz2, ierr)
1317 IF (ierr == 0 .OR. ierr == 3)
THEN
1322 csgn = cmplx(cos(arg), sin(arg), kind=dp)
1323 i4 = mod(ifnu, 4) + 1
1324 csgn = csgn * cip(i4)
1326 cspn = conjg(csgn) * rhpi
1330 cy(i) = csgn * cy(i) - cspn * cwrk(i)
1334 IF (yy < 0.0_dp) cy(1:n) = conjg(cy(1:n))
1340 ex = cmplx(r1, r2, kind=dp)
1341 tol = max(epsilon(0.0_dp), 1.0d-18)
1342 k1 = minexponent(0.0_dp)
1343 k2 = maxexponent(0.0_dp)
1344 k = min(abs(k1),abs(k2))
1345 r1m5 = log10( real( radix(0.0_dp), kind=dp) )
1349 elim = 2.303_dp * (k*r1m5 - 3.0_dp)
1352 IF (tay < elim) ey = exp(-tay)
1353 cspn = ex * ey * cspn
1356 ascle = tiny(0.0_dp) * rtol * 1.0e+3
1364 aa = real(zv, kind=dp)
1367 IF (max(abs(aa),abs(bb)) <= ascle)
THEN
1374 aa = real(zu, kind=dp)
1377 IF (max(abs(aa),abs(bb)) <= ascle)
THEN
1384 IF (yy < 0.0_dp) cy(i) = conjg(cy(i))
1385 IF (cy(i) == cmplx(0.0_dp, 0.0_dp, kind=dp) .AND. ey == 0.0_dp) nz = nz + 1
1398SUBROUTINE cairy(z, id, kode, ai, nz, ierr)
1516COMPLEX (dp),
INTENT(IN) :: z
1517INTEGER,
INTENT(IN) :: id
1518INTEGER,
INTENT(IN) :: kode
1519COMPLEX (dp),
INTENT(OUT) :: ai
1520INTEGER,
INTENT(OUT) :: nz
1521INTEGER,
INTENT(OUT) :: ierr
1523COMPLEX (dp) :: csq, cy(1), s1, s2, trm1, trm2, zta, z3
1524real(dp) :: aa, ad, ak, alim, atrm, az, az3, bk, ck, dig, dk, d1, d2, &
1525 elim, fid, fnu, rl, r1m5, sfac, tol, zi, zr, z3i, z3r, bb, &
1527INTEGER :: iflag, k, k1, k2, mr, nn
1528real(dp),
PARAMETER :: tth = 6.66666666666666667d-01, &
1529 c1 = 3.55028053887817240d-01, c2 = 2.58819403792806799d-01, &
1530 coef = 1.83776298473930683d-01
1531COMPLEX (dp),
PARAMETER :: cone = (1.0_dp, 0.0_dp)
1536IF (id < 0 .OR. id > 1) ierr = 1
1537IF (kode < 1 .OR. kode > 2) ierr = 1
1538IF (ierr /= 0)
RETURN
1540tol = max(epsilon(0.0_dp), 1.0d-18)
1542IF (az <= 1.0_dp)
THEN
1548 IF (az < tol)
GO TO 30
1550 IF (aa >= tol/az)
THEN
1557 bk = 3.0_dp - fid - fid
1559 dk = 3.0_dp + fid + fid
1563 ak = 24.0_dp + 9.0_dp * fid
1564 bk = 30.0_dp - 9.0_dp * fid
1565 z3r = real(z3, kind=dp)
1568 trm1 = trm1 * cmplx(z3r/d1, z3i/d1, kind=dp)
1570 trm2 = trm2 * cmplx(z3r/d2, z3i/d2, kind=dp)
1572 atrm = atrm * az3 / ad
1576 IF (atrm < tol*ad)
EXIT
1583 ai = s1 * c1 - z * s2 * c2
1584 IF (kode == 1)
RETURN
1585 zta = z * sqrt(z) * tth
1590 IF (az > tol) ai = ai + z * z * s1 * c1/(1.0_dp + fid)
1591 IF (kode == 1)
RETURN
1592 zta = z * sqrt(z) * tth
1599fnu = (1.0_dp + fid) / 3.0_dp
1610k1 = minexponent(0.0_dp)
1611k2 = maxexponent(0.0_dp)
1612r1m5 = log10( real( radix(0.0_dp), kind=dp) )
1613k = min(abs(k1),abs(k2))
1614elim = 2.303_dp * (k*r1m5 - 3.0_dp)
1615k1 = digits(0.0_dp) - 1
1617dig = min(aa,18.0_dp)
1619alim = elim + max(-aa,-41.45_dp)
1620rl = 1.2_dp * dig + 3.0_dp
1626bb = huge(0) * 0.5_dp
1629IF (az > aa)
GO TO 70
1631IF (az > aa) ierr = 3
1640zr = real(z, kind=dp)
1642IF (zr < 0.0_dp)
THEN
1643 bk = real(zta, kind=dp)
1645 zta = cmplx(ck, ak, kind=dp)
1647IF (zi == 0.0_dp)
THEN
1648 IF (zr <= 0.0_dp)
THEN
1649 zta = cmplx(0.0_dp, ak, kind=dp)
1652aa = real(zta, kind=dp)
1653IF (aa < 0.0_dp .OR. zr <= 0.0_dp)
THEN
1658 IF (aa <= -alim)
THEN
1659 aa = -aa + 0.25_dp * alaz
1662 IF (aa > elim)
GO TO 50
1669 IF (zi < 0.0_dp) mr = -1
1670 CALL cacai(zta, fnu, kode, mr, 1, cy, nn, rl, tol, elim, alim)
1671 IF (nn < 0)
GO TO 60
1678 IF (aa >= alim)
THEN
1679 aa = -aa - 0.25_dp * alaz
1682 IF (aa < -elim)
GO TO 40
1685 CALL cbknu(zta, fnu, kode, 1, cy, nz, tol, elim, alim)
170630 aa = 1.0e+3 * tiny(0.0_dp)
1707s1 = cmplx(0.0_dp, 0.0_dp, kind=dp)
1709 IF (az > aa) s1 = c2 * z
1715IF (az > aa) s1 = z * z * 0.5_dp
1720ai = cmplx(0.0_dp, 0.0_dp, kind=dp)
172760
IF (nn == -1)
GO TO 50
1739SUBROUTINE cbiry(z, id, kode, bi, ierr)
1856COMPLEX (dp),
INTENT(IN) :: z
1857INTEGER,
INTENT(IN) :: id
1858INTEGER,
INTENT(IN) :: kode
1859COMPLEX (dp),
INTENT(OUT) :: bi
1860INTEGER,
INTENT(OUT) :: ierr
1862COMPLEX (dp) :: csq, cy(2), s1, s2, trm1, trm2, zta, z3
1863real(dp) :: aa, ad, ak, alim, atrm, az, az3, bb, bk, ck, dig, dk, &
1864 d1, d2, elim, fid, fmr, fnu, fnul, rl, r1m5, &
1865 sfac, tol, zi, zr, z3i, z3r
1866INTEGER :: k, k1, k2, nz
1867real(dp),
PARAMETER :: tth = 6.66666666666666667d-01, &
1868 c1 = 6.14926627446000736d-01, c2 = 4.48288357353826359d-01, &
1869 coef = 5.77350269189625765d-01, pi = 3.141592653589793238_dp
1870real(dp),
PARAMETER :: cone = (1.0_dp,0.0_dp)
1875IF (id < 0 .OR. id > 1) ierr = 1
1876IF (kode < 1 .OR. kode > 2) ierr = 1
1877IF (ierr /= 0)
RETURN
1879tol = max(epsilon(0.0_dp), 1.0d-18)
1881IF (az <= 1.0_dp)
THEN
1887 IF (az < tol)
GO TO 30
1889 IF (aa >= tol/az)
THEN
1896 bk = 3.0_dp - fid - fid
1898 dk = 3.0_dp + fid + fid
1902 ak = 24.0_dp + 9.0_dp * fid
1903 bk = 30.0_dp - 9.0_dp * fid
1904 z3r = real(z3, kind=dp)
1907 trm1 = trm1 * cmplx(z3r/d1, z3i/d1, kind=dp)
1909 trm2 = trm2 * cmplx(z3r/d2, z3i/d2, kind=dp)
1911 atrm = atrm * az3 / ad
1915 IF (atrm < tol*ad)
EXIT
1922 bi = s1 * c1 + z * s2 * c2
1923 IF (kode == 1)
RETURN
1924 zta = z * sqrt(z) * tth
1925 aa = real(zta, kind=dp)
1931 IF (az > tol) bi = bi + z * z * s1 * c1/(1.0_dp+fid)
1932 IF (kode == 1)
RETURN
1933 zta = z * sqrt(z) * tth
1934 aa = real(zta, kind=dp)
1942fnu = (1.0_dp+fid) / 3.0_dp
1954k1 = minexponent(0.0_dp)
1955k2 = maxexponent(0.0_dp)
1956r1m5 = log10( real( radix(0.0_dp), kind=dp) )
1957k = min(abs(k1),abs(k2))
1958elim = 2.303_dp * (k*r1m5 - 3.0_dp)
1959k1 = digits(0.0_dp) - 1
1961dig = min(aa,18.0_dp)
1963alim = elim + max(-aa,-41.45_dp)
1964rl = 1.2_dp * dig + 3.0_dp
1965fnul = 10.0_dp + 6.0_dp * (dig - 3.0_dp)
1970bb = huge(0) * 0.5_dp
1973IF (az > aa)
GO TO 60
1975IF (az > aa) ierr = 3
1983zr = real(z, kind=dp)
1985IF (zr < 0.0_dp)
THEN
1986 bk = real(zta, kind=dp)
1988 zta = cmplx(ck, ak, kind=dp)
1990IF (zi == 0.0_dp .AND. zr <= 0.0_dp) zta = cmplx(0.0_dp, ak, kind=dp)
1991aa = real(zta, kind=dp)
1997 IF (bb >= alim)
THEN
1998 bb = bb + 0.25_dp * log(az)
2000 IF (bb > elim)
GO TO 40
2004IF (aa < 0.0_dp .OR. zr <= 0.0_dp)
THEN
2006 IF (zi < 0.0_dp) fmr = -pi
2013CALL cbinu(zta,fnu,kode,1,cy,nz,rl,fnul,tol,elim,alim)
2016z3 = cmplx(sfac, 0.0_dp, kind=dp)
2017s1 = cy(1) * cmplx(cos(aa), sin(aa), kind=dp) * z3
2018fnu = (2.0_dp - fid) / 3.0_dp
2019CALL cbinu(zta, fnu, kode, 2, cy, nz, rl, fnul, tol, elim, alim)
2025s2 = cy(1) * cmplx(fnu+fnu, 0.0_dp, kind=dp) / zta + cy(2)
2026aa = fmr * (fnu-1.0_dp)
2027s1 = (s1 + s2*cmplx(cos(aa), sin(aa), kind=dp)) * coef
203730 aa = c1 * (1.0_dp-fid) + fid * c2
2038bi = cmplx(aa, 0.0_dp, kind=dp)
204550
IF (nz == -1)
GO TO 40
2057SUBROUTINE cunik(zr, fnu, ikflg, ipmtr, tol, init, phi, zeta1, zeta2, total, &
2079COMPLEX (dp),
INTENT(IN) :: zr
2080real(dp),
INTENT(IN) :: fnu
2081INTEGER,
INTENT(IN) :: ikflg
2082INTEGER,
INTENT(IN) :: ipmtr
2083real(dp),
INTENT(IN) :: tol
2084INTEGER,
INTENT(IN OUT) :: init
2085COMPLEX (dp),
INTENT(OUT) :: phi
2086COMPLEX (dp),
INTENT(IN OUT) :: zeta1
2087COMPLEX (dp),
INTENT(IN OUT) :: zeta2
2088COMPLEX (dp),
INTENT(IN OUT) :: total
2089COMPLEX (dp),
INTENT(IN OUT) :: cwrk(16)
2091COMPLEX (dp) :: cfn, crfn, s, sr, t, t2, zn
2092real(dp) :: ac, rfn, test, tstr, tsti
2093INTEGER :: i, j, k, l
2094COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp, 0.0_dp)
2095real(dp),
PARAMETER :: con(2) = (/ 3.98942280401432678d-01, &
2096 1.25331413731550025_dp /)
2097real(dp),
PARAMETER :: c(120) = (/ &
2098 1.00000000000000000_dp, -2.08333333333333333d-01, 1.25000000000000000d-01, 3.34201388888888889d-01, &
2099 -4.01041666666666667d-01, 7.03125000000000000d-02, -1.02581259645061728_dp, 1.84646267361111111_dp, &
2100 -8.91210937500000000d-01, 7.32421875000000000d-02, 4.66958442342624743_dp, -1.12070026162229938d+01, &
2101 8.78912353515625000_dp, -2.36408691406250000_dp, 1.12152099609375000d-01, -2.82120725582002449d+01, &
2102 8.46362176746007346d+01, -9.18182415432400174d+01, 4.25349987453884549d+01, -7.36879435947963170_dp, &
2103 2.27108001708984375d-01, 2.12570130039217123d+02, -7.65252468141181642d+02, 1.05999045252799988d+03, &
2104 -6.99579627376132541d+02, 2.18190511744211590d+02, -2.64914304869515555d+01, 5.72501420974731445d-01, &
2105 -1.91945766231840700d+03, 8.06172218173730938d+03, -1.35865500064341374d+04, 1.16553933368645332d+04, &
2106 -5.30564697861340311d+03, 1.20090291321635246d+03, -1.08090919788394656d+02, 1.72772750258445740_dp, &
2107 2.02042913309661486d+04, -9.69805983886375135d+04, 1.92547001232531532d+05, -2.03400177280415534d+05, &
2108 1.22200464983017460d+05, -4.11926549688975513d+04, 7.10951430248936372d+03, -4.93915304773088012d+02, &
2109 6.07404200127348304_dp, -2.42919187900551333d+05, 1.31176361466297720d+06, -2.99801591853810675d+06, &
2110 3.76327129765640400d+06, -2.81356322658653411d+06, 1.26836527332162478d+06, -3.31645172484563578d+05, &
2111 4.52187689813627263d+04, -2.49983048181120962d+03, 2.43805296995560639d+01, 3.28446985307203782d+06, &
2112 -1.97068191184322269d+07, 5.09526024926646422d+07, -7.41051482115326577d+07, 6.63445122747290267d+07, &
2113 -3.75671766607633513d+07, 1.32887671664218183d+07, -2.78561812808645469d+06, 3.08186404612662398d+05, &
2114 -1.38860897537170405d+04, 1.10017140269246738d+02, -4.93292536645099620d+07, 3.25573074185765749d+08, &
2115 -9.39462359681578403d+08, 1.55359689957058006d+09, -1.62108055210833708d+09, 1.10684281682301447d+09, &
2116 -4.95889784275030309d+08, 1.42062907797533095d+08, -2.44740627257387285d+07, 2.24376817792244943d+06, &
2117 -8.40054336030240853d+04, 5.51335896122020586d+02, 8.14789096118312115d+08, -5.86648149205184723d+09, &
2118 1.86882075092958249d+10, -3.46320433881587779d+10, 4.12801855797539740d+10, -3.30265997498007231d+10, &
2119 1.79542137311556001d+10, -6.56329379261928433d+09, 1.55927986487925751d+09, -2.25105661889415278d+08, &
2120 1.73951075539781645d+07, -5.49842327572288687d+05, 3.03809051092238427d+03, -1.46792612476956167d+10, &
2121 1.14498237732025810d+11, -3.99096175224466498d+11, 8.19218669548577329d+11, -1.09837515608122331d+12, &
2122 1.00815810686538209d+12, -6.45364869245376503d+11, 2.87900649906150589d+11, -8.78670721780232657d+10, &
2123 1.76347306068349694d+10, -2.16716498322379509d+09, 1.43157876718888981d+08, -3.87183344257261262d+06, &
2124 1.82577554742931747d+04, 2.86464035717679043d+11, -2.40629790002850396d+12, 9.10934118523989896d+12, &
2125 -2.05168994109344374d+13, 3.05651255199353206d+13, -3.16670885847851584d+13, 2.33483640445818409d+13, &
2126 -1.23204913055982872d+13, 4.61272578084913197d+12, -1.19655288019618160d+12, 2.05914503232410016d+11, &
2127 -2.18229277575292237d+10, 1.24700929351271032d+09, -2.91883881222208134d+07, 1.18838426256783253d+05 /)
2140 tstr = real(zr, kind=dp)
2142 test = tiny(0.0_dp) * 1.0e+3
2144 IF (abs(tstr) <= ac .AND. abs(tsti) <= ac)
THEN
2145 ac = 2.0_dp * abs(log(test)) + fnu
2156 zeta1 = cfn * log(zn)
2161 phi = cwrk(16) * con(ikflg)
2162 IF (ipmtr /= 0)
RETURN
2177 tstr = real(cwrk(k), kind=dp)
2178 tsti = aimag(cwrk(k))
2179 test = abs(tstr) + abs(tsti)
2180 IF (ac < tol .AND. test < tol)
GO TO 30
2191 total = sum( cwrk(1:init) )
2192 phi = cwrk(16) * con(1)
2205phi = cwrk(16) * con(2)
2211SUBROUTINE cuoik(z, fnu, kode, ikflg, n, y, nuf, tol, elim, alim)
2236COMPLEX (dp),
INTENT(IN) :: z
2237real(dp),
INTENT(IN) :: fnu
2238INTEGER,
INTENT(IN) :: kode
2239INTEGER,
INTENT(IN) :: ikflg
2240INTEGER,
INTENT(IN) :: n
2241COMPLEX (dp),
INTENT(IN OUT) :: y(n)
2242INTEGER,
INTENT(OUT) :: nuf
2243real(dp),
INTENT(IN) :: tol
2244real(dp),
INTENT(IN) :: elim
2245real(dp),
INTENT(IN) :: alim
2247COMPLEX (dp) :: arg, asum, bsum, cwrk(16), cz, phi, sum, zb, zeta1, zeta2, &
2249real(dp) :: aarg, aphi, ascle, ax, ay, fnn, gnn, gnu, rcz, x, yy
2250INTEGER :: iform, init, nn, nw
2251COMPLEX (dp),
PARAMETER :: czero = (0.0_dp, 0.0_dp)
2252real(dp),
PARAMETER :: aic = 1.265512123484645396_dp
2258IF (x < 0.0_dp) zr = -z
2261ax = abs(x) * 1.73205080756887_dp
2264IF (ay > ax) iform = 2
2265gnu = max(fnu, 1.0_dp)
2268 gnn = fnu + fnn - 1.0_dp
2278 CALL cunik(zr, gnu, ikflg, 1, tol, init, phi, zeta1, zeta2, sum, cwrk)
2281 zn = -zr * cmplx(0.0_dp, 1.0_dp, kind=dp)
2282 IF (yy <= 0.0_dp)
THEN
2285 CALL cunhj(zn, gnu, 1, tol, phi, arg, zeta1, zeta2, asum, bsum)
2289IF (kode == 2) cz = cz - zb
2290IF (ikflg == 2) cz = -cz
2292rcz = real(cz, kind=dp)
2296IF (rcz <= elim)
THEN
2297 IF (rcz >= alim)
THEN
2298 rcz = rcz + log(aphi)
2299 IF (iform == 2) rcz = rcz - 0.25_dp * log(aarg) - aic
2300 IF (rcz > elim)
GO TO 80
2305 IF (rcz >= -elim)
THEN
2306 IF (rcz > -alim)
GO TO 40
2307 rcz = rcz + log(aphi)
2308 IF (iform == 2) rcz = rcz - 0.25_dp * log(aarg) - aic
2309 IF (rcz > -elim)
GO TO 30
2316 30 ascle = 1.0e+3 * tiny(0.0_dp) / tol
2318 IF (iform /= 1)
THEN
2319 cz = cz - 0.25_dp * log(arg) - aic
2323 cz = ax * cmplx(cos(ay), sin(ay), kind=dp)
2324 CALL cuchk(cz, nw, ascle, tol)
2325 IF (nw == 1)
GO TO 10
2328 40
IF (ikflg == 2)
RETURN
2333 50 gnu = fnu + (nn-1)
2334 IF (iform /= 2)
THEN
2336 CALL cunik(zr, gnu, ikflg, 1, tol, init, phi, zeta1, zeta2, sum, cwrk)
2339 CALL cunhj(zn, gnu, 1, tol, phi, arg, zeta1, zeta2, asum, bsum)
2343 IF (kode == 2) cz = cz - zb
2345 rcz = real(cz, kind=dp)
2346 IF (rcz >= -elim)
THEN
2347 IF (rcz > -alim)
RETURN
2348 rcz = rcz + log(aphi)
2349 IF (iform == 2) rcz = rcz - 0.25_dp * log(aarg) - aic
2350 IF (rcz > -elim)
GO TO 70
2359 70 ascle = 1.0e+3 * tiny(0.0_dp) / tol
2361 IF (iform /= 1)
THEN
2362 cz = cz - 0.25_dp * log(arg) - aic
2366 cz = ax * cmplx(cos(ay), sin(ay), kind=dp)
2367 CALL cuchk(cz, nw, ascle, tol)
2368 IF (nw == 1)
GO TO 60
2378SUBROUTINE cwrsk(zr, fnu, kode, n, y, nz, cw, tol, elim, alim)
2388COMPLEX (dp),
INTENT(IN) :: zr
2389real(dp),
INTENT(IN) :: fnu
2390INTEGER,
INTENT(IN) :: kode
2391INTEGER,
INTENT(IN) :: n
2392COMPLEX (dp),
INTENT(OUT) :: y(n)
2393INTEGER,
INTENT(OUT) :: nz
2394COMPLEX (dp),
INTENT(OUT) :: cw(2)
2395real(dp),
INTENT(IN) :: tol
2396real(dp),
INTENT(IN) :: elim
2397real(dp),
INTENT(IN) :: alim
2399COMPLEX (dp) :: cinu, cscl, ct, c1, c2, rct, st
2400real(dp) :: act, acw, ascle, s1, s2, yy
2409CALL cbknu(zr, fnu, kode, 2, cw, nw, tol, elim, alim)
2411 CALL crati(zr, fnu, n, y, tol)
2416 cinu = cmplx(1.0_dp, 0.0_dp, kind=dp)
2421 cinu = cmplx(s1, s2, kind=dp)
2430 ascle = 1.0e+3 * tiny(0.0_dp) / tol
2431 cscl = cmplx(1.0_dp, 0.0_dp, kind=dp)
2432 IF (acw <= ascle)
THEN
2433 cscl = cmplx(1.0_dp/tol, 0.0_dp, kind=dp)
2435 ascle = 1.0_dp / ascle
2436 IF (acw >= ascle)
THEN
2437 cscl = cmplx(tol, 0.0_dp, kind=dp)
2447 ct = zr * (c2 + st*c1)
2449 rct = cmplx(1.0_dp/act, 0.0_dp, kind=dp)
2450 ct = conjg(ct) * rct
2451 cinu = cinu * rct * ct
2462IF (nw == -2) nz = -2
2468SUBROUTINE cmlri(z, fnu, kode, n, y, nz, tol)
2478COMPLEX (dp),
INTENT(IN) :: z
2479real(dp),
INTENT(IN) :: fnu
2480INTEGER,
INTENT(IN) :: kode
2481INTEGER,
INTENT(IN) :: n
2482COMPLEX (dp),
INTENT(OUT) :: y(n)
2483INTEGER,
INTENT(OUT) :: nz
2484real(dp),
INTENT(IN) :: tol
2486COMPLEX (dp) :: ck, cnorm, pt, p1, p2, rz, sum
2487real(dp) :: ack, ak, ap, at, az, bk, fkap, fkk, flam, fnf, rho, &
2488 rho2, scle, tfnf, tst, x
2489INTEGER :: i, iaz, ifnu, inu, itime, k, kk, km, m
2491COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp), &
2492 ctwo = (2.0_dp,0.0_dp)
2494scle = 1.0e+3 * tiny(0.0_dp) / tol
2502ck = cmplx(at, 0.0_dp, kind=dp) / z
2506ack = (at + 1.0_dp) / az
2507rho = ack + sqrt(ack*ack - 1.0_dp)
2509tst = (rho2+rho2) / ((rho2-1.0_dp)*(rho-1.0_dp))
2521 IF (ap > tst*ak*ak)
GO TO 20
2535 ck = cmplx(at, 0.0_dp, kind=dp) / z
2546 IF (itime == 2)
GO TO 40
2548 flam = ack + sqrt(ack*ack - 1.0_dp)
2550 rho = min(flam,fkap)
2551 tst = tst * sqrt(rho/(rho*rho - 1.0_dp))
2561kk = max(i+iaz, k+inu)
2567p2 = cmplx(scle, 0.0_dp, kind=dp)
2570bk = gamln(fkk+tfnf+1.0_dp) - gamln(fkk+1.0_dp) - gamln(tfnf+1.0_dp)
2576 p2 = p1 + cmplx(fkk+fnf, 0.0_dp, kind=dp) * rz * p2
2578 ak = 1.0_dp - tfnf / (fkk+tfnf)
2580 sum = sum + cmplx(ack+bk, 0.0_dp, kind=dp) * p1
2588 p2 = p1 + cmplx(fkk+fnf, 0.0_dp, kind=dp) * rz * p2
2590 ak = 1.0_dp - tfnf / (fkk+tfnf)
2592 sum = sum + cmplx(ack+bk, 0.0_dp, kind=dp) * p1
2602 p2 = p1 + cmplx(fkk+fnf, 0.0_dp, kind=dp) * rz * p2
2604 ak = 1.0_dp - tfnf / (fkk+tfnf)
2606 sum = sum + cmplx(ack+bk, 0.0_dp, kind=dp) * p1
2612IF (kode == 2) pt = pt - x
2613p1 = -fnf * log(rz) + pt
2614ap = gamln(1.0_dp+fnf)
2622p1 = cmplx(1.0_dp/ap, 0.0_dp, kind=dp)
2626y(1:n) = y(1:n) * cnorm
2635SUBROUTINE cunhj(z, fnu, ipmtr, tol, phi, arg, zeta1, zeta2, asum, bsum)
2668COMPLEX (dp),
INTENT(IN) :: z
2669real(dp),
INTENT(IN) :: fnu
2670INTEGER,
INTENT(IN) :: ipmtr
2671real(dp),
INTENT(IN) :: tol
2672COMPLEX (dp),
INTENT(OUT) :: phi
2673COMPLEX (dp),
INTENT(OUT) :: arg
2674COMPLEX (dp),
INTENT(OUT) :: zeta1
2675COMPLEX (dp),
INTENT(OUT) :: zeta2
2676COMPLEX (dp),
INTENT(OUT) :: asum
2677COMPLEX (dp),
INTENT(OUT) :: bsum
2679COMPLEX (dp) :: cfnu, cr(14), dr(14), p(30), przth, ptfn, rtzta, rzth, &
2680 suma, sumb, tfn, t2, up(14), w, w2, za, zb, zc, zeta, zth
2681real(dp) :: ang, ap(30), atol, aw2, azth, btol, fn13, fn23, pp, rfn13, &
2682 rfnu, rfnu2, wi, wr, zci, zcr, zetai, zetar, zthi, zthr, &
2683 asumr, asumi, bsumr, bsumi, test, tstr, tsti, ac
2684INTEGER :: ias, ibs, is, j, jr, ju, k, kmax, kp1, ks, l, lr, lrp1, &
2686real(dp),
PARAMETER :: ar(14) = (/ &
2687 1.00000000000000000_dp, 1.04166666666666667d-01, &
2688 8.35503472222222222d-02, 1.28226574556327160d-01, &
2689 2.91849026464140464d-01, 8.81627267443757652d-01, &
2690 3.32140828186276754_dp, 1.49957629868625547d+01, &
2691 7.89230130115865181d+01, 4.74451538868264323d+02, &
2692 3.20749009089066193d+03, 2.40865496408740049d+04, &
2693 1.98923119169509794d+05, 1.79190200777534383d+06 /)
2694real(dp),
PARAMETER :: br(14) = (/ &
2695 1.00000000000000000_dp, -1.45833333333333333d-01, &
2696 -9.87413194444444444d-02, -1.43312053915895062d-01, &
2697 -3.17227202678413548d-01, -9.42429147957120249d-01, &
2698 -3.51120304082635426_dp, -1.57272636203680451d+01, &
2699 -8.22814390971859444d+01, -4.92355370523670524d+02, &
2700 -3.31621856854797251d+03, -2.48276742452085896d+04, &
2701 -2.04526587315129788d+05, -1.83844491706820990d+06 /)
2702real(dp),
PARAMETER :: c(105) = (/ &
2703 1.00000000000000000_dp, -2.08333333333333333d-01, 1.25000000000000000d-01, &
2704 3.34201388888888889d-01, -4.01041666666666667d-01, 7.03125000000000000d-02, &
2705 -1.02581259645061728_dp, 1.84646267361111111_dp, -8.91210937500000000d-01, &
2706 7.32421875000000000d-02, 4.66958442342624743_dp, -1.12070026162229938d+01, &
2707 8.78912353515625000_dp, -2.36408691406250000_dp, 1.12152099609375000d-01, &
2708 -2.82120725582002449d+01, 8.46362176746007346d+01, -9.18182415432400174d+01, &
2709 4.25349987453884549d+01, -7.36879435947963170_dp, 2.27108001708984375d-01, &
2710 2.12570130039217123d+02, -7.65252468141181642d+02, 1.05999045252799988d+03, &
2711 -6.99579627376132541d+02, 2.18190511744211590d+02, -2.64914304869515555d+01, &
2712 5.72501420974731445d-01, -1.91945766231840700d+03, 8.06172218173730938d+03, &
2713 -1.35865500064341374d+04, 1.16553933368645332d+04, -5.30564697861340311d+03, &
2714 1.20090291321635246d+03, -1.08090919788394656d+02, 1.72772750258445740_dp, &
2715 2.02042913309661486d+04, -9.69805983886375135d+04, 1.92547001232531532d+05, &
2716 -2.03400177280415534d+05, 1.22200464983017460d+05, -4.11926549688975513d+04, &
2717 7.10951430248936372d+03, -4.93915304773088012d+02, 6.07404200127348304_dp, &
2718 -2.42919187900551333d+05, 1.31176361466297720d+06, -2.99801591853810675d+06, &
2719 3.76327129765640400d+06, -2.81356322658653411d+06, 1.26836527332162478d+06, &
2720 -3.31645172484563578d+05, 4.52187689813627263d+04, -2.49983048181120962d+03, &
2721 2.43805296995560639d+01, 3.28446985307203782d+06, -1.97068191184322269d+07, &
2722 5.09526024926646422d+07, -7.41051482115326577d+07, 6.63445122747290267d+07, &
2723 -3.75671766607633513d+07, 1.32887671664218183d+07, -2.78561812808645469d+06, &
2724 3.08186404612662398d+05, -1.38860897537170405d+04, 1.10017140269246738d+02, &
2725 -4.93292536645099620d+07, 3.25573074185765749d+08, -9.39462359681578403d+08, &
2726 1.55359689957058006d+09, -1.62108055210833708d+09, 1.10684281682301447d+09, &
2727 -4.95889784275030309d+08, 1.42062907797533095d+08, -2.44740627257387285d+07, &
2728 2.24376817792244943d+06, -8.40054336030240853d+04, 5.51335896122020586d+02, &
2729 8.14789096118312115d+08, -5.86648149205184723d+09, 1.86882075092958249d+10, &
2730 -3.46320433881587779d+10, 4.12801855797539740d+10, -3.30265997498007231d+10, &
2731 1.79542137311556001d+10, -6.56329379261928433d+09, 1.55927986487925751d+09, &
2732 -2.25105661889415278d+08, 1.73951075539781645d+07, -5.49842327572288687d+05, &
2733 3.03809051092238427d+03, -1.46792612476956167d+10, 1.14498237732025810d+11, &
2734 -3.99096175224466498d+11, 8.19218669548577329d+11, -1.09837515608122331d+12, &
2735 1.00815810686538209d+12, -6.45364869245376503d+11, 2.87900649906150589d+11, &
2736 -8.78670721780232657d+10, 1.76347306068349694d+10, -2.16716498322379509d+09, &
2737 1.43157876718888981d+08, -3.87183344257261262d+06, 1.82577554742931747d+04 /)
2738real(dp),
PARAMETER :: alfa1(30) = (/ &
2739 -4.44444444444444444d-03, -9.22077922077922078d-04, -8.84892884892884893d-05, &
2740 1.65927687832449737d-04, 2.46691372741792910d-04, 2.65995589346254780d-04, &
2741 2.61824297061500945d-04, 2.48730437344655609d-04, 2.32721040083232098d-04, &
2742 2.16362485712365082d-04, 2.00738858762752355d-04, 1.86267636637545172d-04, &
2743 1.73060775917876493d-04, 1.61091705929015752d-04, 1.50274774160908134d-04, &
2744 1.40503497391269794d-04, 1.31668816545922806d-04, 1.23667445598253261d-04, &
2745 1.16405271474737902d-04, 1.09798298372713369d-04, 1.03772410422992823d-04, &
2746 9.82626078369363448d-05, 9.32120517249503256d-05, 8.85710852478711718d-05, &
2747 8.42963105715700223d-05, 8.03497548407791151d-05, 7.66981345359207388d-05, &
2748 7.33122157481777809d-05, 7.01662625163141333d-05, 6.72375633790160292d-05 /)
2749real(dp),
PARAMETER :: alfa2(30) = (/ &
2750 6.93735541354588974d-04, 2.32241745182921654d-04, -1.41986273556691197d-05, &
2751 -1.16444931672048640d-04, -1.50803558053048762d-04, -1.55121924918096223d-04, &
2752 -1.46809756646465549d-04, -1.33815503867491367d-04, -1.19744975684254051d-04, &
2753 -1.06184319207974020d-04, -9.37699549891194492d-05, -8.26923045588193274d-05, &
2754 -7.29374348155221211d-05, -6.44042357721016283d-05, -5.69611566009369048d-05, &
2755 -5.04731044303561628d-05, -4.48134868008882786d-05, -3.98688727717598864d-05, &
2756 -3.55400532972042498d-05, -3.17414256609022480d-05, -2.83996793904174811d-05, &
2757 -2.54522720634870566d-05, -2.28459297164724555d-05, -2.05352753106480604d-05, &
2758 -1.84816217627666085d-05, -1.66519330021393806d-05, -1.50179412980119482d-05, &
2759 -1.35554031379040526d-05, -1.22434746473858131d-05, -1.10641884811308169d-05 /)
2760real(dp),
PARAMETER :: alfa3(30) = (/ &
2761 -3.54211971457743841d-04, -1.56161263945159416d-04, 3.04465503594936410d-05, &
2762 1.30198655773242693d-04, 1.67471106699712269d-04, 1.70222587683592569d-04, &
2763 1.56501427608594704d-04, 1.36339170977445120d-04, 1.14886692029825128d-04, &
2764 9.45869093034688111d-05, 7.64498419250898258d-05, 6.07570334965197354d-05, &
2765 4.74394299290508799d-05, 3.62757512005344297d-05, 2.69939714979224901d-05, &
2766 1.93210938247939253d-05, 1.30056674793963203d-05, 7.82620866744496661d-06, &
2767 3.59257485819351583d-06, 1.44040049814251817d-07, -2.65396769697939116d-06, &
2768 -4.91346867098485910d-06, -6.72739296091248287d-06, -8.17269379678657923d-06, &
2769 -9.31304715093561232d-06, -1.02011418798016441d-05, -1.08805962510592880d-05, &
2770 -1.13875481509603555d-05, -1.17519675674556414d-05, -1.19987364870944141d-05 /)
2771real(dp),
PARAMETER :: alfa4(30) = (/ &
2772 3.78194199201772914d-04, 2.02471952761816167d-04, -6.37938506318862408d-05, &
2773 -2.38598230603005903d-04, -3.10916256027361568d-04, -3.13680115247576316d-04, &
2774 -2.78950273791323387d-04, -2.28564082619141374d-04, -1.75245280340846749d-04, &
2775 -1.25544063060690348d-04, -8.22982872820208365d-05, -4.62860730588116458d-05, &
2776 -1.72334302366962267d-05, 5.60690482304602267d-06, 2.31395443148286800d-05, &
2777 3.62642745856793957d-05, 4.58006124490188752d-05, 5.24595294959114050d-05, &
2778 5.68396208545815266d-05, 5.94349820393104052d-05, 6.06478527578421742d-05, &
2779 6.08023907788436497d-05, 6.01577894539460388d-05, 5.89199657344698500d-05, &
2780 5.72515823777593053d-05, 5.52804375585852577d-05, 5.31063773802880170d-05, &
2781 5.08069302012325706d-05, 4.84418647620094842d-05, 4.60568581607475370d-05 /)
2782real(dp),
PARAMETER :: alfa5(30) = (/ &
2783 -6.91141397288294174d-04, -4.29976633058871912d-04, 1.83067735980039018d-04, &
2784 6.60088147542014144d-04, 8.75964969951185931d-04, 8.77335235958235514d-04, &
2785 7.49369585378990637d-04, 5.63832329756980918d-04, 3.68059319971443156d-04, &
2786 1.88464535514455599d-04, 3.70663057664904149d-05, -8.28520220232137023d-05, &
2787 -1.72751952869172998d-04, -2.36314873605872983d-04, -2.77966150694906658d-04, &
2788 -3.02079514155456919d-04, -3.12594712643820127d-04, -3.12872558758067163d-04, &
2789 -3.05678038466324377d-04, -2.93226470614557331d-04, -2.77255655582934777d-04, &
2790 -2.59103928467031709d-04, -2.39784014396480342d-04, -2.20048260045422848d-04, &
2791 -2.00443911094971498d-04, -1.81358692210970687d-04, -1.63057674478657464d-04, &
2792 -1.45712672175205844d-04, -1.29425421983924587d-04, -1.14245691942445952d-04 /)
2793real(dp),
PARAMETER :: alfa6(30) = (/ &
2794 1.92821964248775885d-03, 1.35592576302022234d-03, -7.17858090421302995d-04, &
2795 -2.58084802575270346d-03, -3.49271130826168475d-03, -3.46986299340960628d-03, &
2796 -2.82285233351310182d-03, -1.88103076404891354d-03, -8.89531718383947600d-04, &
2797 3.87912102631035228d-06, 7.28688540119691412d-04, 1.26566373053457758d-03, &
2798 1.62518158372674427d-03, 1.83203153216373172d-03, 1.91588388990527909d-03, &
2799 1.90588846755546138d-03, 1.82798982421825727d-03, 1.70389506421121530d-03, &
2800 1.55097127171097686d-03, 1.38261421852276159d-03, 1.20881424230064774d-03, &
2801 1.03676532638344962d-03, 8.71437918068619115d-04, 7.16080155297701002d-04, &
2802 5.72637002558129372d-04, 4.42089819465802277d-04, 3.24724948503090564d-04, &
2803 2.20342042730246599d-04, 1.28412898401353882d-04, 4.82005924552095464d-05 /)
2804real(dp) :: alfa(180)
2805real(dp),
PARAMETER :: beta1(30) = (/ &
2806 1.79988721413553309d-02, 5.59964911064388073d-03, 2.88501402231132779d-03, &
2807 1.80096606761053941d-03, 1.24753110589199202d-03, 9.22878876572938311d-04, &
2808 7.14430421727287357d-04, 5.71787281789704872d-04, 4.69431007606481533d-04, &
2809 3.93232835462916638d-04, 3.34818889318297664d-04, 2.88952148495751517d-04, &
2810 2.52211615549573284d-04, 2.22280580798883327d-04, 1.97541838033062524d-04, &
2811 1.76836855019718004d-04, 1.59316899661821081d-04, 1.44347930197333986d-04, &
2812 1.31448068119965379d-04, 1.20245444949302884d-04, 1.10449144504599392d-04, &
2813 1.01828770740567258d-04, 9.41998224204237509d-05, 8.74130545753834437d-05, &
2814 8.13466262162801467d-05, 7.59002269646219339d-05, 7.09906300634153481d-05, &
2815 6.65482874842468183d-05, 6.25146958969275078d-05, 5.88403394426251749d-05 /)
2816real(dp),
PARAMETER :: beta2(30) = (/ &
2817 -1.49282953213429172d-03, -8.78204709546389328d-04, -5.02916549572034614d-04, &
2818 -2.94822138512746025d-04, -1.75463996970782828d-04, -1.04008550460816434d-04, &
2819 -5.96141953046457895d-05, -3.12038929076098340d-05, -1.26089735980230047d-05, &
2820 -2.42892608575730389d-07, 8.05996165414273571d-06, 1.36507009262147391d-05, &
2821 1.73964125472926261d-05, 1.98672978842133780d-05, 2.14463263790822639d-05, &
2822 2.23954659232456514d-05, 2.28967783814712629d-05, 2.30785389811177817d-05, &
2823 2.30321976080909144d-05, 2.28236073720348722d-05, 2.25005881105292418d-05, &
2824 2.20981015361991429d-05, 2.16418427448103905d-05, 2.11507649256220843d-05, &
2825 2.06388749782170737d-05, 2.01165241997081666d-05, 1.95913450141179244d-05, &
2826 1.90689367910436740d-05, 1.85533719641636667d-05, 1.80475722259674218d-05 /)
2827real(dp),
PARAMETER :: beta3(30) = (/ &
2828 5.52213076721292790d-04, 4.47932581552384646d-04, 2.79520653992020589d-04, &
2829 1.52468156198446602d-04, 6.93271105657043598d-05, 1.76258683069991397d-05, &
2830 -1.35744996343269136d-05, -3.17972413350427135d-05, -4.18861861696693365d-05, &
2831 -4.69004889379141029d-05, -4.87665447413787352d-05, -4.87010031186735069d-05, &
2832 -4.74755620890086638d-05, -4.55813058138628452d-05, -4.33309644511266036d-05, &
2833 -4.09230193157750364d-05, -3.84822638603221274d-05, -3.60857167535410501d-05, &
2834 -3.37793306123367417d-05, -3.15888560772109621d-05, -2.95269561750807315d-05, &
2835 -2.75978914828335759d-05, -2.58006174666883713d-05, -2.41308356761280200d-05, &
2836 -2.25823509518346033d-05, -2.11479656768912971d-05, -1.98200638885294927d-05, &
2837 -1.85909870801065077d-05, -1.74532699844210224d-05, -1.63997823854497997d-05 /)
2838real(dp),
PARAMETER :: beta4(30) = (/ &
2839 -4.74617796559959808d-04, -4.77864567147321487d-04, -3.20390228067037603d-04, &
2840 -1.61105016119962282d-04, -4.25778101285435204d-05, 3.44571294294967503d-05, &
2841 7.97092684075674924d-05, 1.03138236708272200d-04, 1.12466775262204158d-04, &
2842 1.13103642108481389d-04, 1.08651634848774268d-04, 1.01437951597661973d-04, &
2843 9.29298396593363896d-05, 8.40293133016089978d-05, 7.52727991349134062d-05, &
2844 6.69632521975730872d-05, 5.92564547323194704d-05, 5.22169308826975567d-05, &
2845 4.58539485165360646d-05, 4.01445513891486808d-05, 3.50481730031328081d-05, &
2846 3.05157995034346659d-05, 2.64956119950516039d-05, 2.29363633690998152d-05, &
2847 1.97893056664021636d-05, 1.70091984636412623d-05, 1.45547428261524004d-05, &
2848 1.23886640995878413d-05, 1.04775876076583236d-05, 8.79179954978479373d-06 /)
2849real(dp),
PARAMETER :: beta5(30) = (/ &
2850 7.36465810572578444d-04, 8.72790805146193976d-04, 6.22614862573135066d-04, &
2851 2.85998154194304147d-04, 3.84737672879366102d-06, -1.87906003636971558d-04, &
2852 -2.97603646594554535d-04, -3.45998126832656348d-04, -3.53382470916037712d-04, &
2853 -3.35715635775048757d-04, -3.04321124789039809d-04, -2.66722723047612821d-04, &
2854 -2.27654214122819527d-04, -1.89922611854562356d-04, -1.55058918599093870d-04, &
2855 -1.23778240761873630d-04, -9.62926147717644187d-05, -7.25178327714425337d-05, &
2856 -5.22070028895633801d-05, -3.50347750511900522d-05, -2.06489761035551757d-05, &
2857 -8.70106096849767054d-06, 1.13698686675100290d-06, 9.16426474122778849d-06, &
2858 1.56477785428872620d-05, 2.08223629482466847d-05, 2.48923381004595156d-05, &
2859 2.80340509574146325d-05, 3.03987774629861915d-05, 3.21156731406700616d-05 /)
2860real(dp),
PARAMETER :: beta6(30) = (/ &
2861 -1.80182191963885708d-03, -2.43402962938042533d-03, -1.83422663549856802d-03, &
2862 -7.62204596354009765d-04, 2.39079475256927218d-04, 9.49266117176881141d-04, &
2863 1.34467449701540359d-03, 1.48457495259449178d-03, 1.44732339830617591d-03, &
2864 1.30268261285657186d-03, 1.10351597375642682d-03, 8.86047440419791759d-04, &
2865 6.73073208165665473d-04, 4.77603872856582378d-04, 3.05991926358789362d-04, &
2866 1.60315694594721630d-04, 4.00749555270613286d-05, -5.66607461635251611d-05, &
2867 -1.32506186772982638d-04, -1.90296187989614057d-04, -2.32811450376937408d-04, &
2868 -2.62628811464668841d-04, -2.82050469867598672d-04, -2.93081563192861167d-04, &
2869 -2.97435962176316616d-04, -2.96557334239348078d-04, -2.91647363312090861d-04, &
2870 -2.83696203837734166d-04, -2.73512317095673346d-04, -2.61750155806768580d-04 /)
2871real(dp),
PARAMETER :: beta7(30) = (/ &
2872 6.38585891212050914d-03, 9.62374215806377941d-03, 7.61878061207001043d-03, &
2873 2.83219055545628054d-03, -2.09841352012720090d-03, -5.73826764216626498d-03, &
2874 -7.70804244495414620d-03, -8.21011692264844401d-03, -7.65824520346905413d-03, &
2875 -6.47209729391045177d-03, -4.99132412004966473d-03, -3.45612289713133280d-03, &
2876 -2.01785580014170775d-03, -7.59430686781961401d-04, 2.84173631523859138d-04, &
2877 1.10891667586337403d-03, 1.72901493872728771d-03, 2.16812590802684701d-03, &
2878 2.45357710494539735d-03, 2.61281821058334862d-03, 2.67141039656276912d-03, &
2879 2.65203073395980430d-03, 2.57411652877287315d-03, 2.45389126236094427d-03, &
2880 2.30460058071795494d-03, 2.13684837686712662d-03, 1.95896528478870911d-03, &
2881 1.77737008679454412d-03, 1.59690280765839059d-03, 1.42111975664438546d-03 /)
2882real(dp) :: beta(210)
2883real(dp),
PARAMETER :: gama(30) = (/ &
2884 6.29960524947436582d-01, 2.51984209978974633d-01, 1.54790300415655846d-01, &
2885 1.10713062416159013d-01, 8.57309395527394825d-02, 6.97161316958684292d-02, &
2886 5.86085671893713576d-02, 5.04698873536310685d-02, 4.42600580689154809d-02, &
2887 3.93720661543509966d-02, 3.54283195924455368d-02, 3.21818857502098231d-02, &
2888 2.94646240791157679d-02, 2.71581677112934479d-02, 2.51768272973861779d-02, &
2889 2.34570755306078891d-02, 2.19508390134907203d-02, 2.06210828235646240d-02, &
2890 1.94388240897880846d-02, 1.83810633800683158d-02, 1.74293213231963172d-02, &
2891 1.65685837786612353d-02, 1.57865285987918445d-02, 1.50729501494095594d-02, &
2892 1.44193250839954639d-02, 1.38184805735341786d-02, 1.32643378994276568d-02, &
2893 1.27517121970498651d-02, 1.22761545318762767d-02, 1.18338262398482403d-02 /)
2894real(dp),
PARAMETER :: ex1 = 3.33333333333333333d-01, &
2895 ex2 = 6.66666666666666667d-01, hpi = 1.57079632679489662_dp, &
2896 pi = 3.14159265358979324_dp, thpi = 4.71238898038468986_dp
2897COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp)
2902alfa( 31: 60) = alfa2
2903alfa( 61: 90) = alfa3
2904alfa( 91:120) = alfa4
2905alfa(121:150) = alfa5
2906alfa(151:180) = alfa6
2908beta( 31: 60) = beta2
2909beta( 61: 90) = beta3
2910beta( 91:120) = beta4
2911beta(121:150) = beta5
2912beta(151:180) = beta6
2913beta(181:210) = beta7
2920tstr = real(z, kind=dp)
2922test = tiny(0.0_dp) * 1.0e+3
2924IF (abs(tstr) <= ac .AND. abs(tsti) <= ac)
THEN
2925 ac = 2.0_dp * abs(log(test)) + fnu
2942IF (aw2 > 0.25_dp)
GO TO 110
2954 suma = suma + p(k) * gama(k)
2955 ap(k) = ap(k-1) * aw2
2956 IF (ap(k) < tol)
GO TO 20
2965zeta2 = sqrt(w2) * fnu
2966zeta1 = zeta2 * (cone + zeta*za*ex2)
2968phi = sqrt(za) * rfn13
2975 sumb = sumb + p(k)*beta(k)
2981 btol = tol * (abs(real(bsum)) + abs(aimag(bsum)))
2986 IF (rfnu2 >= tol)
THEN
2994 suma = suma + p(k) * alfa(m)
2995 IF (ap(k) < atol)
EXIT
2997 asum = asum + suma * pp
2998 IF (pp < tol) ias = 1
3004 sumb = sumb + p(k) * beta(m)
3005 IF (ap(k) < atol)
EXIT
3007 bsum = bsum + sumb * pp
3008 IF (pp < btol) ibs = 1
3010 IF (ias == 1 .AND. ibs == 1)
EXIT
3026wr = real(w, kind=dp)
3028IF (wr < 0.0_dp) wr = 0.0_dp
3029IF (wi < 0.0_dp) wi = 0.0_dp
3030w = cmplx(wr, wi, kind=dp)
3033zcr = real(zc, kind=dp)
3035IF (zci < 0.0_dp) zci = 0.0_dp
3036IF (zci > hpi) zci = hpi
3037IF (zcr < 0.0_dp) zcr = 0.0_dp
3038zc = cmplx(zcr, zci, kind=dp)
3039zth = (zc-w) * 1.5_dp
3040cfnu = cmplx(fnu, 0.0_dp, kind=dp)
3044zthr = real(zth, kind=dp)
3047IF (zthr < 0.0_dp .OR. zthi >= 0.0_dp)
THEN
3049 IF (zthr /= 0.0_dp)
THEN
3050 ang = atan(zthi/zthr)
3051 IF (zthr < 0.0_dp) ang = ang + pi
3056zetar = pp * cos(ang)
3057zetai = pp * sin(ang)
3058IF (zetai < 0.0_dp) zetai = 0.0_dp
3059zeta = cmplx(zetar, zetai, kind=dp)
3063phi = sqrt(za+za) * rfn13
3064IF (ipmtr == 1)
GO TO 100
3065tfn = cmplx(rfnu, 0.0_dp, kind=dp) / w
3066rzth = cmplx(rfnu, 0.0_dp, kind=dp) / zth
3069up(2) = (t2*c(2) + c(3)) * tfn
3072IF (rfnu >= tol)
THEN
3077 bsumr = real(bsum, kind=dp)
3079 btol = tol * (abs(bsumr) + abs(bsumi))
3095 za = cmplx(c(l), 0.0_dp, kind=dp)
3102 cr(ks) = przth * br(ks+1)
3103 przth = przth * rzth
3104 dr(ks) = przth * ar(ks+2)
3112 suma = suma + cr(jr) * up(ju)
3115 asumr = real(asum, kind=dp)
3117 test = abs(asumr) + abs(asumi)
3118 IF (pp < tol .AND. test < tol) ias = 1
3121 sumb = up(lr+2) + up(lrp1) * zc
3125 sumb = sumb + dr(jr) * up(ju)
3128 bsumr = real(bsum, kind=dp)
3130 test = abs(bsumr) + abs(bsumi)
3131 IF (pp < btol .AND. test < tol) ibs = 1
3133 IF (ias == 1 .AND. ibs == 1)
GO TO 170
3137170 asum = asum + cone
3138bsum = -bsum * rfn13 / rtzta
3144SUBROUTINE cseri(z, fnu, kode, n, y, nz, tol, elim, alim)
3159COMPLEX (dp),
INTENT(IN) :: z
3160real(dp),
INTENT(IN) :: fnu
3161INTEGER,
INTENT(IN) :: kode
3162INTEGER,
INTENT(IN) :: n
3163COMPLEX (dp),
INTENT(OUT) :: y(n)
3164INTEGER,
INTENT(OUT) :: nz
3165real(dp),
INTENT(IN) :: tol
3166real(dp),
INTENT(IN) :: elim
3167real(dp),
INTENT(IN) :: alim
3169COMPLEX (dp) :: ak1, ck, coef, crsc, cz, hz, rz, s1, s2, w(2)
3170real(dp) :: aa, acz, ak, arm, ascle, atol, az, dfnu, &
3171 fnup, rak1, rs, rtr1, s, ss, x
3172INTEGER :: i, ib, iflag, il, k, l, m, nn, nw
3173real(dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp)
3177IF (az /= 0.0_dp)
THEN
3178 x = real(z, kind=dp)
3179 arm = 1.0d+3 * tiny(0.0_dp)
3181 crsc = cmplx(1.0_dp, 0.0_dp, kind=dp)
3186 IF (az > rtr1) cz = hz * hz
3191 10 dfnu = fnu + (nn-1)
3192 fnup = dfnu + 1.0_dp
3199 IF (kode == 2) ak1 = ak1 - x
3200 rak1 = real(ak1, kind=dp)
3201 IF (rak1 > -elim)
GO TO 30
3205 IF (acz > dfnu)
GO TO 120
3210 30
IF (rak1 <= -alim)
THEN
3213 crsc = cmplx(tol, 0.0_dp, kind=dp)
3218 IF (iflag == 1) aa = aa * ss
3219 coef = aa * cmplx(cos(ak), sin(ak), kind=dp)
3220 atol = tol * acz / fnup
3224 fnup = dfnu + 1.0_dp
3226 IF (acz >= tol*fnup)
THEN
3238 IF (aa > atol)
GO TO 40
3243 IF (iflag /= 0)
THEN
3244 CALL cuchk(s2, nw, ascle, tol)
3245 IF (nw /= 0)
GO TO 20
3248 IF (i /= il) coef = coef * dfnu / hz
3253 rz = (cone+cone) / z
3254 IF (iflag == 1)
GO TO 80
3258 y(k) = cmplx(ak+fnu, 0.0_dp, kind=dp) * rz * y(k+1) + y(k+2)
3273 s2 = s1 + cmplx(ak+fnu, 0.0_dp, kind=dp) * rz * s2
3279 IF (abs(ck) > ascle)
GO TO 100
3288 IF (fnu == 0.0_dp) nz = nz - 1
3291IF (fnu == 0.0_dp) y(1) = cone
3305SUBROUTINE casyi(z, fnu, kode, n, y, nz, rl, tol, elim, alim)
3317COMPLEX (dp),
INTENT(IN) :: z
3318real(dp),
INTENT(IN) :: fnu
3319INTEGER,
INTENT(IN) :: kode
3320INTEGER,
INTENT(IN) :: n
3321COMPLEX (dp),
INTENT(OUT) :: y(n)
3322INTEGER,
INTENT(OUT) :: nz
3323real(dp),
INTENT(IN) :: rl
3324real(dp),
INTENT(IN) :: tol
3325real(dp),
INTENT(IN) :: elim
3326real(dp),
INTENT(IN) :: alim
3328COMPLEX (dp) :: ak1, ck, cs1, cs2, cz, dk, ez, p1, rz, s2
3329real(dp) :: aa, acz, aez, ak, arg, arm, atol, az, bb, bk, dfnu, &
3330 dnu2, fdn, rtr1, s, sgn, sqk, x, yy
3331INTEGER :: i, ib, il, inu, j, jl, k, koded, m, nn
3333real(dp),
PARAMETER :: pi = 3.14159265358979324_dp, rtpi = 0.159154943091895336_dp
3335COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp)
3340arm = 1.0d+3 * tiny(0.0_dp)
3350IF (kode == 2) cz = z - x
3351acz = real(cz, kind=dp)
3352IF (abs(acz) <= elim)
THEN
3355 IF (.NOT.(abs(acz) > alim .AND. n > 2))
THEN
3360 IF (dnu2 > rtr1) fdn = dnu2 * dnu2
3369 jl = int(rl + rl + 2.0_dp)
3372 IF (yy /= 0.0_dp)
THEN
3378 arg = (fnu - inu) * pi
3382 IF (yy < 0.0_dp) bk = -bk
3383 p1 = cmplx(ak, bk, kind=dp)
3384 IF (mod(inu,2) == 1) p1 = -p1
3401 cs1 = cs1 + ck * sgn
3403 aa = aa * abs(sqk) / bb
3407 IF (aa <= atol)
GO TO 20
3412 IF (x+x < elim) s2 = s2 + p1 * cs2 * exp(-z-z)
3413 fdn = fdn + 8.0_dp * dfnu + 4.0_dp
3422 rz = (cone+cone) / z
3425 y(k) = cmplx(ak+fnu, 0.0_dp, kind=dp) * rz * y(k+1) + y(k+2)
3429 IF (koded == 0)
RETURN
3431 y(1:nn) = y(1:nn) * ck
3443SUBROUTINE cbunk(z, fnu, kode, mr, n, y, nz, tol, elim, alim)
3454COMPLEX (dp),
INTENT(IN) :: z
3455real(dp),
INTENT(IN) :: fnu
3456INTEGER,
INTENT(IN) :: kode
3457INTEGER,
INTENT(IN) :: mr
3458INTEGER,
INTENT(IN) :: n
3459COMPLEX (dp),
INTENT(OUT) :: y(n)
3460INTEGER,
INTENT(OUT) :: nz
3461real(dp),
INTENT(IN OUT) :: tol
3462real(dp),
INTENT(IN OUT) :: elim
3463real(dp),
INTENT(IN OUT) :: alim
3465real(dp) :: ax, ay, xx, yy
3468xx = real(z, kind=dp)
3470ax = abs(xx) * 1.7321_dp
3477 CALL cunk1(z, fnu, kode, mr, n, y, nz, tol, elim, alim)
3483 CALL cunk2(z, fnu, kode, mr, n, y, nz, tol, elim, alim)
3490SUBROUTINE cunk1(z, fnu, kode, mr, n, y, nz, tol, elim, alim)
3503COMPLEX (dp),
INTENT(IN) :: z
3504real(dp),
INTENT(IN) :: fnu
3505INTEGER,
INTENT(IN) :: kode
3506INTEGER,
INTENT(IN) :: mr
3507INTEGER,
INTENT(IN) :: n
3508COMPLEX (dp),
INTENT(OUT) :: y(n)
3509INTEGER,
INTENT(OUT) :: nz
3510real(dp),
INTENT(IN) :: tol
3511real(dp),
INTENT(IN) :: elim
3512real(dp),
INTENT(IN) :: alim
3514COMPLEX (dp) :: cfn, ck, crsc, cs, cscl, csgn, cspn, csr(3), css(3), &
3515 cwrk(16,3), cy(2), c1, c2, phi(2), rz, sum(2), s1, s2, &
3516 zeta1(2), zeta2(2), zr, phid, zeta1d, zeta2d, sumd
3517real(dp) :: ang, aphi, asc, ascle, bry(3), cpn, c2i, c2m, c2r, &
3518 fmr, fn, fnf, rs1, sgn, spn, x
3519INTEGER :: i, ib, iflag, ifn, il, init(2), inu, iuf, k, kdflg, kflag, &
3520 kk, m, nw, j, ipard, initd, ic
3521COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp)
3522real(dp),
PARAMETER :: pi = 3.14159265358979324_dp
3538bry(1) = 1.0e+3 * tiny(0.0_dp) / tol
3539bry(2) = 1.0_dp / bry(1)
3540bry(3) = huge(0.0_dp)
3543IF (x < 0.0_dp) zr = -z
3552 CALL cunik(zr, fn, 2, 0, tol, init(j), phi(j), zeta1(j), zeta2(j), sum(j), &
3556 s1 = zeta1(j) - cfn * (cfn/(zr + zeta2(j)))
3558 s1 = zeta1(j) - zeta2(j)
3563 rs1 = real(s1, kind=dp)
3564 IF (abs(rs1) <= elim)
THEN
3565 IF (kdflg == 1) kflag = 2
3566 IF (abs(rs1) >= alim)
THEN
3571 rs1 = rs1 + log(aphi)
3572 IF (abs(rs1) > elim)
GO TO 10
3573 IF (kdflg == 1) kflag = 1
3574 IF (rs1 >= 0.0_dp)
THEN
3575 IF (kdflg == 1) kflag = 3
3582 s2 = phi(j) * sum(j)
3583 c2r = real(s1, kind=dp)
3585 c2m = exp(c2r) * real(css(kflag), kind=dp)
3586 s1 = c2m * cmplx(cos(c2i), sin(c2i), kind=dp)
3588 IF (kflag == 1)
THEN
3589 CALL cuchk(s2, nw, bry(1), tol)
3590 IF (nw /= 0)
GO TO 10
3593 y(i) = s2 * csr(kflag)
3594 IF (kdflg == 2)
GO TO 30
3599 10
IF (rs1 > 0.0_dp)
GO TO 150
3603 IF (x < 0.0_dp)
GO TO 150
3608 IF (y(i-1) /= czero)
THEN
3626 IF (mr /= 0) ipard = 0
3628 CALL cunik(zr, fn, 2, ipard, tol, initd, phid, zeta1d, zeta2d, sumd, &
3632 s1 = zeta1d - cfn * (cfn/(zr + zeta2d))
3634 s1 = zeta1d - zeta2d
3636 rs1 = real(s1, kind=dp)
3637 IF (abs(rs1) <= elim)
THEN
3638 IF (abs(rs1) < alim)
GO TO 50
3643 rs1 = rs1 + log(aphi)
3644 IF (abs(rs1) < elim)
GO TO 50
3646 IF (rs1 > 0.0_dp)
GO TO 150
3650 IF (x < 0.0_dp)
GO TO 150
3669 c2r = real(c2, kind=dp)
3674 IF (c2m > ascle)
THEN
3679 s1 = s1 * css(kflag)
3680 s2 = s2 * css(kflag)
3696csgn = cmplx(0.0_dp, sgn, kind=dp)
3703cspn = cmplx(cpn, spn, kind=dp)
3704IF (mod(ifn,2) == 1) cspn = -cspn
3729 80
IF (.NOT.(kk == n .AND. ib < n))
THEN
3730 IF (kk == ib .OR. kk == ic)
GO TO 70
3734 90
CALL cunik(zr, fn, 1, 0, tol, initd, phid, zeta1d, zeta2d, sumd, &
3738 s1 = -zeta1d + cfn * (cfn/(zr + zeta2d))
3740 s1 = -zeta1d + zeta2d
3745 rs1 = real(s1, kind=dp)
3746 IF (abs(rs1) > elim)
GO TO 110
3747 IF (kdflg == 1) iflag = 2
3748 IF (abs(rs1) >= alim)
THEN
3753 rs1 = rs1 + log(aphi)
3754 IF (abs(rs1) > elim)
GO TO 110
3755 IF (kdflg == 1) iflag = 1
3756 IF (rs1 >= 0.0_dp)
THEN
3757 IF (kdflg == 1) iflag = 3
3760 s2 = csgn * phid * sumd
3761 c2r = real(s1, kind=dp)
3763 c2m = exp(c2r) * real(css(iflag), kind=dp)
3764 s1 = c2m * cmplx(cos(c2i), sin(c2i), kind=dp)
3766 IF (iflag == 1)
THEN
3767 CALL cuchk(s2, nw, bry(1), tol)
3768 IF (nw /= 0) s2 = 0.0_dp
3773 s2 = s2 * csr(iflag)
3779 CALL cs1s2(zr, s1, s2, nw, asc, alim, iuf)
3782 y(kk) = s1 * cspn + s2
3785 IF (c2 == czero)
THEN
3789 IF (kdflg == 2)
GO TO 130
3793 110
IF (rs1 > 0.0_dp)
GO TO 150
3813 s2 = s1 + (fn + fnf) * rz * s2
3820 CALL cs1s2(zr, c1, c2, nw, asc, alim, iuf)
3823 y(kk) = c1 * cspn + c2
3827 c2r = real(ck, kind=dp)
3832 IF (c2m > ascle)
THEN
3837 s1 = s1 * css(iflag)
3838 s2 = s2 * css(iflag)
3851SUBROUTINE cunk2(z, fnu, kode, mr, n, y, nz, tol, elim, alim)
3867COMPLEX (dp),
INTENT(IN) :: z
3868real(dp),
INTENT(IN) :: fnu
3869INTEGER,
INTENT(IN) :: kode
3870INTEGER,
INTENT(IN) :: mr
3871INTEGER,
INTENT(IN) :: n
3872COMPLEX (dp),
INTENT(OUT) :: y(n)
3873INTEGER,
INTENT(OUT) :: nz
3874real(dp),
INTENT(IN) :: tol
3875real(dp),
INTENT(IN) :: elim
3876real(dp),
INTENT(IN) :: alim
3878COMPLEX (dp) :: ai, arg(2), asum(2), bsum(2), cfn, ck, cs, csgn, cspn, &
3879 csr(3), css(3), cy(2), c1, c2, dai, phi(2), rz, s1, s2, &
3880 zb, zeta1(2), zeta2(2), zn, zr, phid, argd, zeta1d, zeta2d, &
3882real(dp) :: aarg, ang, aphi, asc, ascle, bry(3), car, cpn, c2i, &
3883 c2m, c2r, crsc, cscl, fmr, fn, fnf, rs1, sar, sgn, spn, x, yy
3884INTEGER :: i, ib, iflag, ifn, il, in, inu, iuf, k, kdflg, kflag, kk, &
3885 nai, ndai, nw, idum, j, ipard, ic
3886COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp), &
3887 ci = (0.0_dp,1.0_dp), &
3888 cr1 = (1.0_dp, 1.73205080756887729_dp), &
3889 cr2 = (-0.5_dp, -8.66025403784438647d-01)
3890real(dp),
PARAMETER :: hpi = 1.57079632679489662_dp, &
3891 pi = 3.14159265358979324_dp, &
3892 aic = 1.26551212348464539_dp
3893COMPLEX (dp),
PARAMETER :: cip(4) = (/ (1.0_dp,0.0_dp), (0.0_dp,-1.0_dp), &
3894 (-1.0_dp,0.0_dp), (0.0_dp,1.0_dp) /)
3910bry(1) = 1.0e+3 * tiny(0.0_dp) / tol
3911bry(2) = 1.0_dp / bry(1)
3912bry(3) = huge(0.0_dp)
3915IF (x < 0.0_dp) zr = -z
3926c2 = cmplx(-spn, cpn, kind=dp)
3928cs = cr1 * c2 * cip(kk)
3929IF (yy <= 0.0_dp)
THEN
3945 CALL cunhj(zn, fn, 0, tol, phi(j), arg(j), zeta1(j), zeta2(j), asum(j), &
3948 cfn = cmplx(fn, 0.0_dp, kind=dp)
3949 s1 = zeta1(j) - cfn * (cfn/(zb + zeta2(j)))
3951 s1 = zeta1(j) - zeta2(j)
3956 rs1 = real(s1, kind=dp)
3957 IF (abs(rs1) <= elim)
THEN
3958 IF (kdflg == 1) kflag = 2
3959 IF (abs(rs1) >= alim)
THEN
3965 rs1 = rs1 + log(aphi) - 0.25_dp * log(aarg) - aic
3966 IF (abs(rs1) > elim)
GO TO 10
3967 IF (kdflg == 1) kflag = 1
3968 IF (rs1 >= 0.0_dp)
THEN
3969 IF (kdflg == 1) kflag = 3
3977 CALL cairy(c2, 0, 2, ai, nai, idum)
3978 CALL cairy(c2, 1, 2, dai, ndai, idum)
3979 s2 = cs * phi(j) * (ai*asum(j) + cr2*dai*bsum(j))
3980 c2r = real(s1, kind=dp)
3982 c2m = exp(c2r) * real(css(kflag), kind=dp)
3983 s1 = c2m * cmplx(cos(c2i), sin(c2i), kind=dp)
3985 IF (kflag == 1)
THEN
3986 CALL cuchk(s2, nw, bry(1), tol)
3987 IF (nw /= 0)
GO TO 10
3989 IF (yy <= 0.0_dp) s2 = conjg(s2)
3991 y(i) = s2 * csr(kflag)
3993 IF (kdflg == 2)
GO TO 30
3998 10
IF (rs1 > 0.0_dp)
GO TO 150
4002 IF (x < 0.0_dp)
GO TO 150
4008 IF (y(i-1) /= czero)
THEN
4026 IF (mr /= 0) ipard = 0
4027 CALL cunhj(zn, fn, ipard, tol, phid, argd, zeta1d, zeta2d, asumd, bsumd)
4030 s1 = zeta1d - cfn * (cfn/(zb + zeta2d))
4032 s1 = zeta1d - zeta2d
4034 rs1 = real(s1, kind=dp)
4035 IF (abs(rs1) <= elim)
THEN
4036 IF (abs(rs1) < alim)
GO TO 50
4042 rs1 = rs1 + log(aphi) - 0.25_dp * log(aarg) - aic
4043 IF (abs(rs1) < elim)
GO TO 50
4045 IF (rs1 > 0.0_dp)
GO TO 150
4049 IF (x < 0.0_dp)
GO TO 150
4068 c2r = real(c2, kind=dp)
4073 IF (c2m > ascle)
THEN
4078 s1 = s1 * css(kflag)
4079 s2 = s2 * css(kflag)
4095csgn = cmplx(0.0_dp, sgn, kind=dp)
4096IF (yy <= 0.0_dp) csgn = conjg(csgn)
4101cspn = cmplx(cpn, spn, kind=dp)
4102IF (mod(ifn,2) == 1) cspn = -cspn
4109cs = cmplx(car, -sar, kind=dp) * csgn
4136 80
IF (.NOT.(kk == n .AND. ib < n))
THEN
4137 IF (kk == ib .OR. kk == ic)
GO TO 70
4138 CALL cunhj(zn, fn, 0, tol, phid, argd, zeta1d, zeta2d, asumd, bsumd)
4141 90
IF (kode /= 1)
THEN
4143 s1 = -zeta1d + cfn * (cfn/(zb + zeta2d))
4145 s1 = -zeta1d + zeta2d
4150 rs1 = real(s1, kind=dp)
4151 IF (abs(rs1) > elim)
GO TO 110
4152 IF (kdflg == 1) iflag = 2
4153 IF (abs(rs1) >= alim)
THEN
4159 rs1 = rs1 + log(aphi) - 0.25_dp * log(aarg) - aic
4160 IF (abs(rs1) > elim)
GO TO 110
4161 IF (kdflg == 1) iflag = 1
4162 IF (rs1 >= 0.0_dp)
THEN
4163 IF (kdflg == 1) iflag = 3
4166 CALL cairy(argd, 0, 2, ai, nai, idum)
4167 CALL cairy(argd, 1, 2, dai, ndai, idum)
4168 s2 = cs * phid * (ai*asumd + dai*bsumd)
4169 c2r = real(s1, kind=dp)
4171 c2m = exp(c2r) * real(css(iflag), kind=dp)
4172 s1 = c2m * cmplx(cos(c2i), sin(c2i), kind=dp)
4174 IF (iflag == 1)
THEN
4175 CALL cuchk(s2, nw, bry(1), tol)
4176 IF (nw /= 0) s2 = 0.0_dp
4179 100
IF (yy <= 0.0_dp) s2 = conjg(s2)
4182 s2 = s2 * csr(iflag)
4188 CALL cs1s2(zr, s1, s2, nw, asc, alim, iuf)
4191 y(kk) = s1 * cspn + s2
4195 IF (c2 == czero)
THEN
4199 IF (kdflg == 2)
GO TO 130
4203 110
IF (rs1 > 0.0_dp)
GO TO 150
4223 s2 = s1 + cmplx(fn+fnf, 0.0_dp, kind=dp) * rz * s2
4230 CALL cs1s2(zr, c1, c2, nw, asc, alim, iuf)
4233 y(kk) = c1 * cspn + c2
4237 c2r = real(ck, kind=dp)
4242 IF (c2m > ascle)
THEN
4247 s1 = s1 * css(iflag)
4248 s2 = s2 * css(iflag)
4261SUBROUTINE cbuni(z, fnu, kode, n, y, nz, nui, nlast, fnul, tol, elim, alim)
4273COMPLEX (dp),
INTENT(IN) :: z
4274real(dp),
INTENT(IN) :: fnu
4275INTEGER,
INTENT(IN) :: kode
4276INTEGER,
INTENT(IN) :: n
4277COMPLEX (dp),
INTENT(OUT) :: y(n)
4278INTEGER,
INTENT(OUT) :: nz
4279INTEGER,
INTENT(IN) :: nui
4280INTEGER,
INTENT(OUT) :: nlast
4281real(dp),
INTENT(IN) :: fnul
4282real(dp),
INTENT(IN) :: tol
4283real(dp),
INTENT(IN) :: elim
4284real(dp),
INTENT(IN) :: alim
4286COMPLEX (dp) :: cscl, cscr, cy(2), rz, st, s1, s2
4287real(dp) :: ax, ay, dfnu, fnui, gnu, xx, yy, ascle, bry(3), str, sti, &
4289INTEGER :: i, iflag, iform, k, nl, nw
4292xx = real(z, kind=dp)
4294ax = abs(xx) * 1.73205080756887_dp
4297IF (ay > ax) iform = 2
4298IF (nui == 0)
GO TO 40
4307 CALL cuni1(z, gnu, kode, 2, cy, nw, nlast, fnul, tol, elim, alim)
4313 CALL cuni2(z, gnu, kode, 2, cy, nw, nlast, fnul, tol, elim, alim)
4316 IF (nw /= 0)
GO TO 50
4321 bry(1) = 1.0e+3 * tiny(0.0_dp) / tol
4322 bry(2) = 1.0_dp / bry(1)
4328 IF (ay <= bry(1))
THEN
4334 IF (ay >= bry(2))
THEN
4348 s2 = cmplx(dfnu+fnui, 0.0_dp, kind=dp) * rz * s2 + s1
4350 fnui = fnui - 1.0_dp
4353 str = real(st, kind=dp)
4358 IF (stm > ascle)
THEN
4379 s2 = cmplx(fnu+fnui, 0.0_dp, kind=dp) * rz * s2 + s1
4383 fnui = fnui - 1.0_dp
4386 str = real(st, kind=dp)
4391 IF (stm > ascle)
THEN
4409IF (nw == -2) nz = -2
441240
IF (iform /= 2)
THEN
4417 CALL cuni1(z, fnu, kode, n, y, nw, nlast, fnul, tol, elim, alim)
4423 CALL cuni2(z, fnu, kode, n, y, nw, nlast, fnul, tol, elim, alim)
4435SUBROUTINE cuni1(z, fnu, kode, n, y, nz, nlast, fnul, tol, elim, alim)
4451COMPLEX (dp),
INTENT(IN) :: z
4452real(dp),
INTENT(IN) :: fnu
4453INTEGER,
INTENT(IN) :: kode
4454INTEGER,
INTENT(IN) :: n
4455COMPLEX (dp),
INTENT(OUT) :: y(n)
4456INTEGER,
INTENT(OUT) :: nz
4457INTEGER,
INTENT(OUT) :: nlast
4458real(dp),
INTENT(IN) :: fnul
4459real(dp),
INTENT(IN) :: tol
4460real(dp),
INTENT(IN) :: elim
4461real(dp),
INTENT(IN) :: alim
4463COMPLEX (dp) :: cfn, crsc, cscl, csr(3), css(3), c1, c2, cwrk(16), phi, &
4464 rz, sum, s1, s2, zeta1, zeta2, cy(2)
4465real(dp) :: aphi, ascle, bry(3), c2i, c2m, c2r, fn, rs1, yy
4466INTEGER :: i, iflag, init, k, m, nd, nn, nuf, nw
4467COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp)
4477cscl = cmplx(1.0_dp/tol, 0.0_dp, kind=dp)
4485bry(1) = 1.0e+3 * tiny(0.0_dp) / tol
4489fn = max(fnu, 1.0_dp)
4491CALL cunik(z, fn, 1, 1, tol, init, phi, zeta1, zeta2, sum, cwrk)
4494 s1 = -zeta1 + cfn * (cfn/(z + zeta2))
4498rs1 = real(s1, kind=dp)
4499IF (abs(rs1) > elim)
GO TO 70
4505 CALL cunik(z, fn, 1, 0, tol, init, phi, zeta1, zeta2, sum, cwrk)
4509 s1 = -zeta1 + cfn * (cfn/(z+zeta2)) + cmplx(0.0_dp, yy, kind=dp)
4516 rs1 = real(s1, kind=dp)
4517 IF (abs(rs1) > elim)
GO TO 50
4518 IF (i == 1) iflag = 2
4519 IF (abs(rs1) >= alim)
THEN
4524 rs1 = rs1 + log(aphi)
4525 IF (abs(rs1) > elim)
GO TO 50
4526 IF (i == 1) iflag = 1
4527 IF (rs1 >= 0.0_dp)
THEN
4528 IF (i == 1) iflag = 3
4535 c2r = real(s1, kind=dp)
4537 c2m = exp(c2r) * real(css(iflag), kind=dp)
4538 s1 = c2m * cmplx(cos(c2i), sin(c2i), kind=dp)
4540 IF (iflag == 1)
THEN
4541 CALL cuchk(s2, nw, bry(1), tol)
4542 IF (nw /= 0)
GO TO 50
4546 y(m) = s2 * csr(iflag)
4550 bry(2) = 1.0_dp / bry(1)
4551 bry(3) = huge(0.0_dp)
4560 s2 = s1 + cmplx(fnu+fn, 0.0_dp, kind=dp) * rz * s2
4567 c2r = real(c2, kind=dp)
4572 IF (c2m > ascle)
THEN
4577 s1 = s1 * css(iflag)
4578 s2 = s2 * css(iflag)
458950
IF (rs1 <= 0.0_dp)
THEN
4593 IF (nd == 0)
GO TO 40
4594 CALL cuoik(z, fnu, kode, 1, nd, y, nuf, tol, elim, alim)
4598 IF (nd == 0)
GO TO 40
4600 IF (fn >= fnul)
GO TO 10
460970
IF (rs1 > 0.0_dp)
GO TO 60
4617SUBROUTINE cuni2(z, fnu, kode, n, y, nz, nlast, fnul, tol, elim, alim)
4634COMPLEX (dp),
INTENT(IN) :: z
4635real(dp),
INTENT(IN) :: fnu
4636INTEGER,
INTENT(IN) :: kode
4637INTEGER,
INTENT(IN) :: n
4638COMPLEX (dp),
INTENT(OUT) :: y(n)
4639INTEGER,
INTENT(OUT) :: nz
4640INTEGER,
INTENT(OUT) :: nlast
4641real(dp),
INTENT(IN) :: fnul
4642real(dp),
INTENT(IN) :: tol
4643real(dp),
INTENT(IN) :: elim
4644real(dp),
INTENT(IN) :: alim
4646COMPLEX (dp) :: ai, arg, asum, bsum, cfn, cid, crsc, cscl, csr(3), css(3), &
4647 cy(2), c1, c2, dai, phi, rz, s1, s2, zb, zeta1, zeta2, &
4649real(dp) :: aarg, ang, aphi, ascle, ay, bry(3), car, c2i, c2m, &
4650 c2r, fn, rs1, sar, yy
4651INTEGER :: i, iflag, in, inu, j, k, nai, nd, ndai, nn, nuf, nw, idum
4652COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp), &
4653 ci = (0.0_dp,1.0_dp)
4654COMPLEX (dp),
PARAMETER :: cip(4) = (/ (1.0_dp,0.0_dp), (0.0_dp,1.0_dp), &
4655 (-1.0_dp,0.0_dp), (0.0_dp,-1.0_dp) /)
4656real(dp),
PARAMETER :: hpi = 1.57079632679489662_dp, aic = 1.265512123484645396_dp
4666cscl = cmplx(1.0_dp/tol, 0.0_dp, kind=dp)
4674bry(1) = 1.0e+3 * tiny(0.0_dp) / tol
4683ang = hpi * (fnu - inu)
4686c2 = cmplx(car, sar, kind=dp)
4691IF (yy <= 0.0_dp)
THEN
4701CALL cunhj(zn, fn, 1, tol, phi, arg, zeta1, zeta2, asum, bsum)
4704 s1 = -zeta1 + cfn * (cfn/(zb + zeta2))
4708rs1 = real(s1, kind=dp)
4709IF (abs(rs1) > elim)
GO TO 70
4714 CALL cunhj(zn, fn, 0, tol, phi, arg, zeta1, zeta2, asum, bsum)
4718 s1 = -zeta1 + cfn * (cfn/(zb+zeta2)) + cmplx(0.0_dp, ay, kind=dp)
4725 rs1 = real(s1, kind=dp)
4726 IF (abs(rs1) > elim)
GO TO 50
4727 IF (i == 1) iflag = 2
4728 IF (abs(rs1) >= alim)
THEN
4734 rs1 = rs1 + log(aphi) - 0.25_dp * log(aarg) - aic
4735 IF (abs(rs1) > elim)
GO TO 50
4736 IF (i == 1) iflag = 1
4737 IF (rs1 >= 0.0_dp)
THEN
4738 IF (i == 1) iflag = 3
4745 CALL cairy(arg, 0, 2, ai, nai, idum)
4746 CALL cairy(arg, 1, 2, dai, ndai, idum)
4747 s2 = phi * (ai*asum + dai*bsum)
4748 c2r = real(s1, kind=dp)
4750 c2m = exp(c2r) * real(css(iflag), kind=dp)
4751 s1 = c2m * cmplx(cos(c2i), sin(c2i), kind=dp)
4753 IF (iflag == 1)
THEN
4754 CALL cuchk(s2, nw, bry(1), tol)
4755 IF (nw /= 0)
GO TO 50
4757 IF (yy <= 0.0_dp) s2 = conjg(s2)
4761 y(j) = s2 * csr(iflag)
4766 bry(2) = 1.0_dp / bry(1)
4767 bry(3) = huge(0.0_dp)
4776 s2 = s1 + (fnu + fn) * rz * s2
4783 c2r = real(c2, kind=dp)
4788 IF (c2m > ascle)
THEN
4793 s1 = s1 * css(iflag)
4794 s2 = s2 * css(iflag)
480350
IF (rs1 <= 0.0_dp)
THEN
4810 IF (nd == 0)
GO TO 40
4811 CALL cuoik(z, fnu, kode, 1, nd, y, nuf, tol, elim, alim)
4815 IF (nd == 0)
GO TO 40
4817 IF (fn >= fnul)
THEN
4827 IF (yy <= 0.0_dp) c2 = conjg(c2)
483870
IF (rs1 > 0.0_dp)
GO TO 60
4846SUBROUTINE cs1s2(zr, s1, s2, nz, ascle, alim, iuf)
4860COMPLEX (dp),
INTENT(IN) :: zr
4861COMPLEX (dp),
INTENT(IN OUT) :: s1
4862COMPLEX (dp),
INTENT(IN OUT) :: s2
4863INTEGER,
INTENT(OUT) :: nz
4864real(dp),
INTENT(IN) :: ascle
4865real(dp),
INTENT(IN) :: alim
4866INTEGER,
INTENT(IN OUT) :: iuf
4868COMPLEX (dp) :: c1, s1d
4869real(dp) :: aa, aln, as1, as2, xx
4871COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp)
4876aa = real(s1, kind=dp)
4878IF (aa /= 0.0_dp .OR. aln /= 0.0_dp)
THEN
4879 IF (as1 /= 0.0_dp)
THEN
4880 xx = real(zr, kind=dp)
4881 aln = -xx - xx + log(as1)
4885 IF (aln >= -alim)
THEN
4886 c1 = log(s1d) - zr - zr
4894IF (aa > ascle)
RETURN
4904SUBROUTINE cshch(z, csh, cch)
4914COMPLEX (dp),
INTENT(IN OUT) :: z
4915COMPLEX (dp),
INTENT(OUT) :: csh
4916COMPLEX (dp),
INTENT(OUT) :: cch
4918real(dp) :: cchi, cchr, ch, cn, cshi, cshr, sh, sn, x, y
4928csh = cmplx(cshr, cshi, kind=dp)
4931cch = cmplx(cchr, cchi, kind=dp)
4937SUBROUTINE crati(z, fnu, n, cy, tol)
4950COMPLEX (dp),
INTENT(IN) :: z
4951real(dp),
INTENT(IN) :: fnu
4952INTEGER,
INTENT(IN) :: n
4953COMPLEX (dp),
INTENT(OUT) :: cy(n)
4954real(dp),
INTENT(IN) :: tol
4956COMPLEX (dp) :: cdfnu, pt, p1, p2, rz, t1
4957real(dp) :: ak, amagz, ap1, ap2, arg, az, dfnu, fdnu, flam, fnup, &
4958 rap1, rho, test, test1
4959INTEGER :: i, id, idnu, inu, itime, k, kk, magz
4961real(dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp)
4969fnup = max(amagz, fdnu)
4986arg = (ap2+ap2) / (ap1*tol)
5001IF (ap1 <= test)
GO TO 10
5003 ak = abs(t1) * 0.5_dp
5004 flam = ak + sqrt(ak*ak - 1.0_dp)
5005 rho = min(ap2/ap1, flam)
5006 test = test1 * sqrt(rho/(rho*rho - 1.0_dp))
5019 p1 = rz * (cdfnu+t1) * p1 + p2
5023IF (real(p1, kind=dp) == 0.0_dp .AND. aimag(p1) == 0.0_dp)
THEN
5024 p1 = cmplx(tol, tol, kind=dp)
5033 pt = cdfnu + t1 * rz + cy(k+1)
5034 IF (real(pt, kind=dp) == 0.0_dp .AND. aimag(pt) == 0.0_dp)
THEN
5035 pt = cmplx(tol, tol, kind=dp)
5046SUBROUTINE cbknu(z, fnu, kode, n, y, nz, tol, elim, alim)
5055COMPLEX (dp),
INTENT(IN) :: z
5056real(dp),
INTENT(IN) :: fnu
5057INTEGER,
INTENT(IN) :: kode
5058INTEGER,
INTENT(IN) :: n
5059COMPLEX (dp),
INTENT(OUT) :: y(n)
5060INTEGER,
INTENT(OUT) :: nz
5061real(dp),
INTENT(IN) :: tol
5062real(dp),
INTENT(IN) :: elim
5063real(dp),
INTENT(IN) :: alim
5065COMPLEX (dp) :: cch, ck, coef, crsc, cs, cscl, csh, csr(3), css(3), cz, &
5066 f, fmu, p, pt, p1, p2, q, rz, smu, st, s1, s2, zd, celm, &
5068real(dp) :: aa, ak, ascle, a1, a2, bb, bk, bry(3), caz, dnu, dnu2, &
5069 etest, fc, fhs, fk, fks, g1, g2, p2i, p2m, p2r, rk, s, &
5070 tm, t1, t2, xx, yy, helim, elm, xd, yd, alas, as
5071INTEGER :: i, iflag, inu, k, kflag, kk, koded, nw, j, ic, inub
5073INTEGER,
PARAMETER :: kmax = 30
5074real(dp),
PARAMETER :: r1 = 2.0_dp
5075COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp), cone = (1.0_dp,0.0_dp), &
5076 ctwo = (2.0_dp,0.0_dp)
5078real(dp),
PARAMETER :: pi = 3.14159265358979324_dp, &
5079 rthpi = 1.25331413731550025_dp, spi = 1.90985931710274403_dp, &
5080 hpi = 1.57079632679489662_dp, fpi = 1.89769999331517738_dp, &
5081 tth = 6.66666666666666666d-01
5083real(dp),
PARAMETER :: cc(8) = (/ 5.77215664901532861d-01, &
5084 -4.20026350340952355d-02, -4.21977345555443367d-02, 7.21894324666309954d-03, &
5085 -2.15241674114950973d-04, -2.01348547807882387d-05, 1.13302723198169588d-06, &
5086 6.11609510448141582d-09 /)
5088xx = real(z, kind=dp)
5099bry(1) = 1.0e+3 * tiny(0.0_dp) / tol
5100bry(2) = 1.0_dp / bry(1)
5101bry(3) = huge(0.0_dp)
5106inu = int(fnu + 0.5_dp)
5108IF (abs(dnu) /= 0.5_dp)
THEN
5110 IF (abs(dnu) > tol) dnu2 = dnu * dnu
5118 CALL cshch(fmu, csh, cch)
5119 IF (dnu /= 0.0_dp)
THEN
5128 t2 = exp(-gamln(a2))
5129 t1 = 1.0_dp / (t2*fc)
5130 IF (abs(dnu) <= 0.1_dp)
THEN
5140 IF (abs(tm) < tol)
EXIT
5144 g1 = (t1-t2) / (dnu+dnu)
5146 g2 = 0.5_dp * (t1+t2) * fc
5148 f = g1 * cch + smu * g2
5150 p = cmplx(0.5_dp/t2, 0.0_dp, kind=dp) * pt
5151 q = cmplx(0.5_dp/t1, 0.0_dp, kind=dp) / pt
5158 IF (inu <= 0 .AND. n <= 1)
THEN
5162 IF (caz >= tol)
THEN
5163 cz = z * z * 0.25_dp
5164 t1 = 0.25_dp * caz * caz
5166 30 f = (f*ak + p + q) / bk
5173 bk = bk + ak + ak + 1.0_dp
5175 IF (a1 > tol)
GO TO 30
5178 IF (koded == 1)
RETURN
5185 IF (caz >= tol)
THEN
5186 cz = z * z * 0.25_dp
5187 t1 = 0.25_dp * caz * caz
5189 40 f = (f*ak + p + q) / bk
5195 s2 = s2 + ck * (p - f*ak)
5197 bk = bk + ak + ak + 1.0_dp
5199 IF (a1 > tol)
GO TO 40
5202 bk = real(smu, kind=dp)
5205 IF (ak > alim) kflag = 3
5206 p2 = s2 * css(kflag)
5208 s1 = s1 * css(kflag)
5209 IF (koded == 1)
GO TO 100
5222coef = rthpi / sqrt(z)
5225 IF (xx > alim)
GO TO 200
5227 a1 = exp(-xx) * real(css(kflag), kind=dp)
5228 pt = a1 * cmplx(cos(yy), -sin(yy), kind=dp)
523250
IF (abs(dnu) == 0.5_dp)
GO TO 210
5238IF (ak == 0.0_dp)
GO TO 210
5239fhs = abs(0.25_dp - dnu2)
5240IF (fhs == 0.0_dp)
GO TO 210
5247t1 = (digits(0.0_dp) - 1) * log10( real( radix(0.0_dp), kind=dp) ) * 3.321928094_dp
5250t2 = tth * t1 - 6.0_dp
5251IF (xx == 0.0_dp)
THEN
5261 etest = ak / (pi*caz*tol)
5263 IF (etest < 1.0_dp)
GO TO 80
5265 rk = caz + caz + 2.0_dp
5270 bk = rk / (fk+1.0_dp)
5272 a2 = bk * a2 - ak * a1
5275 fks = fks + fk + fk + 2.0_dp
5279 IF (etest < tm)
GO TO 70
5283 70 fk = fk + spi * t1 * sqrt(t2/caz)
5284 fhs = abs(0.25_dp-dnu2)
5290 ak = fpi * ak / (tol*sqrt(a2))
5291 aa = 3.0_dp * t1 / (1.0_dp+caz)
5292 bb = 14.7_dp * t1 / (28.0_dp+caz)
5293 ak = (log(ak) + caz*cos(aa)/(1.0_dp + 0.008_dp*caz)) / cos(bb)
5294 fk = 0.12125_dp * ak * ak / caz + 1.5_dp
5308 a2 = (fks+fk) / (a1+fhs)
5309 rk = 2.0_dp / (fk + 1.0_dp)
5313 p2 = (p2*cmplx(t1, t2, kind=dp) - p1) * a2
5316 fks = a1 - fk + 1.0_dp
5323pt = cmplx(1.0_dp/tm, 0.0_dp, kind=dp)
5327IF (inu <= 0 .AND. n <= 1)
THEN
5329 IF (iflag == 1)
GO TO 190
5336pt = cmplx(1.0_dp/tm, 0.0_dp, kind=dp)
5340s2 = s1 * (cone + (cmplx(dnu+0.5_dp, 0.0_dp, kind=dp) - pt)/z)
5345100 ck = cmplx(dnu+1.0_dp, 0.0_dp, kind=dp) * rz
5346IF (n == 1) inu = inu - 1
5350 IF (iflag == 1)
GO TO 190
5354IF (iflag == 1)
GO TO 160
5365 p2r = real(p2, kind=dp)
5370 IF (p2m > ascle)
THEN
5375 s1 = s1 * css(kflag)
5376 s2 = s2 * css(kflag)
5383130 y(1) = s1 * csr(kflag)
5385y(2) = s2 * csr(kflag)
5401 p2r = real(p2, kind=dp)
5406 IF (p2m > ascle)
THEN
5411 s1 = s1 * css(kflag)
5412 s2 = s2 * css(kflag)
5421160 helim = 0.5_dp * elim
5438 IF (p2r >= -elim)
THEN
5440 p2r = real(p2, kind=dp)
5442 p2m = exp(p2r) / tol
5443 p1 = p2m * cmplx(cos(p2i), sin(p2i), kind=dp)
5444 CALL cuchk(p1, nw, ascle, tol)
5448 IF (ic == i-1)
GO TO 180
5453 IF (alas >= helim)
THEN
5457 zd = cmplx(xd, yd, kind=dp)
5468IF (inub <= inu)
GO TO 110
5477CALL ckscl(zd, fnu, n, y, nz, rz, ascle, tol, elim)
5512SUBROUTINE ckscl(zr, fnu, n, y, nz, rz, ascle, tol, elim)
5523COMPLEX (dp),
INTENT(IN) :: zr
5524real(dp),
INTENT(IN) :: fnu
5525INTEGER,
INTENT(IN) :: n
5526COMPLEX (dp),
INTENT(OUT) :: y(n)
5527INTEGER,
INTENT(OUT) :: nz
5528COMPLEX (dp),
INTENT(IN) :: rz
5529real(dp),
INTENT(IN OUT) :: ascle
5530real(dp),
INTENT(IN) :: tol
5531real(dp),
INTENT(IN) :: elim
5533COMPLEX (dp) :: ck, cs, cy(2), s1, s2, zd, celm
5534real(dp) :: aa, acs, as, csi, csr, fn, xx, zri, elm, alas, helim
5535INTEGER :: i, ic, kk, nn, nw
5536COMPLEX (dp),
PARAMETER :: czero = (0.0_dp,0.0_dp)
5540xx = real(zr, kind=dp)
5549 IF (acs >= -elim)
THEN
5551 csr = real(cs, kind=dp)
5554 cs = aa * cmplx(cos(csi), sin(csi), kind=dp)
5555 CALL cuchk(cs, nw, ascle, tol)
5574helim = 0.5_dp * elim
5594 IF (acs >= -elim)
THEN
5596 csr = real(cs, kind=dp)
5599 cs = aa * cmplx(cos(csi), sin(csi), kind=dp)
5600 CALL cuchk(cs, nw, ascle, tol)
5604 IF (ic == kk-1)
GO TO 30
5609 IF (alas >= helim)
THEN
5613 zd = cmplx(xx, zri, kind=dp)
5617IF (ic == n) nz = n - 1
5628SUBROUTINE cacon(z, fnu, kode, mr, n, y, nz, rl, fnul, tol, elim, alim)
5643COMPLEX (dp),
INTENT(IN) :: z
5644real(dp),
INTENT(IN) :: fnu
5645INTEGER,
INTENT(IN) :: kode
5646INTEGER,
INTENT(IN) :: mr
5647INTEGER,
INTENT(IN) :: n
5648COMPLEX (dp),
INTENT(OUT) :: y(n)
5649INTEGER,
INTENT(OUT) :: nz
5650real(dp),
INTENT(IN OUT) :: rl
5651real(dp),
INTENT(IN OUT) :: fnul
5652real(dp),
INTENT(IN) :: tol
5653real(dp),
INTENT(IN OUT) :: elim
5654real(dp),
INTENT(IN OUT) :: alim
5656COMPLEX (dp) :: ck, cs, cscl, cscr, csgn, cspn, css(3), csr(3), c1, c2, &
5657 rz, sc1, sc2, st, s1, s2, zn, cy(2)
5658real(dp) :: arg, ascle, as2, bscle, bry(3), cpn, c1i, c1m, c1r, &
5660INTEGER :: i, inu, iuf, kflag, nn, nw
5661real(dp),
PARAMETER :: pi = 3.14159265358979324_dp
5662COMPLEX (dp),
PARAMETER :: cone = (1.0_dp, 0.0_dp)
5667CALL cbinu(zn, fnu, kode, nn, y, nw, rl, fnul, tol, elim, alim)
5673 CALL cbknu(zn, fnu, kode, nn, cy, nw, tol, elim, alim)
5677 sgn = -sign(pi, fmr)
5678 csgn = cmplx(0.0_dp, sgn, kind=dp)
5683 csgn = csgn * cmplx(cpn, spn, kind=dp)
5690 arg = (fnu - inu) * sgn
5693 cspn = cmplx(cpn, spn, kind=dp)
5694 IF (mod(inu, 2) == 1) cspn = -cspn
5698 ascle = 1.0e+3 * tiny(0.0_dp) / tol
5700 CALL cs1s2(zn, c1, c2, nw, ascle, alim, iuf)
5704 y(1) = cspn * c1 + csgn * c2
5711 CALL cs1s2(zn, c1, c2, nw, ascle, alim, iuf)
5715 y(2) = cspn * c1 + csgn * c2
5719 ck = cmplx(fnu+1.0_dp, 0.0_dp, kind=dp) * rz
5732 bry(2) = 1.0_dp / ascle
5733 bry(3) = huge(0.0_dp)
5736 IF (as2 <= bry(1))
THEN
5739 IF (as2 >= bry(2))
THEN
5744 s1 = s1 * css(kflag)
5745 s2 = s2 * css(kflag)
5756 CALL cs1s2(zn, c1, c2, nw, ascle, alim, iuf)
5762 s1 = sc1 * css(kflag)
5763 s2 = sc2 * css(kflag)
5768 y(i) = cspn * c1 + csgn * c2
5772 c1r = real(c1, kind=dp)
5777 IF (c1m > bscle)
THEN
5782 s1 = s1 * css(kflag)
5783 s2 = s2 * css(kflag)
5792IF (nw == -2) nz = -2
5798SUBROUTINE cbinu(z, fnu, kode, n, cy, nz, rl, fnul, tol, elim, alim)
5807COMPLEX (dp),
INTENT(IN) :: z
5808real(dp),
INTENT(IN) :: fnu
5809INTEGER,
INTENT(IN) :: kode
5810INTEGER,
INTENT(IN) :: n
5811COMPLEX (dp),
INTENT(OUT) :: cy(n)
5812INTEGER,
INTENT(OUT) :: nz
5813real(dp),
INTENT(IN) :: rl
5814real(dp),
INTENT(IN) :: fnul
5815real(dp),
INTENT(IN) :: tol
5816real(dp),
INTENT(IN) :: elim
5817real(dp),
INTENT(IN) :: alim
5819COMPLEX (dp) :: cw(2)
5821INTEGER :: inw, nlast, nn, nui, nw
5822COMPLEX (dp),
PARAMETER :: czero = (0.0_dp, 0.0_dp)
5829IF (az > 2.0_dp)
THEN
5830 IF (az*az*0.25_dp > dfnu+1.0_dp)
GO TO 10
5835CALL cseri(z, fnu, kode, nn, cy, nw, tol, elim, alim)
5840IF (nw >= 0)
GO TO 80
584310
IF (az >= rl)
THEN
5844 IF (dfnu > 1.0_dp)
THEN
5845 IF (az+az < dfnu*dfnu)
GO TO 20
5850 CALL casyi(z, fnu, kode, nn, cy, nw, rl, tol, elim, alim)
5851 IF (nw < 0)
GO TO 90
5854IF (dfnu <= 1.0_dp)
GO TO 40
585820
CALL cuoik(z, fnu, kode, 1, nn, cy, nw, tol, elim, alim)
5864IF (dfnu > fnul)
GO TO 70
5865IF (az > fnul)
GO TO 70
586730
IF (az > rl)
GO TO 50
587140
CALL cmlri(z, fnu, kode, nn, cy, nw, tol)
587950
CALL cuoik(z, fnu, kode, 2, 2, cw, nw, tol, elim, alim)
5886CALL cwrsk(z, fnu, kode, nn, cy, nw, cw, tol, elim, alim)
589270 nui = int(fnul - dfnu + 1.0_dp)
5894CALL cbuni(z, fnu, kode, nn, cy, nw, nui, nlast, fnul, tol, elim, alim)
5905IF (nw == -2) nz = -2
5911FUNCTION gamln(z)
RESULT(fn_val)
5951real(dp),
INTENT(IN) :: z
5954INTEGER :: i, i1m, k, mz, nz
5955real(dp) :: fln, fz, rln, s, tlg, trm, tst, t1, wdtol, &
5956 zdmy, zinc, zm, zmin, zp, zsq
5959real(dp),
PARAMETER :: gln(100) = (/ 0.00000000000000000_dp, &
5960 0.00000000000000000_dp, 6.93147180559945309d-01, 1.79175946922805500_dp, &
5961 3.17805383034794562_dp, 4.78749174278204599_dp, 6.57925121201010100_dp, &
5962 8.52516136106541430_dp, 1.06046029027452502d+01, 1.28018274800814696d+01, &
5963 1.51044125730755153d+01, 1.75023078458738858d+01, 1.99872144956618861d+01, &
5964 2.25521638531234229d+01, 2.51912211827386815d+01, 2.78992713838408916d+01, &
5965 3.06718601060806728d+01, 3.35050734501368889d+01, 3.63954452080330536d+01, &
5966 3.93398841871994940d+01, 4.23356164607534850d+01, 4.53801388984769080d+01, &
5967 4.84711813518352239d+01, 5.16066755677643736d+01, 5.47847293981123192d+01, &
5968 5.80036052229805199d+01, 6.12617017610020020d+01, 6.45575386270063311d+01, &
5969 6.78897431371815350d+01, 7.12570389671680090d+01, 7.46582363488301644d+01, &
5970 7.80922235533153106d+01, 8.15579594561150372d+01, 8.50544670175815174d+01, &
5971 8.85808275421976788d+01, 9.21361756036870925d+01, 9.57196945421432025d+01, &
5972 9.93306124547874269d+01, 1.02968198614513813d+02, 1.06631760260643459d+02, &
5973 1.10320639714757395d+02, 1.14034211781461703d+02, 1.17771881399745072d+02, &
5974 1.21533081515438634d+02, 1.25317271149356895d+02, 1.29123933639127215d+02, &
5975 1.32952575035616310d+02, 1.36802722637326368d+02, 1.40673923648234259d+02, &
5976 1.44565743946344886d+02, 1.48477766951773032d+02, 1.52409592584497358d+02, &
5977 1.56360836303078785d+02, 1.60331128216630907d+02, 1.64320112263195181d+02, &
5978 1.68327445448427652d+02, 1.72352797139162802d+02, 1.76395848406997352d+02, &
5979 1.80456291417543771d+02, 1.84533828861449491d+02, 1.88628173423671591d+02, &
5980 1.92739047287844902d+02, 1.96866181672889994d+02, 2.01009316399281527d+02, &
5981 2.05168199482641199d+02, 2.09342586752536836d+02, 2.13532241494563261d+02, &
5982 2.17736934113954227d+02, 2.21956441819130334d+02, 2.26190548323727593d+02, &
5983 2.30439043565776952d+02, 2.34701723442818268d+02, 2.38978389561834323d+02, &
5984 2.43268849002982714d+02, 2.47572914096186884d+02, 2.51890402209723194d+02, &
5985 2.56221135550009525d+02, 2.60564940971863209d+02, 2.64921649798552801d+02, &
5986 2.69291097651019823d+02, 2.73673124285693704d+02, 2.78067573440366143d+02, &
5987 2.82474292687630396d+02, 2.86893133295426994d+02, 2.91323950094270308d+02, &
5988 2.95766601350760624d+02, 3.00220948647014132d+02, 3.04686856765668715d+02, &
5989 3.09164193580146922d+02, 3.13652829949879062d+02, 3.18152639620209327d+02, &
5990 3.22663499126726177d+02, 3.27185287703775217d+02, 3.31717887196928473d+02, &
5991 3.36261181979198477d+02, 3.40815058870799018d+02, 3.45379407062266854d+02, &
5992 3.49954118040770237d+02, 3.54539085519440809d+02, 3.59134205369575399d+02 /)
5995real(dp),
PARAMETER :: cf(22) = (/ &
5996 8.33333333333333333d-02, -2.77777777777777778d-03, &
5997 7.93650793650793651d-04, -5.95238095238095238d-04, &
5998 8.41750841750841751d-04, -1.91752691752691753d-03, &
5999 6.41025641025641026d-03, -2.95506535947712418d-02, &
6000 1.79644372368830573d-01, -1.39243221690590112_dp, &
6001 1.34028640441683920d+01, -1.56848284626002017d+02, &
6002 2.19310333333333333d+03, -3.61087712537249894d+04, &
6003 6.91472268851313067d+05, -1.52382215394074162d+07, &
6004 3.82900751391414141d+08, -1.08822660357843911d+10, &
6005 3.47320283765002252d+11, -1.23696021422692745d+13, &
6006 4.88788064793079335d+14, -2.13203339609193739d+16 /)
6009real(dp),
PARAMETER :: con = 1.83787706640934548_dp
6013 IF (z <= 101.0_dp)
THEN
6016 IF (fz <= 0.0_dp)
THEN
6023 wdtol = epsilon(0.0_dp)
6024 wdtol = max(wdtol, 0.5d-18)
6025 i1m = digits(0.0_dp)
6026 rln = log10( real( radix(0.0_dp), kind=dp) ) * i1m
6027 fln = min(rln,20.0_dp)
6028 fln = max(fln,3.0_dp)
6030 zm = 1.8000_dp + 0.3875_dp * fln
6031 mz = int(zm + 1.0_dp)
6042 IF (zp >= wdtol)
THEN
6048 IF (abs(trm) < tst)
EXIT
6053 IF (zinc == 0.0_dp)
THEN
6055 fn_val = z * (tlg-1.0_dp) + 0.5_dp * (con-tlg) + s
6061 zp = zp * (z + (i-1))
6064 fn_val = zdmy * (tlg-1.0_dp) - log(zp) + 0.5_dp * (con-tlg) + s
6068WRITE(*, *)
'** ERROR: Zero or -ve argument for function GAMLN **'
6075SUBROUTINE cuchk(y, nz, ascle, tol)
6089COMPLEX (dp),
INTENT(IN) :: y
6090INTEGER,
INTENT(OUT) :: nz
6091real(dp),
INTENT(IN) :: ascle
6092real(dp),
INTENT(IN) :: tol
6094real(dp) :: ss, st, yr, yi
6097yr = real(y, kind=dp)
6102IF (st > ascle)
RETURN
6111SUBROUTINE cacai(z, fnu, kode, mr, n, y, nz, rl, tol, elim, alim)
6129COMPLEX (dp),
INTENT(IN) :: z
6130real(dp),
INTENT(IN) :: fnu
6131INTEGER,
INTENT(IN) :: kode
6132INTEGER,
INTENT(IN OUT) :: mr
6133INTEGER,
INTENT(IN) :: n
6134COMPLEX (dp),
INTENT(OUT) :: y(n)
6135INTEGER,
INTENT(OUT) :: nz
6136real(dp),
INTENT(IN) :: rl
6137real(dp),
INTENT(IN) :: tol
6138real(dp),
INTENT(IN) :: elim
6139real(dp),
INTENT(IN) :: alim
6141COMPLEX (dp) :: csgn, cspn, c1, c2, zn, cy(2)
6142real(dp) :: arg, ascle, az, cpn, dfnu, fmr, sgn, spn, yy
6143INTEGER :: inu, iuf, nn, nw
6144real(dp),
PARAMETER :: pi = 3.14159265358979324_dp
6151IF (az > 2.0_dp)
THEN
6152 IF (az*az*0.25_dp > dfnu+1.0_dp)
GO TO 10
6157CALL cseri(zn, fnu, kode, nn, y, nw, tol, elim, alim)
616010
IF (az >= rl)
THEN
6164 CALL casyi(zn, fnu, kode, nn, y, nw, rl, tol, elim, alim)
6165 IF (nw < 0)
GO TO 30
6170 CALL cmlri(zn, fnu, kode, nn, y, nw, tol)
6171 IF (nw < 0)
GO TO 30
617620
CALL cbknu(zn, fnu, kode, 1, cy, nw, tol, elim, alim)
6179 sgn = -sign(pi, fmr)
6180 csgn = cmplx(0.0_dp, sgn, kind=dp)
6185 csgn = csgn * cmplx(cpn, spn, kind=dp)
6192 arg = (fnu - inu) * sgn
6195 cspn = cmplx(cpn, spn, kind=dp)
6196 IF (mod(inu,2) == 1) cspn = -cspn
6201 ascle = 1.0e+3 * tiny(0.0_dp) / tol
6202 CALL cs1s2(zn, c1, c2, nw, ascle, alim, iuf)
6205 y(1) = cspn * c1 + csgn * c2
6210IF (nw == -2) nz = -2
6214END Module complex_bessel