5 * Revision 1.1.1.1 1996/04/01 15:03:24 mclareni
10 SUBROUTINE SPLIT (NDIM,UMINUS,UPLUS,FLOBD,FUPBD,TERMNL,DISCRM,PART
12 INTEGER NDIM, DISCRM, IRBUC
14 REAL FLOBD, FUPBD, PARTN
15 REAL UMINUS(NDIM), UPLUS(NDIM), BUCKTS(IRBUC)
17 COMMON /SAMPLE/ MPOINT
19 COMMON /BUKSZE/ MAXWRD
21 COMMON /MAXERR/ ERRPCT, ERRABS
22 INTEGER NFUN, NFOPT, NFCUT
23 COMMON /FUNN/ NFUN, NFOPT, NFCUT
24 LOGICAL FSTENT, DOSPLT
26 COMMON /SIGSPL/ COORD, PLACE, FSTENT, DOSPLT
28 COMMON /QUADRE/ DEGREE
30 COMMON /ISTRGE/ MXRGNS, ISTOR(12000)
33 COMMON /RSTRGE/ RSTSZE,RSTOR(18001)
34 REAL BNDTOL, FRACT, REGNTL, FNLTOL
35 COMMON /CUTOLS/ BNDTOL, FRACT, REGNTL, FNLTOL
37 INTEGER ICUT(20), IWORK(20)
39 INTEGER MAXJ, MINJ, NPOINT, NFCNT
45 REAL X(10, 202), Y(202)
47 C*NS REAL DEVMAX, DEVMIN, YMAX, YMIN, SUM, CELVOL, YBAR, ERROR, ERRSQ
48 C*NS DOUBLE PRECISION DPARTN, DFLOAT, DBNDTL, DFRACT, DREGTL, DFNLTL
49 REAL DEVMIN, YMAX, YMIN, CELVOL, YBAR, ERROR, ERRSQ
50 DOUBLE PRECISION DPARTN, DBNDTL, DFRACT, DREGTL, DFNLTL
51 DOUBLE PRECISION FMAJOR, FMINOR, VOL
52 DOUBLE PRECISION DELPLS(10), DELNEG(10)
53 DOUBLE PRECISION XLOW(10), XUP(10)
54 DOUBLE PRECISION Z(10), WORK(200)
57 IF(.NOT.(DOSPLT)) GOTO 10
63 10 IF(NCUT.EQ.0) GOTO 20
71 20 ISCR=MXRGNS*(MAXWRD+1)+1
73 CALL QUASI(X,NDIM,NPOINT,MPOINT)
76 X(I,J)=(UPLUS(I)-UMINUS(I))*X(I,J)+UMINUS(I)
83 CELVOL=CELVOL*(UPLUS(I)-UMINUS(I))
85 #if defined(CERNLIB_IBM)||defined(CERNLIB_SINGLE)
89 #if (!defined(CERNLIB_IBM))&&(defined(CERNLIB_DOUBLE))
94 IF(Y(J).GE.YMIN) GOTO 60
97 60 IF(Y(J).LE.YMAX) GOTO 70
102 X(I,NPOINT+1)=X(I,MAXJ)
103 X(I,NPOINT+2)=X(I,MINJ)
107 CALL BUFOPT(NDIM,X(1,NPOINT+2),X(1,NPOINT+1),UMINUS,UPLUS,Y(NPOIN
108 1T+2),Y(NPOINT+1),FLOBD,FUPBD,WORK,200,IWORK,20,NFCNT,IRESLT)
111 DIFEXT=Y(NPOINT+1)-Y(NPOINT+2)
112 ERROR=DIFEXT*CELVOL*0.5E+0
119 IF(ABS(Y(NPOINT+2)-YBAR).LE.ABS(Y(NPOINT+1)-YBAR)) GOTO 100
130 130 IF((I).GT.(NDIM)) GOTO 140
136 160 IF((I).GT.(NDIM)) GOTO 170
143 CALL TSTEXT(NDIM,Z,XLOW,XUP,DBNDTL,DFRACT,NCUT,NCDIM,ICUT,DELPLS,
145 IF(NCUT.NE.0) GOTO 180
146 CALL NOCUT(NDIM,XLOW,XUP,WORK(1),DISCNT,DISCRM,DPARTN,NFUN)
150 IF(FMAJOR.GE.FMINOR) GOTO 190
155 CALL DELSLV(NDIM,FMAJOR,FMINOR,LMAX,DFRACT,Z,XLOW,XUP,VOL,NCUT,NCD
156 1IM,ICUT,DELPLS,DELNEG,DREGTL,DFNLTL,WORK(1),WORK(NCDIM+1),WORK(2*N
157 2CDIM+1),WORK(3*NCDIM+1),WORK(4*NCDIM+1),WORK(5*NCDIM+1),WORK(6*NCD
158 3IM+1),WORK(7*NCDIM+1),WORK(8*NCDIM+1),NFCNT)
161 IF(NCUT.NE.0) GOTO 200
162 CALL NOCUT(NDIM,XLOW,XUP,WORK(1),DISCNT,DISCRM,DPARTN,NFUN)
168 220 IF((I).GT.(NCUT)) GOTO 240
171 IF(ICUT(I).LE.0) GOTO 230
172 PARSVE(I)=X(II,MAJOR)+DELPLS(II)
174 230 PARSVE(I)=X(II,MAJOR)-DELNEG(II)
177 IF(NCUT.LE.0) GOTO 250
181 250 IF(.NOT.(FSTENT)) GOTO 260
185 260 IF(ERROR.EQ.0.0E+0) GOTO 270
186 TERMNL=TERMNL.OR.ERROR.LT.ERRABS
187 IF(FBAR.NE.0.0E+0) TERMNL=TERMNL.OR.ERROR/ABS(FBAR).LE.ERRPCT
188 270 IF(.NOT.(TERMNL)) GOTO 330
190 IF(NCUTSV.LE.0) GOTO 290
191 #if defined(CERNLIB_IBM)||defined(CERNLIB_SINGLE)
194 #if (!defined(CERNLIB_IBM))&&(defined(CERNLIB_DOUBLE))
199 XX=ABS(X(J,MAJOR)-PARSVE(I))
200 IF(XX.GE.DEVMIN) GOTO 280
206 ERRABS=MAX(ERRABS,ERROR)
211 IF(DEGREE.NE.1) GOTO 300
212 BUCKTS(5)=Y(NPOINT+1)
213 BUCKTS(6)=Y(NPOINT+2)
215 300 IF(DEGREE.LT.2) GOTO 310
217 BUCKTS(5)=QUAD(NDIM,2,UMINUS,UPLUS,FUN)*CELVOL
218 310 IF(DEGREE.LT.3) GOTO 320
220 BUCKTS(6)=QUAD(NDIM,3,UMINUS,UPLUS,FUN)*CELVOL
221 320 IF(DEGREE.NE.5) GOTO 330
222 NFUN=NFUN+2*NDIM**2+1
223 BUCKTS(7)=QUAD(NDIM,5,UMINUS,UPLUS,FUN)*CELVOL