5 * Revision 1.1.1.1 1996/04/01 15:03:24 mclareni
10 SUBROUTINE INTGRL (NDIM,INTDEG,NPOINT,FUNINT,ERROR)
11 C*NS INTEGER NDIM, INTDEG, INTPNT
14 COMMON /ISTRGE/ MXRGNS,ISTOR(12000)
15 COMMON /RSTRGE/ RSTSZE,RSTOR(18001)
17 COMMON /BUKSZE/ MAXWRD
19 COMMON /TRESZE/ ENTREE,ENTBUC
21 COMMON /LIMITS/ GMINUS(10),GPLUS(10)
23 COMMON /FUNN/ NFUN, NFOPT, NFCUT
24 INTEGER NFUN, NFOPT, NFCUT
25 COMMON /QUADRE/ DEGREE
27 REAL UMINUS(10),UPLUS(10)
28 INTEGER PARENT,PTR,NTOT,NIBUC,BUCPTR
29 DOUBLE PRECISION FINT,ERRSQ
31 IF(ENTBUC.GT.1) GOTO 20
33 10 FORMAT(' FUNINT CALLED BEFORE PARTN.')
35 20 IF(INTDEG.LE.1) GOTO 30
36 IF(INTDEG.EQ.2) NFUN=NFUN+ENTBUC*(NDIM+1)
37 IF(INTDEG.EQ.3) NFUN=NFUN+ENTBUC*2*NDIM
38 IF(INTDEG.EQ.5) NFUN=NFUN+ENTBUC*(2*NDIM**2+1)
39 30 ISCR=MXRGNS*(MAXWRD+1)
43 IF(INTDEG.NE.1) GOTO 50
48 ERRTOT=ERRTOT+SQRT(RSTOR(J))
51 50 DO 180 IBUC=1,ENTBUC
57 CALL BOUNDS(IBUC,PARENT,ISTOR,RSTOR,UMINUS,UPLUS)
58 IF(INTDEG.GE.0) GOTO 70
59 CALL USRINT(UMINUS,UPLUS,RSTOR(BUCPTR),RSTOR(BUCPTR+1),RFINT,RERR
65 70 IF(DEGREE.NE.1) GOTO 80
66 CELVOL=RSTOR(BUCPTR+6)
70 CELVOL=CELVOL*(UPLUS(J)-UMINUS(J))
72 100 IF(INTDEG.LE.1) GOTO 110
73 FUNINT=FUNINT+QUAD(NDIM,INTDEG,UMINUS,UPLUS,FUN)*CELVOL
75 110 IF(INTDEG.NE.1) GOTO 120
76 NIBUC=INT(SQRT(RSTOR(BUCPTR+1))*NTOT/ERRTOT+0.5)
77 IF(NIBUC.GE.5) GOTO 130
78 FUNINT=FUNINT+RSTOR(BUCPTR)
79 ERROR=ERROR+RSTOR(BUCPTR+1)
83 CALL QUASI(XX,NDIM,NIBUC,-NPOINT)
88 IF(INTDEG.NE.1) GOTO 140
89 CALL RANUMS(RSTOR(PTR+1),NDIM)
91 140 CALL QUASI(RSTOR(PTR+1),NDIM,1,NIBUC)
93 RSTOR(I+PTR)=(UPLUS(I)-UMINUS(I))*RSTOR(I+PTR)+UMINUS(I)
95 F=FUN(NDIM,RSTOR(PTR+1))
97 IF(ABS(F).GT.1.0E-37) ERRSQ=ERRSQ+F**2
103 ERRSQ=ERRSQ*CELVOL**2
104 IF(INTDEG.EQ.0) ERRSQ=RSTOR(BUCPTR+1)/NIBUC
112 IF(ERROR.GT.0) ERROR=SQRT(ERROR)
113 IF(IPRINT.LE.0) GOTO 200
114 WRITE(6,190) FUNINT,ERROR,NFUN
115 190 FORMAT(' INTEGRAL ESTIMATE = ',G13.5,' +/-',G13.5/1X,
116 1 I10,' TOTAL INTEGRAND EVALUATIONS')