5 * Revision 1.1.1.1 1995/10/24 10:20:49 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.28 by S.Giani
14 C. ******************************************************************
18 C. * DeVeLoPs locally the JVOLUM structure so as not to have to *
19 C. * recompute variable parameters and division specifications *
20 C. * at tracking time. *
22 C. * Called by : GGCLOS *
23 C. * Authors : S.Banerjee, F.Bruyant *
25 C. ******************************************************************
27 #include "geant321/gcbank.inc"
28 #include "geant321/gcnum.inc"
29 #include "geant321/gcunit.inc"
31 PARAMETER (NLVMAX=15, NPAMAX=50)
33 COMMON /GCDVLP/ LREF(2), JVO, LJVOM(NLVMAX), LLVODV(NLVMAX), LVODV
35 INTEGER ILINK(NLVMAX), LVAR(NPAMAX), NLINK(NLVMAX)
36 INTEGER NUMB(NLVMAX+1), NBGN(NLVMAX+1), IVOL(5200)
37 EQUIVALENCE (IVOL(1), WS(1))
41 C. ------------------------------------------------------------------
43 CALL MZLINT (IXSTOR, '/GCDVLP/', LREF, JVO, LVODV)
45 CALL MZFORM ('VODV', '1I 2F 2I -F', IOVODV)
47 * *** Create the volume tree in memory
49 IF (NVOLUM.LT.1) GO TO 990
57 NBGN(NLEV) = NBGN(NLVT) + NUMB(NLVT)
58 DO 30 I = 1, NUMB(NLVT)
59 IVO = IVOL(NBGN(NLVT) + I - 1)
66 DO 15 I1 = 1, NUMB(NLEV)
67 IVOS = IVOL(NBGN(NLEV)+I1-1)
68 IF (IVOS.EQ.IVOT) GO TO 20
70 NUMB(NLEV) = NUMB(NLEV) + 1
71 I1 = NBGN(NLEV) + NUMB(NLEV) - 1
74 ELSE IF (NIN.LT.0) THEN
77 DO 25 I1 = 1, NUMB(NLEV)
78 IVOS = IVOL(NBGN(NLEV)+I1-1)
79 IF (IVOS.EQ.IVOT) GO TO 30
81 NUMB(NLEV) = NUMB(NLEV) + 1
82 I1 = NBGN(NLEV) + NUMB(NLEV) - 1
87 IF (NUMB(NLEV).GT.0) THEN
95 * *** Loop over volumes in a given level
97 110 IF (NLEVS.GT.NLVT) GO TO 990
98 IF (NUMB(NLEVS).GT.0) THEN
99 NUMB(NLEVS) = NUMB(NLEVS) - 1
100 IVOM = IVOL(NBGN(NLEVS)+NUMB(NLEVS))
106 * *** Check if current volume should be locally developed
108 LJVOM(1) = LQ(JVOLUM-IVOM)
109 IF(LQ(LJVOM(1)).GT.0) THEN
110 CALL MZDROP(IXCONS,LQ(LJVOM(1)),'L')
113 #if defined(CERNLIB_DEBUGG)
114 WRITE (CHMAIL,2000) IQ(JVOLUM+IVOM),NIN
116 2000 FORMAT (' GGDVLP : Volume ',A4,' NIN = ',I3)
119 * ** Skip it if not a possible source of local development
121 IF (NIN.EQ.0) GO TO 110
122 IF (LQ(LJVOM(1)).NE.0) GO TO 110
123 IF (BTEST(IQ(LJVOM(1)),1)) GO TO 110
124 CALL GGVCHK (LJVOM(1), 0, NVAR, LVAR)
125 IF (NVAR.NE.0) GO TO 110
127 * ** Otherwise, analyze contents
130 IF (NIN.LT.0) GO TO 120
132 * * Current volume has contents defined by position
135 CALL GGVCHK (LJVOM(1), IN, NVAR, LVAR)
138 * In case a content is found with variable parameters,
139 * initialize development
148 * * Current volume is divided
150 120 CALL GGVCHK (LJVOM(1), 1, NVAR, LVAR)
151 IF (NVAR.EQ.0) GO TO 110
153 * If cells have variable sizes, initialize development
156 JDIV = LQ(LJVOM(1)-1)
160 200 CALL MZBOOK (IXCONS, LLVODV(1), LJVOM(1), 0, 'VODV',
161 + NLINK(1), NLINK(1), 1, 2, 1)
162 #if defined(CERNLIB_DEBUGG)
163 WRITE (CHMAIL, 2002) ILINK(1), NLINK(1), NVAR
165 2002 FORMAT (' GGDVLP : I, N, NVAR = ',3I5)
168 * *** Complete development for current content at current level
170 IF (IOK.EQ.0) GO TO 250
172 IQ(LLVODV(1)+1) = NLINK(1)
175 210 NIN = Q(LJVOM(NLEV)+3)
177 CALL GGVCHK (LJVOM(NLEV), 1, NVAR, LVAR)
179 CALL GGVCHK (LJVOM(NLEV), ILINK(NLEV), NVAR, LVAR)
181 IF (NVAR.EQ.0) GO TO 290
182 #if defined(CERNLIB_DEBUGG)
183 WRITE (CHMAIL, 2004) NLEV, ILINK(NLEV), NVAR
185 2004 FORMAT (' GGDVLP : LEVEL,I,NVAR,NIN = ',4I5)
187 IF (NIN.LT.0) GO TO 260
189 * ** Compute actual parameters for current content
191 * * Case with contents obtained by position
193 250 CALL GGPPAR (LJVOM(NLEV), ILINK(NLEV), NVAR,LVAR, LLVODV(NLEV),
195 JIN = LQ(LJVOM(NLEV)-ILINK(NLEV))
198 * * Case with contents obtained by division
200 260 CALL GGDPAR (LJVOM(NLEV), ILINK(NLEV), NVAR,LVAR, LLVODV(NLEV),
202 JIN = LQ(LJVOM(NLEV)-1)
204 * ** Initialize next level down
210 IF (NIN.NE.0) IOK = 1
215 * * Current content is divided, compute division specifications
217 CALL GGDSPE (JVO, NPAR, PAR, NL, NDIV, ORIG, STEP)
220 IQ(JVO) = IBSET(IQ(JVO),1)
221 CALL MZBOOK (IXCONS, LVODV, LLVODV(NLEV), -ILINK(NLEV), 'VODV',
222 + NL, NL, NPAR+5, IOVODV, 3)
227 #if defined(CERNLIB_DEBUGG)
228 WRITE (CHMAIL, 2006) NDIV, ORIG, STEP
230 2006 FORMAT (' GGDVLP : After GGDSPE, NDIV ORIG STEP = ',I4,2F10.4)
235 CALL UCOPY (PAR, Q(LVODV+6), NPAR)
236 #if defined(CERNLIB_DEBUGG)
239 2008 FORMAT (' GGDVLP : Store parameters into development structure')
242 290 IF (IOK.EQ.0) THEN
243 IF (ILINK(NLEV).EQ.NLINK(NLEV)) THEN
247 IF (NLEV.EQ.1) GO TO 110
252 * Analyze next content
254 ILINK(NLEV) = ILINK(NLEV) +1
258 * A new level has been initialized, start analyzing it
268 990 DO 991 IVO = 1, NVOLUM
270 IF (BTEST(IQ(JVO),1)) THEN
271 IF (LQ(JVO).GT.0) THEN
272 CALL MZDROP (IXCONS, LQ(JVO), ' ')
273 WRITE (CHMAIL, 1001) IQ(JVOLUM+IVO)
279 1001 FORMAT (' GGDVLP : Unnecessary development at volume ',A4)