]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1996/04/01 15:02:03 mclareni | |
6 | * Mathlib gen | |
7 | * | |
8 | * | |
9 | #include "gen/pilot.h" | |
10 | #if !defined(CERNLIB_DOUBLE) | |
11 | FUNCTION BSIR4(X,NU) | |
12 | #endif | |
13 | #if defined(CERNLIB_DOUBLE) | |
14 | FUNCTION DBSIR4(X,NU) | |
15 | #include "gen/imp64.inc" | |
16 | #endif | |
17 | CHARACTER*80 ERRTXT | |
18 | CHARACTER NAMEI*(*),NAMEK*(*),NAMEIE*(*),NAMEKE*(*) | |
19 | #if !defined(CERNLIB_DOUBLE) | |
20 | PARAMETER (NAMEI = 'BSIR4/DBSIR4', NAMEIE = 'EBSIR4/DEBIR4') | |
21 | PARAMETER (NAMEK = 'BSKR4/DBSKR4', NAMEKE = 'EBSKR4/DEBKR4') | |
22 | #endif | |
23 | #if defined(CERNLIB_DOUBLE) | |
24 | PARAMETER (NAMEI = 'BSIR4/DBSIR4', NAMEIE = 'EBSIR4/DEBIR4') | |
25 | PARAMETER (NAMEK = 'BSKR4/DBSKR4', NAMEKE = 'EBSKR4/DEBKR4') | |
26 | #endif | |
27 | LOGICAL LEX | |
28 | ||
29 | DIMENSION BC(0:23,2),CC(0:15,2),PP(-3:3),GG(-3:3) | |
30 | ||
31 | PARAMETER (EPS = 1D-14) | |
32 | PARAMETER (Z1 = 1, HF =Z1/2) | |
33 | PARAMETER (PI = 3.14159 26535 89793 24D0) | |
34 | PARAMETER (W2 = 1.41421 35623 73095 05D0) | |
35 | PARAMETER (G1 = 3.62560 99082 21908 31D0) | |
36 | PARAMETER (G3 = 1.22541 67024 65177 65D0) | |
37 | PARAMETER (PIH = PI/2, RPIH = 2/PI, RPI = 1/PI, RW2 = 1/W2) | |
38 | PARAMETER (C1 = PI/(2*W2)) | |
39 | PARAMETER (GM = 2*(1/G3-4/G1), GP = (4/G1+1/G3)/2) | |
40 | ||
41 | DATA GG(-3) /0.27581 56628 30209 31D0/, PP(-3) /-0.75D0/ | |
42 | DATA GG(-1) /0.81604 89390 98262 98D0/, PP(-1) /-0.25D0/ | |
43 | DATA GG( 1) /1.10326 26513 20837 26D0/, PP( 1) / 0.25D0/ | |
44 | DATA GG( 3) /1.08806 52521 31017 31D0/, PP( 3) / 0.75D0/ | |
45 | ||
46 | DATA BC( 0,1) / 1.00619 92270 14122 57D0/ | |
47 | DATA BC( 1,1) / 0.00631 99620 31140 72D0/ | |
48 | DATA BC( 2,1) / 0.00012 56131 27965 64D0/ | |
49 | DATA BC( 3,1) / 0.00000 52052 40761 57D0/ | |
50 | DATA BC( 4,1) / 0.00000 03591 84411 39D0/ | |
51 | DATA BC( 5,1) / 0.00000 00355 85362 89D0/ | |
52 | DATA BC( 6,1) / 0.00000 00036 05011 66D0/ | |
53 | DATA BC( 7,1) /-0.00000 00001 26294 10D0/ | |
54 | DATA BC( 8,1) /-0.00000 00002 96595 12D0/ | |
55 | DATA BC( 9,1) /-0.00000 00001 18337 70D0/ | |
56 | DATA BC(10,1) /-0.00000 00000 21655 68D0/ | |
57 | DATA BC(11,1) / 0.00000 00000 03032 04D0/ | |
58 | DATA BC(12,1) / 0.00000 00000 03041 10D0/ | |
59 | DATA BC(13,1) / 0.00000 00000 00530 77D0/ | |
60 | DATA BC(14,1) /-0.00000 00000 00204 53D0/ | |
61 | DATA BC(15,1) /-0.00000 00000 00105 49D0/ | |
62 | DATA BC(16,1) / 0.00000 00000 00005 50D0/ | |
63 | DATA BC(17,1) / 0.00000 00000 00014 36D0/ | |
64 | DATA BC(18,1) / 0.00000 00000 00001 14D0/ | |
65 | DATA BC(19,1) /-0.00000 00000 00001 87D0/ | |
66 | DATA BC(20,1) /-0.00000 00000 00000 32D0/ | |
67 | DATA BC(21,1) / 0.00000 00000 00000 26D0/ | |
68 | DATA BC(22,1) / 0.00000 00000 00000 06D0/ | |
69 | DATA BC(23,1) /-0.00000 00000 00000 04D0/ | |
70 | ||
71 | DATA BC( 0,2) / 0.98980 19115 24008 91D0/ | |
72 | DATA BC( 1,2) /-0.01035 09365 14827 02D0/ | |
73 | DATA BC( 2,2) /-0.00015 85263 84973 08D0/ | |
74 | DATA BC( 3,2) /-0.00000 60527 21962 69D0/ | |
75 | DATA BC( 4,2) /-0.00000 04158 38597 31D0/ | |
76 | DATA BC( 5,2) /-0.00000 00487 99346 57D0/ | |
77 | DATA BC( 6,2) /-0.00000 00089 86835 44D0/ | |
78 | DATA BC( 7,2) /-0.00000 00019 83283 58D0/ | |
79 | DATA BC( 8,2) /-0.00000 00003 58969 60D0/ | |
80 | DATA BC( 9,2) /-0.00000 00000 08766 62D0/ | |
81 | DATA BC(10,2) / 0.00000 00000 25819 45D0/ | |
82 | DATA BC(11,2) / 0.00000 00000 09780 24D0/ | |
83 | DATA BC(12,2) / 0.00000 00000 00565 05D0/ | |
84 | DATA BC(13,2) /-0.00000 00000 00851 66D0/ | |
85 | DATA BC(14,2) /-0.00000 00000 00270 25D0/ | |
86 | DATA BC(15,2) / 0.00000 00000 00040 96D0/ | |
87 | DATA BC(16,2) / 0.00000 00000 00040 50D0/ | |
88 | DATA BC(17,2) / 0.00000 00000 00001 11D0/ | |
89 | DATA BC(18,2) /-0.00000 00000 00005 25D0/ | |
90 | DATA BC(19,2) /-0.00000 00000 00000 70D0/ | |
91 | DATA BC(20,2) / 0.00000 00000 00000 70D0/ | |
92 | DATA BC(21,2) / 0.00000 00000 00000 14D0/ | |
93 | DATA BC(22,2) /-0.00000 00000 00000 10D0/ | |
94 | DATA BC(23,2) /-0.00000 00000 00000 02D0/ | |
95 | ||
96 | DATA CC( 0,1) / 0.99128 81656 75147 07D0/ | |
97 | DATA CC( 1,1) /-0.00850 62567 20022 24D0/ | |
98 | DATA CC( 2,1) / 0.00019 70491 57408 35D0/ | |
99 | DATA CC( 3,1) /-0.00000 80377 10166 54D0/ | |
100 | DATA CC( 4,1) / 0.00000 04554 01498 43D0/ | |
101 | DATA CC( 5,1) /-0.00000 00323 27352 82D0/ | |
102 | DATA CC( 6,1) / 0.00000 00027 16130 28D0/ | |
103 | DATA CC( 7,1) /-0.00000 00002 60644 07D0/ | |
104 | DATA CC( 8,1) / 0.00000 00000 27882 69D0/ | |
105 | DATA CC( 9,1) /-0.00000 00000 03267 69D0/ | |
106 | DATA CC(10,1) / 0.00000 00000 00414 09D0/ | |
107 | DATA CC(11,1) /-0.00000 00000 00056 17D0/ | |
108 | DATA CC(12,1) / 0.00000 00000 00008 09D0/ | |
109 | DATA CC(13,1) /-0.00000 00000 00001 23D0/ | |
110 | DATA CC(14,1) / 0.00000 00000 00000 20D0/ | |
111 | DATA CC(15,1) /-0.00000 00000 00000 03D0/ | |
112 | ||
113 | DATA CC( 0,2) / 1.01476 24350 64637 87D0/ | |
114 | DATA CC( 1,2) / 0.01449 34617 87809 66D0/ | |
115 | DATA CC( 2,2) /-0.00025 87162 07241 80D0/ | |
116 | DATA CC( 3,2) / 0.00000 96912 18911 49D0/ | |
117 | DATA CC( 4,2) /-0.00000 05261 29313 99D0/ | |
118 | DATA CC( 5,2) / 0.00000 00363 96854 29D0/ | |
119 | DATA CC( 6,2) /-0.00000 00030 05472 76D0/ | |
120 | DATA CC( 7,2) / 0.00000 00002 84827 80D0/ | |
121 | DATA CC( 8,2) /-0.00000 00000 30182 91D0/ | |
122 | DATA CC( 9,2) / 0.00000 00000 03511 10D0/ | |
123 | DATA CC(10,2) /-0.00000 00000 00442 27D0/ | |
124 | DATA CC(11,2) / 0.00000 00000 00059 70D0/ | |
125 | DATA CC(12,2) /-0.00000 00000 00008 56D0/ | |
126 | DATA CC(13,2) / 0.00000 00000 00001 30D0/ | |
127 | DATA CC(14,2) /-0.00000 00000 00000 21D0/ | |
128 | DATA CC(15,2) / 0.00000 00000 00000 03D0/ | |
129 | ||
130 | LEX=.FALSE. | |
131 | GO TO 8 | |
132 | ||
133 | #if !defined(CERNLIB_DOUBLE) | |
134 | ENTRY EBSIR4(X,NU) | |
135 | #endif | |
136 | #if defined(CERNLIB_DOUBLE) | |
137 | ENTRY DEBIR4(X,NU) | |
138 | #endif | |
139 | LEX=.TRUE. | |
140 | ||
141 | 8 MU=ABS(NU) | |
142 | IF(MU .NE. 1 .AND. MU .NE. 2 .AND. MU .NE. 3 .OR. | |
143 | 1 NU .LT. 0 .AND. X .LE. 0 .OR. NU .GT. 0 .AND. X .LT. 0) THEN | |
144 | S=0 | |
145 | WRITE(ERRTXT,101) X,NU | |
146 | IF(.NOT.LEX) CALL MTLPRT(NAMEI ,'C327.1',ERRTXT) | |
147 | IF( LEX) CALL MTLPRT(NAMEIE,'C327.1',ERRTXT) | |
148 | ELSEIF(X .EQ. 0) THEN | |
149 | S=0 | |
150 | ELSEIF(NU .EQ. -2) THEN | |
151 | IF(LEX) THEN | |
152 | S=HF*(1+EXP(-X-X))/SQRT(PIH*X) | |
153 | ELSE | |
154 | S=COSH(X)/SQRT(PIH*X) | |
155 | ENDIF | |
156 | ELSEIF(NU .EQ. 2) THEN | |
157 | IF(LEX) THEN | |
158 | IF(X .LT. HF) THEN | |
159 | S=SINH(X)*EXP(-X)/SQRT(PIH*X) | |
160 | ELSE | |
161 | S=HF*(1-EXP(-X-X))/SQRT(PIH*X) | |
162 | ENDIF | |
163 | ELSE | |
164 | S=SINH(X)/SQRT(PIH*X) | |
165 | ENDIF | |
166 | ELSEIF(X .LT. 8) THEN | |
167 | Y=(HF*X)**2 | |
168 | XN=PP(NU) | |
169 | XL=XN+2 | |
170 | A0=1 | |
171 | A1=1+2*Y/((XL+1)*(XN+1)) | |
172 | A2=1+Y*(4+3*Y/((XL+2)*(XN+2)))/((XL+3)*(XN+1)) | |
173 | B0=1 | |
174 | B1=1-Y/(XL+1) | |
175 | B2=1-Y*(1-Y/(2*(XL+2)))/(XL+3) | |
176 | T1=3+XL | |
177 | V1=3-XL | |
178 | V3=XL-1 | |
179 | V2=V3+V3 | |
180 | C=0 | |
181 | DO 33 N = 3,30 | |
182 | C0=C | |
183 | T1=T1+2 | |
184 | T2=T1-1 | |
185 | T3=T2-1 | |
186 | T4=T3-1 | |
187 | T5=T4-1 | |
188 | T6=T5-1 | |
189 | V1=V1+1 | |
190 | V2=V2+1 | |
191 | V3=V3+1 | |
192 | U1=N*T4 | |
193 | E=V3/(U1*T3) | |
194 | U2=E*Y | |
195 | F1=1+Y*V1/(U1*T1) | |
196 | F2=(1+Y*V2/(V3*T2*T5))*U2 | |
197 | F3=-Y*Y*U2/(T4*T5*T5*T6) | |
198 | A=F1*A2+F2*A1+F3*A0 | |
199 | B=F1*B2+F2*B1+F3*B0 | |
200 | C=A/B | |
201 | IF(ABS(C0-C) .LT. EPS*ABS(C)) GO TO 34 | |
202 | A0=A1 | |
203 | A1=A2 | |
204 | A2=A | |
205 | B0=B1 | |
206 | B1=B2 | |
207 | B2=B | |
208 | 33 CONTINUE | |
209 | 34 S=GG(NU)*(HF*X)**PP(NU)*C | |
210 | IF(LEX) S=EXP(-X)*S | |
211 | ELSE | |
212 | K=(MU+1)/2 | |
213 | R=1/X | |
214 | W=SQRT(RPI*R) | |
215 | H=16*R-1 | |
216 | ALFA=H+H | |
217 | B1=0 | |
218 | B2=0 | |
219 | DO 2 I = 23,0,-1 | |
220 | B0=BC(I,K)+ALFA*B1-B2 | |
221 | B2=B1 | |
222 | 2 B1=B0 | |
223 | S=RW2*W*(B0-H*B2) | |
224 | IF(.NOT.LEX) S=EXP(X)*S | |
225 | T=0 | |
226 | IF(NU .LT. 0) THEN | |
227 | H=10*R-1 | |
228 | ALFA=H+H | |
229 | B1=0 | |
230 | B2=0 | |
231 | DO 3 I = 15,0,-1 | |
232 | B0=CC(I,K)+ALFA*B1-B2 | |
233 | B2=B1 | |
234 | 3 B1=B0 | |
235 | R=EXP(-X) | |
236 | T=W*R*(B0-H*B2) | |
237 | IF(LEX) T=R*T | |
238 | ENDIF | |
239 | S=S+T | |
240 | ENDIF | |
241 | GO TO 99 | |
242 | ||
243 | #if !defined(CERNLIB_DOUBLE) | |
244 | ENTRY BSKR4(X,NU) | |
245 | #endif | |
246 | #if defined(CERNLIB_DOUBLE) | |
247 | ENTRY DBSKR4(X,NU) | |
248 | #endif | |
249 | LEX=.FALSE. | |
250 | GO TO 9 | |
251 | ||
252 | #if !defined(CERNLIB_DOUBLE) | |
253 | ENTRY EBSKR4(X,NU) | |
254 | #endif | |
255 | #if defined(CERNLIB_DOUBLE) | |
256 | ENTRY DEBKR4(X,NU) | |
257 | #endif | |
258 | LEX=.TRUE. | |
259 | ||
260 | 9 MU=ABS(NU) | |
261 | IF(MU .NE. 1 .AND. MU .NE. 2 .AND. MU .NE. 3 .OR. X .LE. 0) THEN | |
262 | S=0 | |
263 | WRITE(ERRTXT,101) X,NU | |
264 | IF(.NOT.LEX) CALL MTLPRT(NAMEK ,'C327.1',ERRTXT) | |
265 | IF( LEX) CALL MTLPRT(NAMEKE,'C327.1',ERRTXT) | |
266 | ELSEIF(MU .EQ. 2) THEN | |
267 | S=SQRT(PIH/X) | |
268 | IF(.NOT.LEX) S=EXP(-X)*S | |
269 | ELSEIF(X .LE. 1) THEN | |
270 | A0=PP(-1) | |
271 | B=HF*X | |
272 | D=-LOG(B) | |
273 | F=A0*D | |
274 | E=EXP(F) | |
275 | G=(GM*A0+GP)*E | |
276 | BK=C1*(HF*GM*(E+1/E)+GP*D*SINH(F)/F) | |
277 | F=BK | |
278 | E=A0**2 | |
279 | P=HF*C1*G | |
280 | Q=HF/G | |
281 | C=1 | |
282 | D=B**2 | |
283 | BK1=P | |
284 | DO 11 N = 1,15 | |
285 | FN=N | |
286 | F=(FN*F+P+Q)/(FN**2-E) | |
287 | C=C*D/FN | |
288 | P=P/(FN-A0) | |
289 | Q=Q/(FN+A0) | |
290 | G=C*(P-FN*F) | |
291 | H=C*F | |
292 | BK=BK+H | |
293 | BK1=BK1+G | |
294 | IF(H*BK1+ABS(G)*BK .LE. EPS*BK*BK1) GO TO 12 | |
295 | 11 CONTINUE | |
296 | 12 S=BK | |
297 | IF(MU .EQ. 3) S=BK1/B | |
298 | IF(LEX) S=EXP(X)*S | |
299 | ELSEIF(X .LE. 5) THEN | |
300 | XN=4*PP(MU)**2 | |
301 | A=9-XN | |
302 | B=25-XN | |
303 | C=768*X**2 | |
304 | C0=48*X | |
305 | A0=1 | |
306 | A1=(16*X+7+XN)/A | |
307 | A2=(C+C0*(XN+23)+XN*(XN+62)+129)/(A*B) | |
308 | B0=1 | |
309 | B1=(16*X+9-XN)/A | |
310 | B2=(C+C0*B)/(A*B)+1 | |
311 | C=0 | |
312 | DO 24 N = 3,30 | |
313 | C0=C | |
314 | FN=N | |
315 | FN2=FN+FN | |
316 | FN1=FN2-1 | |
317 | FN3=FN1/(FN2-3) | |
318 | FN4=12*FN**2-(1-XN) | |
319 | FN5=16*FN1*X | |
320 | RAN=1/((FN2+1)**2-XN) | |
321 | F1=FN3*(FN4-20*FN)+FN5 | |
322 | F2=28*FN-FN4-8+FN5 | |
323 | F3=FN3*((FN2-5)**2-XN) | |
324 | A=(F1*A2+F2*A1+F3*A0)*RAN | |
325 | B=(F1*B2+F2*B1+F3*B0)*RAN | |
326 | C=A/B | |
327 | IF(ABS(C0-C) .LT. EPS*ABS(C)) GO TO 25 | |
328 | A0=A1 | |
329 | A1=A2 | |
330 | A2=A | |
331 | B0=B1 | |
332 | B1=B2 | |
333 | B2=B | |
334 | 24 CONTINUE | |
335 | 25 S=C/SQRT(RPIH*X) | |
336 | IF(.NOT.LEX) S=EXP(-X)*S | |
337 | ELSE | |
338 | K=(MU+1)/2 | |
339 | R=1/X | |
340 | Y=5*R | |
341 | H=10*R-1 | |
342 | ALFA=H+H | |
343 | B1=0 | |
344 | B2=0 | |
345 | DO 13 I = 15,0,-1 | |
346 | B0=CC(I,K)+ALFA*B1-B2 | |
347 | B2=B1 | |
348 | 13 B1=B0 | |
349 | S=SQRT(PIH*R)*(B0-H*B2) | |
350 | IF(.NOT.LEX) S=EXP(-X)*S | |
351 | ENDIF | |
352 | #if !defined(CERNLIB_DOUBLE) | |
353 | 99 BSIR4=S | |
354 | #endif | |
355 | #if defined(CERNLIB_DOUBLE) | |
356 | 99 DBSIR4=S | |
357 | #endif | |
358 | RETURN | |
359 | 101 FORMAT('INCORRECT ARGUMENT OR INDEX, X = ',1P,E15.6,5X,'NU = ',I5) | |
360 | END |