]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HIJING/hijing1_36/vegas.F
Avoid duplicated SAVE statements for G95
[u/mrichter/AliRoot.git] / HIJING / hijing1_36 / vegas.F
CommitLineData
e74335a4 1* $Id$
2C*******************************************************************
3C
4C
5C
6C
7C*******************************************************************
8C SUBROUTINE PERFORMS N-DIMENSIONAL MONTE CARLO INTEG'N
9C - BY G.P. LEPAGE SEPT 1976/(REV)APR 1978
10C*******************************************************************
11C
12 SUBROUTINE VEGAS(FXN,AVGI,SD,CHI2A)
13 IMPLICIT REAL*8(A-H,O-Z)
bc676b8e 14#define BLANKET_SAVE
e74335a4 15#include "bveg1_hijing.inc"
16#include "bveg2_hijing.inc"
17#include "bveg3_hijing.inc"
18 EXTERNAL FXN
19 DIMENSION D(50,10),DI(50,10),XIN(50),R(50),DX(10),DT(10),X(10)
20 1 ,KG(10),IA(10)
21 REAL*4 QRAN(10)
22 DATA NDMX/50/,ALPH/1.5D0/,ONE/1.D0/,MDS/-1/
23 SAVE
24C
25 NDO=1
26 DO 1 J=1,NDIM
271 XI(1,J)=ONE
28C
29 ENTRY VEGAS1(FXN,AVGI,SD,CHI2A)
30C - INITIALIZES CUMMULATIVE VARIABLES, BUT NOT GRID
31 IT=0
32 SI=0.
33 SI2=SI
34 SWGT=SI
35 SCHI=SI
36C
37 ENTRY VEGAS2(FXN,AVGI,SD,CHI2A)
38C - NO INITIALIZATION
39 ND=NDMX
40 NG=1
41 IF(MDS.EQ.0) GO TO 2
42 NG=(NCALL/2.)**(1./NDIM)
43 MDS=1
44 IF((2*NG-NDMX).LT.0) GO TO 2
45 MDS=-1
46 NPG=NG/NDMX+1
47 ND=NG/NPG
48 NG=NPG*ND
492 K=NG**NDIM
50 NPG=NCALL/K
51 IF(NPG.LT.2) NPG=2
52 CALLS=NPG*K
53 DXG=ONE/NG
54 DV2G=(CALLS*DXG**NDIM)**2/NPG/NPG/(NPG-ONE)
55 XND=ND
56 NDM=ND-1
57 DXG=DXG*XND
58 XJAC=ONE/CALLS
59 DO 3 J=1,NDIM
60c***this is the line 50
61 DX(J)=XU(J)-XL(J)
623 XJAC=XJAC*DX(J)
63C
64C REBIN PRESERVING BIN DENSITY
65C
66 IF(ND.EQ.NDO) GO TO 8
67 RC=NDO/XND
68 DO 7 J=1,NDIM
69 K=0
70 XN=0.
71 DR=XN
72 I=K
734 K=K+1
74 DR=DR+ONE
75 XO=XN
76 XN=XI(K,J)
775 IF(RC.GT.DR) GO TO 4
78 I=I+1
79 DR=DR-RC
80 XIN(I)=XN-(XN-XO)*DR
81 IF(I.LT.NDM) GO TO 5
82 DO 6 I=1,NDM
836 XI(I,J)=XIN(I)
847 XI(ND,J)=ONE
85 NDO=ND
86C
878 CONTINUE
88 IF(NPRN.NE.0) WRITE(16,200) NDIM,CALLS,IT,ITMX,ACC,MDS,ND
89 1 ,(XL(J),XU(J),J=1,NDIM)
90C
91 ENTRY VEGAS3(FXN,AVGI,SD,CHI2A)
92C - MAIN INTEGRATION LOOP
939 IT=IT+1
94 TI=0.
95 TSI=TI
96 DO 10 J=1,NDIM
97 KG(J)=1
98 DO 10 I=1,ND
99 D(I,J)=TI
10010 DI(I,J)=TI
101C
10211 FB=0.
103 F2B=FB
104 K=0
10512 K=K+1
106 CALL ARAN9(QRAN,NDIM)
107 WGT=XJAC
108 DO 15 J=1,NDIM
109 XN=(KG(J)-QRAN(J))*DXG+ONE
110c*****this is the line 100
111 IA(J)=XN
112 IF(IA(J).GT.1) GO TO 13
113 XO=XI(IA(J),J)
114 RC=(XN-IA(J))*XO
115 GO TO 14
11613 XO=XI(IA(J),J)-XI(IA(J)-1,J)
117 RC=XI(IA(J)-1,J)+(XN-IA(J))*XO
11814 X(J)=XL(J)+RC*DX(J)
119 WGT=WGT*XO*XND
12015 CONTINUE
121C
122 F=WGT
123 F=F*FXN(X,WGT)
124 F2=F*F
125 FB=FB+F
126 F2B=F2B+F2
127 DO 16 J=1,NDIM
128 DI(IA(J),J)=DI(IA(J),J)+F
12916 IF(MDS.GE.0) D(IA(J),J)=D(IA(J),J)+F2
130 IF(K.LT.NPG) GO TO 12
131C
132 F2B=DSQRT(F2B*NPG)
133 F2B=(F2B-FB)*(F2B+FB)
134 TI=TI+FB
135 TSI=TSI+F2B
136 IF(MDS.GE.0) GO TO 18
137 DO 17 J=1,NDIM
13817 D(IA(J),J)=D(IA(J),J)+F2B
13918 K=NDIM
14019 KG(K)=MOD(KG(K),NG)+1
141 IF(KG(K).NE.1) GO TO 11
142 K=K-1
143 IF(K.GT.0) GO TO 19
144C
145C FINAL RESULTS FOR THIS ITERATION
146C
147 TSI=TSI*DV2G
148 TI2=TI*TI
149 WGT=TI2/(TSI+1.0d-37)
150 SI=SI+TI*WGT
151 SI2=SI2+TI2
152 SWGT=SWGT+WGT
153 SWGT=SWGT+1.0D-37
154 SI2=SI2+1.0D-37
155 SCHI=SCHI+TI2*WGT
156 AVGI=SI/(SWGT)
157 SD=SWGT*IT/(SI2)
158 CHI2A=SD*(SCHI/SWGT-AVGI*AVGI)/(IT-.999)
159 SD=DSQRT(ONE/SD)
160C****this is the line 150
161 IF(NPRN.EQ.0) GO TO 21
162 TSI=DSQRT(TSI)
163 WRITE(16,201) IT,TI,TSI,AVGI,SD,CHI2A
164 IF(NPRN.GE.0) GO TO 21
165 DO 20 J=1,NDIM
16620 WRITE(16,202) J,(XI(I,J),DI(I,J),D(I,J),I=1,ND)
167C
168C REFINE GRID
169C
17021 DO 23 J=1,NDIM
171 XO=D(1,J)
172 XN=D(2,J)
173 D(1,J)=(XO+XN)/2.
174 DT(J)=D(1,J)
175 DO 22 I=2,NDM
176 D(I,J)=XO+XN
177 XO=XN
178 XN=D(I+1,J)
179 D(I,J)=(D(I,J)+XN)/3.
18022 DT(J)=DT(J)+D(I,J)
181 D(ND,J)=(XN+XO)/2.
18223 DT(J)=DT(J)+D(ND,J)
183C
184 DO 28 J=1,NDIM
185 RC=0.
186 DO 24 I=1,ND
187 R(I)=0.
188 IF (DT(J).GE.1.0D18) THEN
189 WRITE(6,*) '************** A SINGULARITY >1.0D18'
190C WRITE(5,1111)
191C1111 FORMAT(1X,'**************IMPORTANT NOTICE***************')
192C WRITE(5,1112)
193C1112 FORMAT(1X,'THE INTEGRAND GIVES RISE A SINGULARITY >1.0D18')
194C WRITE(5,1113)
195C1113 FORMAT(1X,'PLEASE CHECK THE INTEGRAND AND THE LIMITS')
196C WRITE(5,1114)
197C1114 FORMAT(1X,'**************END NOTICE*************')
198 END IF
199 IF(D(I,J).LE.1.0D-18) GO TO 24
200 XO=DT(J)/D(I,J)
d87a6e32 201C R(I)=((XO-ONE)/XO/DLOG(XO))**ALPH
202C The line above doesn't work on Opteron, probably because ALPH is
203C used in DATA. As a temporary solution we use 1.5D0 directly (PH)
204 R(I)=((XO-ONE)/XO/DLOG(XO))**(1.5D0)
e74335a4 20524 RC=RC+R(I)
206 RC=RC/XND
207 K=0
208 XN=0.
209 DR=XN
210 I=K
21125 K=K+1
212 DR=DR+R(K)
213 XO=XN
214c****this is the line 200
215 XN=XI(K,J)
21626 IF(RC.GT.DR) GO TO 25
217 I=I+1
218 DR=DR-RC
219 XIN(I)=XN-(XN-XO)*DR/(R(K)+1.0d-30)
220 IF(I.LT.NDM) GO TO 26
221 DO 27 I=1,NDM
22227 XI(I,J)=XIN(I)
22328 XI(ND,J)=ONE
224C
225 IF(IT.LT.ITMX.AND.ACC*DABS(AVGI).LT.SD) GO TO 9
226200 FORMAT('0INPUT PARAMETERS FOR VEGAS: NDIM=',I3,' NCALL=',F8.0
227 1 /28X,' IT=',I5,' ITMX=',I5/28X,' ACC=',G9.3
228 2 /28X,' MDS=',I3,' ND=',I4/28X,' (XL,XU)=',
229 3 (T40,'( ',G12.6,' , ',G12.6,' )'))
230201 FORMAT(///' INTEGRATION BY VEGAS' / '0ITERATION NO.',I3,
231 1 ': INTEGRAL =',G14.8/21X,'STD DEV =',G10.4 /
232 2 ' ACCUMULATED RESULTS: INTEGRAL =',G14.8 /
233 3 24X,'STD DEV =',G10.4 / 24X,'CHI**2 PER IT''N =',G10.4)
234202 FORMAT('0DATA FOR AXIS',I2 / ' ',6X,'X',7X,' DELT I ',
235 1 2X,' CONV''CE ',11X,'X',7X,' DELT I ',2X,' CONV''CE '
236 2 ,11X,'X',7X,' DELT I ',2X,' CONV''CE ' /
237 2 (' ',3G12.4,5X,3G12.4,5X,3G12.4))
238 RETURN
239 END