5 * Revision 1.1.1.1 1996/04/01 15:02:16 mclareni
11 #include "gen/imp64.inc"
13 C********** COMMUNICATION TO CALLING PROGRAM
15 COMMON/PARAMS/ACC,NDIM,NSUB,ITER
16 COMMON/ANSWER/VALUE,ERROR
17 COMMON/STORE/XA(11),XB(11),XC(11),XD(11),MA(11),MB(11),MC(11)
18 COMMON/STORE1/R(10000),LR
19 COMMON/OPTION/IPRINT,ICONV,IRESET
21 COMMON/INTERN/FACTOR,ALFA,BETA,GAMMA,DELTA,LEVEL,NMIN
22 C*NS INTEGER XLOC, FNAME
25 #if defined(CERNLIB_DOUBLE)
27 C MODIFICATIONS FOR DOUBLE PRECISION
32 C***************CONSTANTS AND COUNTERS
48 C********** INITIALISE INTERVALS
50 IF(MA(1).EQ.0) GOTO 201
51 IF(IRESET.EQ.0) GOTO 202
52 201 K=INT(ANSUB**RNDIM+ZERO)
53 IF(K.LT.NMIN) GOTO 207
62 C********** PRINT OUT INITIAL VALUES
64 IF(IPRINT.EQ.0) GOTO 1
66 2 FORMAT('1........ RIEMANN INTEGRATION WITH INTERVAL ADJUSTMENT',
68 WRITE(6,3) ACC,NDIM,NSUB,ITER
69 3 FORMAT('0******** INPUT PARAM ********'//
70 +,' NAME OF INTEGRAND...',13X,'F '/
71 +,' RELATIVE ACCURACY... ',12X,F7.5/
72 +,' DIMENSION OF INTEGRAL... ',I15/
73 +,' MAXIMUM NUMBER OF SUBVOLUMES... ',I8/
74 +,' MAXIMUM NUMBER OF ITERATIONS... ',I8)
75 IF(IPRINT.EQ.2) GOTO 1
76 WRITE(6,4)NSHOTS,LEVEL,FACTOR,IPRINT,
77 1ICONV,IRESET,ALFA,BETA,GAMMA,DELTA,NMIN
78 4 FORMAT('0'/'0******** INTERNAL PARAMETERS ********'//
79 +,' NUMBER OF CALLS PER SUBVOLUME... ',I7/
80 +,' LEVEL OF CONFIDENCE (PER CENT)...',I7/
81 +,' CORRESPONDING FACTOR...',F17.2/
82 +,' PRINT OPTION...',I25/
83 +,' CONVERGENCE CRITERION...',I16/
84 +,' RESET OPTION...',I25/
85 +,' RATE OF CONVERGENCE...',2X,4F4.2/
86 +,' MINIMUM NUMBER OF INTERVALS...',I10)
88 C********** ENTRY AND REENTRY FOR ITERATIONS
104 IF(LE.GT.LR) GOTO 107
106 C********** INITIALISE INTEGRATION LOOP
126 R(LA+L)=R(LA+L)+1.0-X
129 C********** INTEGRATION LOOP
135 10 XD(I)=XB(I)+XA(I)*RNDM(I)
142 D=V**2*(SF2-SF1**2)*RNSHT1
148 C********** LOOP THE LOOP
153 IF(J.NE.MA(I)) GOTO 12
166 16 IF(I.EQ.NDIM) GOTO 15
172 C********** CALCULATE INTEGRAL AND ERROR
180 IF(SV.EQ.0.0) GOTO 400
187 ERROR=FACTOR/SQRT(SRV)
189 CHISQ=SWISQ-VALUE**2*SRV
191 C********** REDUCE TO RELATIVE QUANTITIES
196 18 R(LD+J)=R(LD+J)*RV
198 C********** PRINT OUT THE RESULTS OF THIS ITERATION
200 IF(IPRINT.EQ.0) GOTO 25
201 WRITE(6,20)ITC,SI,FSV,VALUE,ERROR,CHISQ
202 1,NCALL,(MA(I),I=1,NDIM)
203 20 FORMAT('0'//////' ******** ITERATION NUMBER',I3,' ********'//
204 +,' VALUE OF INTEGRAL...',E13.5/
205 +,' ESTIMATED ERROR.....',E13.5//
206 +,' ACCUMULATED VALUE...',E13.5/
207 +,' ACCUMULATED ERROR...',E13.5//
208 +,' CHI SQUARE..........',F13.2//
209 +,' NUMBER OF CALLS TO F',I13/
210 +,' INTERVAL STRUCTURE..',5X,(25I4)//)
211 IF(IPRINT.EQ.2) GOTO 25
214 21 FORMAT('0'/'0........ AXIS NUMBER',I3)
218 WRITE(6,22)(R(LA+J),J=K,L)
219 22 FORMAT('0INTERVAL CHOICE'/(10E13.2))
220 WRITE(6,23)(R(LC+J),J=K,L)
221 23 FORMAT('0RELATIVE CONTRIBUTION TO INTEGRAL'/(10E13.2))
222 WRITE(6,24)(R(LD+J),J=K,L)
223 24 FORMAT('0RELATIVE CONTRIBUTION TO ERROR'/(10E13.2))
226 C********** CHECK IF ACCURACY REACHED OR END OF ITERATIONS
228 25 ACC1=ERROR/ABS(VALUE)
229 IF(ACC1.GT.ACC) GOTO 26
230 28 IF(IPRINT.NE.0) WRITE(6,27) 'WAS',ITC,VALUE,ERROR
232 26 IF(ITC.EQ.ITER) THEN
233 IF(IPRINT.NE.0) WRITE(6,27)'NOT',ITC,VALUE,ERROR
237 C********** RECOMPUTE INTERVAL SIZES
252 GOTO (301,302,303,304),ICONV
255 Q=(-LOG(D+ZERO)+ZERO)**BETA
262 P=((-LOG(D+ZERO)+ZERO)/(1.0-D+ZERO))**ALFA
263 Q=((-LOG(A+ZERO)+ZERO)/(1.0-A+ZERO))**(-BETA)
266 P=(1.0-LOG(D+ZERO))**ALFA
267 Q=(1.0-LOG(A+ZERO))**(-BETA)
275 B=ANSHT1 *Y*SV+(Z-1.0)*SI**2
285 C********** RECOMPUTE INTERVAL NUMBERS
288 34 Q=(ANSUB/(ANMIN**L*V))**(1.0/(NDIM-L))
293 IF(M.EQ.NMIN) GOTO 32
296 IF(M.LE.NMIN) GOTO 33
307 C********** COMBINE SIZES AND NUMBERS INTO NEW INTERVALS
311 35 NID114=NID114+MC(I)
312 IF(5*NID114.GT.LR) GOTO 107
333 38 R(LE+J)=X-(I2+1-C)*R(LB+K1+I2)-(B-I1)*R(LB+K1+I1)
341 C********** NOT STORAGE ENOUGH
343 107 X1=ANDIM*ANSUB**RNDIM
344 X2=ANMIN*(ANDIM-1.0)+ANSUB/ANMIN**(ANDIM-1.0)
351 WRITE(6,108)LR,I1,I2,I3
352 108 FORMAT('0'/' STORAGE LENGTH =',I5,' IS TOO SMALL'/
353 +,' MINIMUM NECESSARY -',I7/' MAXIMUM POSSIBLE - ',I7/
354 +,' PROBABLE VALUE - ',I9)
357 C********** TOO SMALL NUMBER OF SUBVOLUMES
361 206 FORMAT('0 NSUB TOO SMALL...',I7/
362 +,' MINIMUM NECESSARY...',I7)
365 C ********** ZERO VARIANCE ABORT
368 401 FORMAT('0FUNCTION HAS ZERO VARIANCE')
370 27 FORMAT('0'/'0********'/
371 +,' THE DESIRED ACCURACY ',A,' OBTAINED AFTER',I4,' ITERATIONS'//
372 + ' FINAL VALUE...',E13.5/
373 + ' FINAL ERROR...',E13.5/'0........')