besi1e.f 4.78 KB
function besi1e (x)
c oct 1983 version.  w. fullerton, c3, los alamos scientific lab.
      dimension bi1cs(11), ai1cs(21), ai12cs(22)
      external csevl, inits, r1mach
c
c series for bi1        on the interval  0.          to  9.00000d+00
c                                        with weighted error   2.40e-17
c                                         log weighted error  16.62
c                               significant figures required  16.23
c                                    decimal places required  17.14
c
      data bi1 cs( 1) /   -.0019717132 61099859e0 /
      data bi1 cs( 2) /    .4073488766 7546481e0 /
      data bi1 cs( 3) /    .0348389942 99959456e0 /
      data bi1 cs( 4) /    .0015453945 56300123e0 /
      data bi1 cs( 5) /    .0000418885 21098377e0 /
      data bi1 cs( 6) /    .0000007649 02676483e0 /
      data bi1 cs( 7) /    .0000000100 42493924e0 /
      data bi1 cs( 8) /    .0000000000 99322077e0 /
      data bi1 cs( 9) /    .0000000000 00766380e0 /
      data bi1 cs(10) /    .0000000000 00004741e0 /
      data bi1 cs(11) /    .0000000000 00000024e0 /
c
c series for ai1        on the interval  1.25000d-01 to  3.33333d-01
c                                        with weighted error   6.98e-17
c                                         log weighted error  16.16
c                               significant figures required  14.53
c                                    decimal places required  16.82
c
      data ai1 cs( 1) /   -.0284674418 1881479e0 /
      data ai1 cs( 2) /   -.0192295323 1443221e0 /
      data ai1 cs( 3) /   -.0006115185 8579437e0 /
      data ai1 cs( 4) /   -.0000206997 1253350e0 /
      data ai1 cs( 5) /    .0000085856 1914581e0 /
      data ai1 cs( 6) /    .0000010494 9824671e0 /
      data ai1 cs( 7) /   -.0000002918 3389184e0 /
      data ai1 cs( 8) /   -.0000000155 9378146e0 /
      data ai1 cs( 9) /    .0000000131 8012367e0 /
      data ai1 cs(10) /   -.0000000014 4842341e0 /
      data ai1 cs(11) /   -.0000000002 9085122e0 /
      data ai1 cs(12) /    .0000000001 2663889e0 /
      data ai1 cs(13) /   -.0000000000 1664947e0 /
      data ai1 cs(14) /   -.0000000000 0166665e0 /
      data ai1 cs(15) /    .0000000000 0124260e0 /
      data ai1 cs(16) /   -.0000000000 0027315e0 /
      data ai1 cs(17) /    .0000000000 0002023e0 /
      data ai1 cs(18) /    .0000000000 0000730e0 /
      data ai1 cs(19) /   -.0000000000 0000333e0 /
      data ai1 cs(20) /    .0000000000 0000071e0 /
      data ai1 cs(21) /   -.0000000000 0000006e0 /
c
c series for ai12       on the interval  0.          to  1.25000d-01
c                                        with weighted error   3.55e-17
c                                         log weighted error  16.45
c                               significant figures required  14.69
c                                    decimal places required  17.12
c
      data ai12cs( 1) /    .0285762350 1828014e0 /
      data ai12cs( 2) /   -.0097610974 9136147e0 /
      data ai12cs( 3) /   -.0001105889 3876263e0 /
      data ai12cs( 4) /   -.0000038825 6480887e0 /
      data ai12cs( 5) /   -.0000002512 2362377e0 /
      data ai12cs( 6) /   -.0000000263 1468847e0 /
      data ai12cs( 7) /   -.0000000038 3538039e0 /
      data ai12cs( 8) /   -.0000000005 5897433e0 /
      data ai12cs( 9) /   -.0000000000 1897495e0 /
      data ai12cs(10) /    .0000000000 3252602e0 /
      data ai12cs(11) /    .0000000000 1412580e0 /
      data ai12cs(12) /    .0000000000 0203564e0 /
      data ai12cs(13) /   -.0000000000 0071985e0 /
      data ai12cs(14) /   -.0000000000 0040836e0 /
      data ai12cs(15) /   -.0000000000 0002101e0 /
      data ai12cs(16) /    .0000000000 0004273e0 /
      data ai12cs(17) /    .0000000000 0001041e0 /
      data ai12cs(18) /   -.0000000000 0000382e0 /
      data ai12cs(19) /   -.0000000000 0000186e0 /
      data ai12cs(20) /    .0000000000 0000033e0 /
      data ai12cs(21) /    .0000000000 0000028e0 /
      data ai12cs(22) /   -.0000000000 0000003e0 /
c
      data nti1, ntai1, ntai12, xmin, xsml / 3*0, 2*0. /
c
      if (nti1.ne.0) go to 10
      nti1 = inits (bi1cs, 11, 0.1*r1mach(3))
      ntai1 = inits (ai1cs, 21, 0.1*r1mach(3))
      ntai12 = inits (ai12cs, 22, 0.1*r1mach(3))
c
      xmin = 2.0*r1mach(1)
      xsml = sqrt (8.0*r1mach(3))
c
 10   y = abs(x)
      if (y.gt.3.0) go to 20
c
      besi1e = 0.0
      if (y.eq.0.0) return
c
      if (y.le.xmin) call seteru (
     1  37hbesi1e  abs(x) so small i1 underflows, 37, 1, 0)
      besi1e = 0.0
      if (y.gt.xmin) besi1e = 0.5*x
      if (y.gt.xsml) besi1e = x * (.875 + csevl(y*y/4.5-1., bi1cs,nti1))
      besi1e = exp(-y) * besi1e
      return
c
 20   if (y.le.8.) besi1e = (.375 + csevl ((48./y-11.)/5., ai1cs, ntai1)
     1  ) / sqrt(y)
      if (y.gt.8.) besi1e = (.375 + csevl (16./y-1.0, ai12cs, ntai12))
     1  / sqrt(y)
      besi1e = sign (besi1e, x)
c
      return
      end