]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HERWIG/jimmy/divon4/partn.F
make scan of dEdx blocks consistent, there is only one block
[u/mrichter/AliRoot.git] / HERWIG / jimmy / divon4 / partn.F
CommitLineData
ef94df36 1*CMZ : 26/08/93 16.47.55 by Jonathan Butterworth
2*-- Author :
3 SUBROUTINE PARTN (NDIM,GMINUS,GPLUS,GOOD,MAXFUN)
4 INTEGER NDIM, NPOINT, MAXFUN
5 REAL FLOBD, FUPBD, GOOD
6 REAL GMINUS(10), GPLUS(10)
7 COMMON /D151DT/ IDATE /PRINT/ IPRINT
8 REAL*8 IDATE
9 COMMON /ISTRGE/ MXRGNS,TREE(4,1),DUMMY1(11996)
10 INTEGER MXRGNS, TREE
11 COMMON /RSTRGE/ RSTSZE,PRTNS(18001)
12 INTEGER RSTSZE
13 COMMON /MLIMIT/ MFLAG
14 LOGICAL MFLAG
15 COMMON /TRESZE/ ENTREE,ENTBUC
16 INTEGER ENTREE, ENTBUC
17 COMMON /START/ ISTART
18 INTEGER ISTART
19 COMMON /EXFILE/ NFILE
20 INTEGER NFILE
21 COMMON /DISPOS/ IDISP
22 INTEGER IDISP
23 COMMON /QUADRE/ IDEG
24 INTEGER IDEG
25 COMMON /BUKSZE/ MAXWRD
26 INTEGER MAXWRD
27 COMMON /GENINL/ INLGEN
28 INTEGER INLGEN
29 COMMON /LIMITS/ QMINUS(10),QPLUS(10)
30 COMMON /SAMPLE/ NPOINT
31 COMMON /BNDLMT/ FLOBD,FUPBD
32 REAL UMINUS(10),UPLUS(10)
33 INTEGER MAXDPH,PARENT
34 INTEGER TARGET,MAXBUC,NEWENT,OLDSTR,NEWBUC,NEWEND,EXMBUC
35 INTEGER NXRGNS,NEEDST,NMOVE
36 SAVE
37
38C INITIALISATION OF CONSTANTS
39 CALL DVNBKD
40C
41 IF(NDIM.LE.10) GOTO 20
42 WRITE(6,10) NDIM
43 10 FORMAT('0DIMENSION = ',I5,' IS LARGER THAN UPPER LIMIT SET AT',
44 1' COMPILE TIME.')
45 STOP
46 20 DO 30 I=1,NDIM
47 QMINUS(I)=GMINUS(I)
48 QPLUS(I)=GPLUS(I)
49 30 CONTINUE
50 MAXWRD=4
51 IF(IDEG.EQ.1) MAXWRD=7
52 IF(IDEG.GE.2) MAXWRD=MAXWRD+1
53 IF(IDEG.GE.3) MAXWRD=MAXWRD+1
54 IF(IDEG.EQ.5) MAXWRD=MAXWRD+1
55 NEEDST=MXRGNS*(MAXWRD+1)+MAX((NDIM+1)*(NPOINT+5),MXRGNS)+1
56 IF(NEEDST.LE.RSTSZE) GOTO 40
57 NEEDST=RSTSZE-1
58 MXRGNS=NEEDST/(MAXWRD+2)
59 IF(MXRGNS.LT.(NDIM+1)*(NPOINT+5)) MXRGNS=(NEEDST-(NDIM+1)*(NPOINT
60 1+5))/(MAXWRD+1)
61 40 IF(ISTART.NE.2.AND.ISTART.NE.3) ISTART=1
62 INLGEN=NPOINT
63 IF(IPRINT.EQ.0) GOTO 120
64 WRITE(6,50) IDATE
65 50 FORMAT('1PARTN VERSION OF ',A8)
66 WRITE(6,60) NDIM,GOOD,MAXFUN
67 60 FORMAT(1X,I2,' DIMENSIONS. MAXIMUM RSS SPREAD OF',G13.5/
68 1 ' WITH A MAXIMUM OF ',I6,' INTEGRAND EVALUATIONS.')
69 IF(ISTART.NE.1) GOTO 80
70 WRITE(6,70)
71 70 FORMAT(' BEGIN PARTITIONING.')
72 GOTO 120
73 80 IF(ISTART.NE.3) GOTO 100
74 WRITE(6,90) NFILE
75 90 FORMAT(' CONTINUE PARTITIONING READ FROM TAPE',I2)
76 GOTO 120
77 100 IF(ISTART.NE.2) GOTO 120
78 WRITE(6,110)
79 110 FORMAT(' PARTITIONING CONTINUES.')
80 120 MFLAG=.FALSE.
81 IRM=18001-MXRGNS
82 I=EXMBUC(1,NDIM,PRTNS(MXRGNS+1),GOOD,MAXFUN,MAXDPH,IRM)
83 IF(ISTART.NE.1) GOTO 140
84 ENTREE=1
85 ENTBUC=ENTREE
86 MXWDSV=MAXWRD
87 NXRGNS=MXRGNS
88 DO 130 I=1,NDIM
89 UPLUS(I)=GPLUS(I)
90 UMINUS(I)=GMINUS(I)
91 130 CONTINUE
92 IMR=18001-MXRGNS
93 CALL RECPARZ
94 1(NDIM,UMINUS,UPLUS,FLOBD,FUPBD,MAXDPH,ENTREE,TREE,PRTN
95 1S,ENTBUC,PRTNS(MXRGNS+1),IMR)
96 GOTO 160
97 140 IF(ISTART.NE.3) GOTO 160
98 READ (NFILE) ENTREE,INFO,NXRGNS,MXWDSV,((TREE(I,J),I=1,4),J=1,ENTR
99 1EE),(PRTNS(J),J=1,INFO)
100 ENTBUC=(INFO-NXRGNS)/MXWDSV
101 IF(ENTREE.EQ.ENTBUC-1) GOTO 160
102 WRITE(6,150) NFILE
103 150 FORMAT(' INCONSISTENT INFORMATION ON TAPE',I2)
104 STOP
105 160 IF(NXRGNS.EQ.MXRGNS) GOTO 230
106 NMOVE=MXWDSV*NXRGNS
107 IF(NXRGNS.LE.MXRGNS) GOTO 200
108 IF(ENTBUC.LT.MXRGNS) GOTO 180
109 WRITE(6,170) MXRGNS,ENTBUC
110 170 FORMAT(' MAXIMUM NUMBER OF REGIONS ',I5,' IS TOO SMALL.'/
111 1 ' RESET TO GREATER THAN ',I5,'.')
112 STOP
113 180 DO 190 I=1,NMOVE
114 PRTNS(I+MXRGNS)=PRTNS(I+NXRGNS)
115 190 CONTINUE
116 GOTO 230
117 200 I=NMOVE
118 GOTO 220
119 210 I=I+(-1)
120 220 IF((-1)*((I)-(1)).GT.0) GOTO 230
121 PRTNS(I+MXRGNS)=PRTNS(I+NXRGNS)
122 GOTO 210
123 230 IF(MXWDSV.EQ.MAXWRD) GOTO 300
124 IF(MXWDSV.GE.MAXWRD) GOTO 270
125 I=ENTBUC
126 GOTO 250
127 240 I=I+(-1)
128 250 IF((-1)*((I)-(1)).GT.0) GOTO 300
129 DO 260 J=1,MXWDSV
130 PRTNS(MAXWRD*(I-1)+J+MXRGNS)=PRTNS(MXWDSV*(I-1)+J+MXRGNS)
131 260 CONTINUE
132 GOTO 240
133 270 DO 290 I=1,ENTBUC
134 DO 280 J=1,MAXWRD
135 PRTNS(MAXWRD*(I-1)+J+MXRGNS)=PRTNS(MXWDSV*(I-1)+J+MXRGNS)
136 280 CONTINUE
137 290 CONTINUE
138 300 TARGET=EXMBUC(ENTBUC,NDIM,PRTNS(MXRGNS+1),GOOD,MAXFUN,MAXDPH,IRM)
139 IF(TARGET.EQ.0) GOTO 350
140 PARENT=1
141 DO 310 I=1,NDIM
142 UPLUS(I)=GPLUS(I)
143 UMINUS(I)=GMINUS(I)
144 310 CONTINUE
145 CALL BOUNDS(TARGET,PARENT,TREE,PRTNS,UMINUS,UPLUS)
146 NEWENT=ENTREE+1
147 NEWBUC=ENTBUC+1
148 IMR=18001-MXRGNS
149 CALL RECPARZ
150 1(NDIM,UMINUS,UPLUS,FLOBD,FUPBD,MAXDPH,NEWENT,TREE,PRTN
151 1S,NEWBUC,PRTNS(MXRGNS+1),IMR)
152 IF(.NOT.(MFLAG)) GOTO 330
153 WRITE(6,320) MXRGNS
154 320 FORMAT(' STORAGE LIMIT ',I6,' REACHED.')
155 GOTO 350
156 330 IF(NEWBUC.EQ.ENTBUC+1) GOTO 350
157 MAXBUC=NEWBUC
158 PARENT=ENTREE+1
159 OLDSTR=ENTBUC+1
160 NEWBUC=TARGET
161 CALL TREAUD(PARENT,OLDSTR,NEWBUC,MAXBUC-ENTBUC+NEWBUC-1,TREE)
162 NEWEND=NEWBUC
163 IF(TARGET.GE.ENTBUC) GOTO 340
164 PARENT=1
165 OLDSTR=TARGET+1
166 NEWBUC=NEWBUC+1
167 CALL TREAUD(PARENT,OLDSTR,NEWBUC,MAXBUC-1,TREE)
168 340 PARENT=1
169 CALL NODAUD(PARENT,TARGET,ENTREE+1,NEWEND,TREE)
170 I11=18001-MAXWRD*MXRGNS-MXRGNS
171 I12=18001-MXRGNS
172 CALL BUCMVE(TARGET,NEWEND,ENTBUC+1,PRTNS(MAXWRD*MXRGNS+MXRGNS+1),
173 1PRTNS(MXRGNS+1),I11,I12)
174 ENTBUC=MAXBUC-1
175 ENTREE=NEWENT
176 GOTO 300
177 350 MXWDSV=MAXWRD
178 NXRGNS=MXRGNS
179 IF(IDISP.EQ.0) RETURN
180 INFO=MXRGNS+MAXWRD*ENTBUC
181 REWIND NFILE
182 WRITE(NFILE) ENTREE,INFO,MXRGNS,MAXWRD,((TREE(I,J),I=1,4),J=1,ENT
183 1REE),(PRTNS(J),J=1,INFO)
184 END FILE NFILE
185 IF(IPRINT.EQ.0) GOTO 370
186 WRITE(6,360) NFILE
187 360 FORMAT(' INFORMATION FOR RESTART WRITTEN ON TAPE',I2)
188 370 RETURN
189 END