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