Blame view

fvn_fnlib/aide.f 5.9 KB
38581db0c   daniau   git-svn-id: https...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
        function aide (x)
  c july 1980 edition.  w. fullerton, bell labs.
  c
  c evaluate the derivative of the airy function for x .le. 0
  c and evaluate aid(x)*exp(zeta) for x .ge. 0 where
  c    zeta = 2/3 * x**(3/2)
  c
        dimension aifcs(8), aigcs(9), aip1cs(25), aip2cs(15)
        external  csevl, inits, r1mach
  c
  c series for aif on the interval -1.00000e+00 to  1.00000e+00
  c                                        with weighted error   5.22e-18
  c                                         log weighted error  17.28
  c                               significant figures required  16.01
  c                                    decimal places required  17.73
  c
        data aifcs(  1) /     0.1052746122 6531408809 e0/
        data aifcs(  2) /     0.0118361362 8152997844 e0/
        data aifcs(  3) /     0.0001232810 4173225664 e0/
        data aifcs(  4) /     0.0000006226 1225638140 e0/
        data aifcs(  5) /     0.0000000018 5298887844 e0/
        data aifcs(  6) /     0.0000000000 0363328873 e0/
        data aifcs(  7) /     0.0000000000 0000504622 e0/
        data aifcs(  8) /     0.0000000000 0000000522 e0/
  c
  c series for aig on the interval -1.00000e+00 to  1.00000e+00
  c                                        with weighted error   3.14e-19
  c                                         log weighted error  18.50
  c                               significant figures required  17.44
  c                                    decimal places required  18.98
  c
        data aigcs(  1) /     0.0212338781 5091866685 2e0/
        data aigcs(  2) /     0.0863159303 3521440675 2e0/
        data aigcs(  3) /     0.0017975947 2038323135 8e0/
        data aigcs(  4) /     0.0000142654 9987555069 3e0/
        data aigcs(  5) /     0.0000000594 3799528368 3e0/
        data aigcs(  6) /     0.0000000001 5240336647 9e0/
        data aigcs(  7) /     0.0000000000 0026458766 0e0/
        data aigcs(  8) /     0.0000000000 0000033156 2e0/
        data aigcs(  9) /     0.0000000000 0000000031 4e0/
  c
  c series for aip2 on the interval  0.00000e+00 to  1.25000e-01
  c                                        with weighted error   2.15e-17
  c                                         log weighted error  16.67
  c                               significant figures required  14.27
  c                                    decimal places required  17.26
  c
        data aip2cs(  1) /     0.0065457691 989713757 e0/
        data aip2cs(  2) /     0.0023833724 120774592 e0/
        data aip2cs(  3) /    -0.0000430700 770220586 e0/
        data aip2cs(  4) /     0.0000015629 125858629 e0/
        data aip2cs(  5) /    -0.0000000815 417186163 e0/
        data aip2cs(  6) /     0.0000000054 103738057 e0/
        data aip2cs(  7) /    -0.0000000004 284130883 e0/
        data aip2cs(  8) /     0.0000000000 389497963 e0/
        data aip2cs(  9) /    -0.0000000000 039623161 e0/
        data aip2cs( 10) /     0.0000000000 004428184 e0/
        data aip2cs( 11) /    -0.0000000000 000536297 e0/
        data aip2cs( 12) /     0.0000000000 000069650 e0/
        data aip2cs( 13) /    -0.0000000000 000009620 e0/
        data aip2cs( 14) /     0.0000000000 000001403 e0/
        data aip2cs( 15) /    -0.0000000000 000000215 e0/
  c
  c series for aip1 on the interval  1.25000e-01 to  1.00000e+00
  c                                        with weighted error   2.60e-17
  c                                         log weighted error  16.58
  c                               significant figures required  14.91
  c                                    decimal places required  17.28
  c
        data aip1cs(  1) /     0.0358865097 808301538 e0/
        data aip1cs(  2) /     0.0114668575 627764899 e0/
        data aip1cs(  3) /    -0.0007592073 583861400 e0/
        data aip1cs(  4) /     0.0000869517 610893841 e0/
        data aip1cs(  5) /    -0.0000128237 294298592 e0/
        data aip1cs(  6) /     0.0000022062 695681038 e0/
        data aip1cs(  7) /    -0.0000004222 295185921 e0/
        data aip1cs(  8) /     0.0000000874 686415726 e0/
        data aip1cs(  9) /    -0.0000000192 773588418 e0/
        data aip1cs( 10) /     0.0000000044 668460054 e0/
        data aip1cs( 11) /    -0.0000000010 790108052 e0/
        data aip1cs( 12) /     0.0000000002 700029447 e0/
        data aip1cs( 13) /    -0.0000000000 696480108 e0/
        data aip1cs( 14) /     0.0000000000 184489907 e0/
        data aip1cs( 15) /    -0.0000000000 050027817 e0/
        data aip1cs( 16) /     0.0000000000 013852243 e0/
        data aip1cs( 17) /    -0.0000000000 003908218 e0/
        data aip1cs( 18) /     0.0000000000 001121536 e0/
        data aip1cs( 19) /    -0.0000000000 000326862 e0/
        data aip1cs( 20) /     0.0000000000 000096619 e0/
        data aip1cs( 21) /    -0.0000000000 000028935 e0/
        data aip1cs( 22) /     0.0000000000 000008770 e0/
        data aip1cs( 23) /    -0.0000000000 000002688 e0/
        data aip1cs( 24) /     0.0000000000 000000832 e0/
        data aip1cs( 25) /    -0.0000000000 000000260 e0/
  c
        data naif, naig, naip1, naip2 / 4*0 /
        data x2sml, x3sml, x32sml, xbig / 4*0.0 /
  c
        if (naif.ne.0) go to 10
        eta = 0.1*r1mach(3)
        naif = inits (aifcs, 8, eta)
        naig = inits (aigcs, 9, eta)
        naip1 = inits (aip1cs, 25, eta)
        naip2 = inits (aip2cs, 15, eta)
  c
        x2sml = sqrt (eta)
        x3sml = eta**0.3333
        x32sml = 1.3104*x3sml**2
        xbig = r1mach(2)**0.6666
  c
   10   if (x.ge.(-1.0)) go to 20
        call r9admp (x, xn, phi)
        aide = xn * cos(phi)
        return
  c
   20   if (x.gt.1.0) go to 30
        x3 = 0.0
        if (abs(x).gt.x3sml) x3 = x**3
        x2 = 0.0
        if (abs(x).gt.x2sml) x2 = x*x
        aide = (x2*(0.125 + csevl (x3, aifcs, naif)) -
       1  csevl (x3, aigcs, naig)) - 0.25
        if (x.gt.x32sml) aide = aide * exp (2.0*x*sqrt(x)/3.0)
        return
  c
   30   if (x.gt.4.0) go to 40
        sqrtx = sqrt(x)
        z = (16.0/(x*sqrtx) - 9.0)/7.0
        aide = (-0.28125 - csevl (z, aip1cs, naip1)) * sqrt(sqrtx)
        return
  c
   40   sqrtx = sqrt(x)
        z = -1.0
        if (x.lt.xbig) z = 16.0/(x*sqrtx) - 1.0
        aide = (-0.28125 - csevl (z, aip2cs, naip2)) * sqrt(sqrtx)
        return
  c
        end