]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ISAJET/isasusy/ssdint.F
Coding conventions (Gustavo)
[u/mrichter/AliRoot.git] / ISAJET / isasusy / ssdint.F
CommitLineData
0795afa3 1#include "isajet/pilot.h"
2 DOUBLE PRECISION FUNCTION SSDINT(XL,F,XR)
3C-----------------------------------------------------------------------
4C Integrate F over (XL,XR) using adaptive Gaussian quadrature.
5C TOLABS = 1e-35: absolute error for convergence.
6C TOLREL = 5e-5: relative error for convergence.
7C TOLBIN = 1e-3: relative bin size limit. Set contribution to
8C zero if bin falls below this.
9C Note quadrature constants R and W have been converted to explicit
10C double precision (.xxxxxDxx) form.
11C
12C Bisset's XINTH
13C-----------------------------------------------------------------------
14#if defined(CERNLIB_IMPNONE)
15 IMPLICIT NONE
16#endif
17#include "isajet/sslun.inc"
18 EXTERNAL F
19 INTEGER NMAX
20 DOUBLE PRECISION TOLABS,TOLREL,TOLBIN,XMIN,XLIMS(100)
21 DOUBLE PRECISION R(93),W(93)
22 INTEGER PTR(4),NORD(4)
23 INTEGER ICOUNT,IBAD
24 DOUBLE PRECISION XL,XR,F
25 DOUBLE PRECISION AA,BB,TVAL,VAL,TOL
26 INTEGER NLIMS,I,J,KKK
27C
28 DATA PTR,NORD/4,10,22,46, 6,12,24,48/
29 DATA (R(KKK),KKK=1,48)/
30 $ .2386191860D0,.6612093865D0,.9324695142D0,.1252334085D0,
31 $ .3678314990D0,.5873179543D0,.7699026742D0,.9041172563D0,
32 $ .9815606342D0,.0640568929D0,.1911188675D0,.3150426797D0,
33 $ .4337935076D0,.5454214714D0,.6480936519D0,.7401241916D0,
34 $ .8200019860D0,.8864155270D0,.9382745520D0,.9747285560D0,
35 $ .9951872200D0,.0323801710D0,.0970046992D0,.1612223561D0,
36 $ .2247637903D0,.2873624873D0,.3487558863D0,.4086864820D0,
37 $ .4669029048D0,.5231609747D0,.5772247261D0,.6288673968D0,
38 $ .6778723796D0,.7240341309D0,.7671590325D0,.8070662040D0,
39 $ .8435882616D0,.8765720203D0,.9058791367D0,.9313866907D0,
40 $ .9529877032D0,.9705915925D0,.9841245837D0,.9935301723D0,
41 $ .9987710073D0,.0162767488D0,.0488129851D0,.0812974955D0/
42 DATA (R(KKK),KKK=49,93)/
43 $ .1136958501D0,.1459737146D0,.1780968824D0,.2100313105D0,
44 $ .2417431561D0,.2731988126D0,.3043649444D0,.3352085229D0,
45 $ .3656968614D0,.3957976498D0,.4254789884D0,.4547094222D0,
46 $ .4834579739D0,.5116941772D0,.5393881083D0,.5665104186D0,
47 $ .5930323648D0,.6189258401D0,.6441634037D0,.6687183100D0,
48 $ .6925645366D0,.7156768123D0,.7380306437D0,.7596023411D0,
49 $ .7803690438D0,.8003087441D0,.8194003107D0,.8376235112D0,
50 $ .8549590334D0,.8713885059D0,.8868945174D0,.9014606353D0,
51 $ .9150714231D0,.9277124567D0,.9393703398D0,.9500327178D0,
52 $ .9596882914D0,.9683268285D0,.9759391746D0,.9825172636D0,
53 $ .9880541263D0,.9925439003D0,.9959818430D0,.9983643759D0,
54 $ .9996895039/
55 DATA (W(KKK),KKK=1,48)/
56 $ .4679139346D0,.3607615730D0,.1713244924D0,.2491470458D0,
57 $ .2334925365D0,.2031674267D0,.1600783285D0,.1069393260D0,
58 $ .0471753364D0,.1279381953D0,.1258374563D0,.1216704729D0,
59 $ .1155056681D0,.1074442701D0,.0976186521D0,.0861901615D0,
60 $ .0733464814D0,.0592985849D0,.0442774388D0,.0285313886D0,
61 $ .0123412298D0,.0647376968D0,.0644661644D0,.0639242386D0,
62 $ .0631141923D0,.0620394232D0,.0607044392D0,.0591148397D0,
63 $ .0572772921D0,.0551995037D0,.0528901894D0,.0503590356D0,
64 $ .0476166585D0,.0446745609D0,.0415450829D0,.0382413511D0,
65 $ .0347772226D0,.0311672278D0,.0274265097D0,.0235707608D0,
66 $ .0196161605D0,.0155793157D0,.0114772346D0,.0073275539D0,
67 $ .0031533461D0,.0325506145D0,.0325161187D0,.0324471637D0/
68 DATA (W(KKK),KKK=49,93)/
69 $ .0323438226D0,.0322062048D0,.0320344562D0,.0318287589D0,
70 $ .0315893308D0,.0313164256D0,.0310103326D0,.0306713761D0,
71 $ .0302999154D0,.0298963441D0,.0294610900D0,.0289946142D0,
72 $ .0284974111D0,.0279700076D0,.0274129627D0,.0268268667D0,
73 $ .0262123407D0,.0255700360D0,.0249006332D0,.0242048418D0,
74 $ .0234833991D0,.0227370697D0,.0219666444D0,.0211729399D0,
75 $ .0203567972D0,.0195190811D0,.0186606796D0,.0177825023D0,
76 $ .0168854799D0,.0159705629D0,.0150387210D0,.0140909418D0,
77 $ .0131282296D0,.0121516047D0,.0111621020D0,.0101607705D0,
78 $ .0091486712D0,.0081268769D0,.0070964708D0,.0060585455D0,
79 $ .0050142027D0,.0039645543D0,.0029107318D0,.0018539608D0,
80 $ .0007967921/
81C
82 DATA TOLABS,TOLREL,TOLBIN,NMAX/1.D-35,5.D-5,1D-5,100/
83C
84 SSDINT=0
85 NLIMS=2
86 XLIMS(1)=XL
87 XLIMS(2)=XR
88 ICOUNT=0
89 IBAD=0
90 XMIN=TOLBIN*ABS(XR-XL)
91C
9210 AA=(XLIMS(NLIMS)-XLIMS(NLIMS-1))/2
93 BB=(XLIMS(NLIMS)+XLIMS(NLIMS-1))/2
94 TVAL=0
95 DO 15 I=1,3
9615 TVAL=TVAL+W(I)*(F(BB+AA*R(I))+F(BB-AA*R(I)))
97 TVAL=TVAL*AA
98 DO 25 J=1,4
99 VAL=0
100 DO 20 I=PTR(J),PTR(J)-1+NORD(J)
101 ICOUNT=ICOUNT+1
102 IF(ICOUNT.GT.1E5) THEN
103 WRITE(LOUT,*) 'ERROR IN SSDINT: SET SSDINT = 0'
104 SSDINT=0.
105 RETURN
106 ENDIF
10720 VAL=VAL+W(I)*(F(BB+AA*R(I))+F(BB-AA*R(I)))
108 VAL=VAL*AA
109 TOL=MAX(TOLABS,TOLREL*ABS(VAL))
110 IF(ABS(TVAL-VAL).LT.TOL) THEN
111 SSDINT=SSDINT+VAL
112 NLIMS=NLIMS-2
113 IF (NLIMS.NE.0) GO TO 10
114 GO TO 999
115 ELSEIF(ABS(AA).LT.XMIN.AND.J.EQ.4) THEN
116C Bin is too small -- set VAL = 0. -- FEP
117 IBAD=IBAD+1
118 NLIMS=NLIMS-2
119 IF (NLIMS.NE.0) GO TO 10
120 GO TO 999
121 ENDIF
12225 TVAL=VAL
123 IF(NMAX.EQ.2) THEN
124 SSDINT=VAL
125 GO TO 999
126 ENDIF
127 IF(NLIMS.GT.(NMAX-2)) THEN
128 WRITE(LOUT,50) SSDINT,NMAX,BB-AA,BB+AA
12950 FORMAT (' ERROR IN SSDINT, SSDINT,NMAX,XL,XR=',G15.7,I5,2G15.7)
130 RETURN
131 ENDIF
132 XLIMS(NLIMS+1)=BB
133 XLIMS(NLIMS+2)=BB+AA
134 XLIMS(NLIMS)=BB
135 NLIMS=NLIMS+2
136 GO TO 10
137C
138999 IF(IBAD.GT.0) THEN
139 WRITE(LOUT,*) 'WARNING IN SSXINT: BAD CONVERGENCE FOR ',IBAD,
140 $ ' INTERVALS.'
141 ENDIF
142 RETURN
143 END