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
12 SUBROUTINE GGDPAR (JVOM, IN, NVAR, LVAR, LVOM, NPAR, PAR)
14 C. ******************************************************************
16 C. * SUBR. GGDPAR (JVOM,IN,NVAR,LVAR,LVOM,NPAR*,PAR*) *
18 C. * Computes the actual parameters for the IN'th division of the *
19 C. * mother volume at address JVOM *
20 C. * Returns the set of actual parameters in NPAR, PAR *
22 C. * Called by : GGDVLP *
23 C. * Author : S.Banerjee *
24 C. * (Original algorithms of A.McPherson) *
26 C. ******************************************************************
28 #include "geant321/gcbank.inc"
29 #include "geant321/gcflag.inc"
30 #include "geant321/gcunit.inc"
34 DIMENSION LVAR(*), PAR(*)
40 DATA LAX / 1, 2, 3, 7*0, 1, 1, 2, 3, 6*0, 1, 1, 2, 2, 3, 5*0,
41 + 3, 0, 0, 2, 1, 1, 0, 2, 1, 1, 1, 1, 3, 7*0,
42 + 1, 1, 3, 2, 2, 5*0, 3, 1, 1, 1, 1, 5*0,
43 + 3, 1, 1, 1, 1, 2, 2, 3*0, 1, 1, 2, 2, 6*0,
44 + 1, 2, 3, 7*0, 2, 2, 0, 0, 3, 1, 1, 3, 1, 1,
45 + 2, 2, 0, 3, 1, 1, 3, 1, 1, 0/
47 C. ------------------------------------------------------------------
49 * *** Prepares parameters for mother, in PARM, for division, in PAR
50 * and the division parameters
53 IF (LQ(JVOM).EQ.LVOM) THEN
55 * Case when current volume is source of local development
58 CALL UCOPY (Q(JVOM+7), PARM, NPARM)
67 CALL UCOPY (Q(LVOM+6), PARM, NPARM)
75 ORI = ORIG + (IN - 1) * STEP
82 * *** Prepare the division parameters
85 CALL UCOPY (Q(JVO+7), PAR, NPAR)
88 CALL UCOPY (PARM, PAR, NPARM)
90 * ** Special treatment for phi divisions (when NPAR=0)
92 IF ((ISHM.GE.5.AND.ISHM.LE.8.AND.IAXIS.EQ.2) .OR.
93 + (ISHM.GE.11.AND.ISHM.LE.12.AND.IAXIS.EQ.2) .OR.
94 + (ISHM.EQ.9.AND.IAXIS.EQ.3)) THEN
95 IF (ISHM.EQ.5.OR.ISHM.EQ.7) THEN
97 PAR(NPAR-1) = -0.5 * STEP
98 PAR(NPAR) = 0.5 * STEP
99 ELSE IF (ISHM.EQ.6.OR.ISHM.EQ.8) THEN
100 DP = PARM(NPAR) - PARM(NPAR-1)
101 IF (DP.LT.0.0) DP = DP + 360.0
102 IF (ORIG-PARM(NPAR-1).LT.0.0) ORIG = ORIG + 360.0
103 IF (ORIG-PARM(NPAR-1).GT.DP ) GO TO 910
104 DP = PARM(NPAR) - ORIG
105 IF (DP.LT.0.0) DP = DP + 360.0
106 PAR(NPAR-1) = -0.5 * DP / NDIV
107 PAR(NPAR ) = 0.5 * DP / NDIV
108 ELSE IF (ISHM.EQ.11.OR.ISHM.EQ.12) THEN
109 IF (ISHM.EQ.11) NDIV = PARM(3)
110 STEP = PARM(2) / NDIV
114 ELSE IF (ISHM.EQ.9) THEN
115 DP = PARM(6) - PARM(5)
116 IF (DP.LT.0.0) DP = DP + 360.0
117 IF (ORIG-PARM(5).LT.0.0) ORIG = ORIG + 360.0
118 IF (ORIG-PARM(5).GT.DP ) GO TO 910
120 IF (DP.LT.0.0) DP = DP + 360.0
121 PAR(5) = -0.5 * DP / NDIV
122 PAR(6) = 0.5 * DP / NDIV
126 IF (NVAR.LE.0) GO TO 999
128 * *** Compute the actual parameters
137 IF (IAX.EQ.IAXIS) THEN
147 ELSE IF (ISHM.EQ.2) THEN
154 IF (LAX(IAX,ISH).EQ.IAXIS) THEN
155 PAR(IAX) = 0.5 * STEP
156 ELSE IF (LAX(IAX,ISH).EQ.1.AND.IAXIS.EQ.3) THEN
158 DXDZ = 0.5 * (PARM(2) - PARM(1)) / PARM(4)
159 IF (IAX.EQ.2) ZZ = ZZ + STEP
160 PAR(IAX) = PARM(1) + DXDZ * ZZ
169 ELSE IF (ISHM.EQ.3) THEN
173 IF (ISH.EQ.3.AND.IAXIS.EQ.3) THEN
176 IF (LAX(IAX,ISH).EQ.IAXIS) THEN
177 PAR(IAX) = 0.5 * STEP
179 IP1 = 2 * LAX(IAX,ISH) - 1
182 DXDZ = 0.5 * (PARM(IP2) - PARM(IP1)) / PARM(5)
183 IF (IAX.EQ.IP2) ZZ = ZZ + STEP
184 PAR(IAX) = PARM(IP1) + DXDZ * ZZ
187 ELSE IF (ISH.EQ.3) THEN
193 ELSE IF (ISHM.EQ.4) THEN
197 IF (ISH.EQ.4.AND.IAXIS.NE.1) THEN
202 PAR(IAX) = 0.5 * STEP
203 ELSE IF (IAX.LE.6) THEN
205 DPDZ = 0.5 * (PARM(IAX+4) - PARM(IAX)) / PARM(1)
206 PAR(IAX) = PARM(IAX) + DPDZ * ZZ
208 ZZ = ORI + PARM(1) + STEP
209 DPDZ = 0.5 * (PARM(IAX) - PARM(IAX-4)) / PARM(1)
210 PAR(IAX) = PARM(IAX-4) + DPDZ * ZZ
213 HTAL = PARM(8) * PARM(11)
214 HTAH = PARM(4) * PARM(7)
215 ZZ1 = 0.5 * (ORI + PARM(1)) / PARM(1)
216 ZZ2 = 0.5 * (ORI + PARM(1) + STEP) / PARM(1)
217 PAR(7) = (HTAL*(1.0-ZZ1) + HTAH*ZZ1) / PARM(4)
218 PAR(11)= (HTAL*(1.0-ZZ2) + HTAH*ZZ2) / PARM(8)
220 ELSE IF (IAXIS.EQ.2) THEN
222 PAR(LVAR(I)) = PARM(LVAR(I))
224 DXDY1 = 0.5*(PARM(6)-PARM(5))/PARM(4)
225 DXDY2 = 0.5*(PARM(10)-PARM(9))/PARM(8)
226 DXM1 = 0.5*(PARM(6)+PARM(5))
227 DXM2 = 0.5*(PARM(10)+PARM(9))
228 DXH1 = DXM1+(ORI+STEP)*DXDY1
229 DXH2 = DXM2+(ORI+STEP)*DXDY2
230 DXL1 = DXM1+ORI*DXDY1
231 DXL2 = DXM2+ORI*DXDY2
237 ELSE IF (ISH.EQ.4) THEN
243 ELSE IF (ISHM.EQ.5 .OR. ISHM.EQ.6) THEN
247 IF (ISH.EQ.5 .OR. ISH.EQ.6) THEN
250 IF (LAX(IAX,ISH).EQ.IAXIS) THEN
252 PAR(IAX) = 0.5 * STEP
253 ELSE IF (IAXIS.EQ.1) THEN
257 PAR(IAX) = ORI + STEP
270 ELSE IF (ISHM.EQ.7 .OR. ISHM.EQ.8) THEN
274 IF (ISH.EQ.7 .OR. ISH.EQ.8) THEN
277 IF (LAX(IAX,ISH).EQ.IAXIS .AND. IAXIS.EQ.3) THEN
278 PAR(IAX) = 0.5 * STEP
279 ELSE IF (IAXIS.EQ.3.AND.IAX.GT.1.AND.IAX.LT.6) THEN
280 IF (IAX.EQ.2.OR.IAX.EQ.4) THEN
281 DP = 0.5 * (PARM(4) - PARM(2)) / PARM(1)
282 PM = 0.5 * (PARM(4) + PARM(2))
284 DP = 0.5 * (PARM(5) - PARM(3)) / PARM(1)
285 PM = 0.5 * (PARM(5) + PARM(3))
292 PAR(IAX) = PM + DP * DZ
293 ELSE IF (IAXIS.EQ.1.AND.LAX(IAX,ISH).EQ.IAXIS) THEN
296 ELSE IF (IAX.EQ.3) THEN
297 PAR(IAX) = ORI + STEP
298 ELSE IF (IAX.EQ.4) THEN
299 PAR(IAX) = ORI * PARM(IAX) / PARM(2)
301 PAR(IAX) = (ORI + STEP) * PARM(IAX) / PARM(3)
311 ELSE IF (ISHM.EQ.9) THEN
318 IF (LAX(IAX,ISH).EQ.IAXIS) THEN
319 IF (MOD(IAX,2).NE.0) THEN
322 PAR(IAX) = ORI + STEP
332 ELSE IF (ISHM.EQ.10) THEN
339 IF (LAX(IAX,ISH).EQ.IAXIS) THEN
340 PAR(IAX) = 0.5 * STEP
347 ELSE IF (ISHM.EQ.11 .OR. ISHM.EQ.12) THEN
351 IF (ISH.EQ.ISHM) THEN
364 IAX1 = IPNZ + 3*I - 1
370 PAR(IAX1) = RMN * PARM(IAX1) / PARM(IPNZ+2)
371 PAR(IAX2) = RMX * PARM(IAX2) / PARM(IPNZ+3)
374 ELSE IF (IAXIS.EQ.2) THEN
379 ELSE IF (NZ.EQ.2.AND.IAXIS.EQ.3) THEN
383 DRMIDZ = (PARM(IPNZ+5)-PARM(IPNZ+2))/DZ
384 DRMADZ = (PARM(IPNZ+6)-PARM(IPNZ+3))/DZ
385 PAR(IPNZ+1) = -0.5 * STEP
386 PAR(IPNZ+4) = 0.5 * STEP
390 RAD = PARM(IPNZ+2)+(IN-1)*STEP*DRMIDZ
391 ELSEIF (IAX.EQ.3) THEN
392 RAD = PARM(IPNZ+3)+(IN-1)*STEP*DRMADZ
393 ELSEIF (IAX.EQ.5) THEN
394 RAD = PARM(IPNZ+2)+IN*STEP*DRMIDZ
395 ELSEIF (IAX.EQ.6) THEN
396 RAD = PARM(IPNZ+3)+IN*STEP*DRMADZ
416 900 WRITE (CHMAIL, 1001) ISH, ISHM
419 910 WRITE (CHMAIL, 1002) ISH, ISHM, IAXIS
422 920 WRITE (CHMAIL, 1003) ISH, NZ, ISHM, NZ1
424 990 CALL GMAIL( 0, 0)
427 1001 FORMAT (' GGDPAR : Not accepted ISH,ISHM=',2I5)
428 1002 FORMAT (' GGDPAR : Not accepted ISH,ISHM,IAXIS=',3I5)
429 1003 FORMAT (' GGDPAR : Not accepted ISH,NZ,ISHM,NZ1=',4I5)