5 * Revision 1.1.1.1 1999/05/18 15:55:17 fca
8 * Revision 1.1.1.1 1995/10/24 10:20:56 cernlib
12 #include "geant321/pilot.h"
13 *CMZ : 3.21/03 06/10/94 18.33.17 by S.Giani
15 SUBROUTINE GSDVT2(KNAME,MOTHER,STEP,IAXIS,C0,NUMED,NDVMX)
17 C. ******************************************************************
19 C. * Divides MOTHER into divisions called NAME along *
20 C. * axis IAXIS starting at coordinate value C0 with step *
22 C. * The new volume created will have medium number NUMED. *
23 C. * If NUMED is 0, NUMED of mother is taken. *
24 C. * NDVMX is the expected maximum number of divisions *
25 C. * (If 0, no protection tests are performed) *
27 C. * JVO=Pointer to MOTHER volume *
30 C. * Q(JDIV+1)=IAXIS *
31 C. * Q(JDIV+2)=Volume number *
32 C. * Q(JDIV+3)=Number of divisions. *
36 C. * ==>Called by : ,USER., GSDVS2, GSDVX *
37 C. * Authors F.Bruyant, M.Maire, A.McPherson ********* *
39 C. ******************************************************************
41 #include "geant321/gcbank.inc"
42 #include "geant321/gcflag.inc"
43 #include "geant321/gcnum.inc"
44 #include "geant321/gcunit.inc"
45 #include "geant321/gcdraw.inc"
46 #include "geant321/gcshno.inc"
47 CHARACTER*4 KNAME,MOTHER
48 DIMENSION PAR(100),ATT(20)
50 DATA ATT /1.,1.,1.,1.,1.,15*0./
52 C. ------------------------------------------------------------------
54 C CHECK IF VOLUME MASTER BANK EXISTS
56 CALL UCTOH(KNAME,NAME,4,4)
57 IF(JVOLUM.GT.0)GO TO 10
62 C CHECK IF MOTHER VOLUME EXISTS
64 10 CALL GLOOK(MOTHER,IQ(JVOLUM+1),NVOLUM,IVO)
66 WRITE(CHMAIL,2000)MOTHER
70 C CHECK IF NAME VOLUME EXISTS
72 20 CALL GLOOK(KNAME,IQ(JVOLUM+1),NVOLUM,IN)
74 WRITE(CHMAIL,2000)NAME
78 C CHECK IF MOTHER IS NOT DIVIDED
83 WRITE(CHMAIL,4000)MOTHER
87 C CHECK VALIDITY OF AXIS VALUE
89 60 IF(IAXIS.GT.0.AND.IAXIS.LT.4)GO TO 70
90 WRITE(CHMAIL,5000)IAXIS
94 C CHECK VALIDITY OF STEP
96 70 IF(STEP.GT.0.0)GO TO 80
97 WRITE(CHMAIL,6000)STEP
101 C CREATE BANK TO STORE DIVISION PARAMETERS
103 80 CALL MZBOOK(IXCONS,JDIV,JVO,-1,'VODI',0,0,6,3,0)
104 IF(IEOTRI.NE.0)GO TO 95
107 C NOW STORE PARAMETERS INTO BANK AREA
115 CALL GFIPAR(JVO,0,0,NPAR,NATT,PAR,ATT)
117 C CHECK START AND STEP AND FIND AND STORE NDIV.
120 IF(ISH.NE.1) GO TO 100
124 IF(PAR(IAXIS).LE.0.0) GO TO 920
125 IF(ABS(C0).GT.PAR(IAXIS)) GO TO 910
126 NDIV=(PAR(IAXIS)-C0+0.001)/STEP
127 IF (NDIV.LE.0) GO TO 910
132 IF(ISH.NE.2) GO TO 110
134 C TRAPEZOID WITH ONLY X THICKNESS VARYING WITH Z.
136 IF(IAXIS.EQ.1) GO TO 900
137 IF(PAR(IAXIS+1).LE.0.0) GO TO 920
138 IF(ABS(C0).GT.PAR(IAXIS+1)) GO TO 910
139 NDIV=(PAR(IAXIS+1)-C0+0.001)/STEP
140 IF (NDIV.LE.0) GO TO 910
147 IF(ISH.NE.3) GO TO 120
149 C TRAPEZOID WITH BOTH X AND Y THICKNESSES VARYING WITH
152 IF(IAXIS.NE.3) GO TO 900
153 IF(PAR(5).LE.0.0) GO TO 920
154 IF(ABS(C0).GT.PAR(5)) GO TO 910
155 NDIV=(PAR(5)-C0+0.001)/STEP
156 IF (NDIV.LE.0) GO TO 910
165 IF(ISH.NE.4) GO TO 125
166 IF(IAXIS.NE.3) GO TO 126
167 IF(PAR(1).LE.0.0) GO TO 920
168 IF(ABS(C0).GT.PAR(1)) GO TO 910
169 NDIV=(PAR(1)-C0+0.001)/STEP
170 IF (NDIV.LE.0) GO TO 910
180 126 IF(IAXIS.NE.2) GO TO 900
181 IF(MOD(PAR(3),180.).EQ.0.) GO TO 127
183 10100 FORMAT(' Division of TRAP ',A4,
184 + ' along Y only possible when PHI=0,180')
187 127 IF(PAR(4).EQ.PAR(8)) GO TO 128
189 10200 FORMAT(' Division of TRAP ',A4,
190 + ' along Y only possible when H1=H2')
194 IF(PAR(4).LT.0.0) GO TO 920
195 IF(ABS(C0).GE.PAR(4)) GO TO 910
196 NDIV = (PAR(4)-C0+0.001)/STEP
197 IF (NDIV.LE.0) GO TO 910
208 IF(ISH.NE.5.AND.ISH.NE.6.AND.ISH.NE.NSCTUB) GO TO 160
210 C Tube, tube segment or cut tube.
212 IF(IAXIS.NE.3) GO TO 130
213 IF(PAR(3).LE.0.0) GO TO 920
214 IF(ABS(C0).GT.PAR(3)) GO TO 910
215 NDIV=(PAR(3)-C0+0.001)/STEP
216 IF (NDIV.LE.0) GO TO 910
221 IF(IAXIS.NE.1) GO TO 140
222 IF(PAR(1).LE.0.0.OR.PAR(2).LE.0.0) GO TO 920
223 IF(C0.LT.PAR(1)) GO TO 910
224 NDIV=(PAR(2)-C0+0.001)/STEP
225 IF (NDIV.LE.0) GO TO 910
231 IF(ISH.EQ.6) GO TO 150
235 IF (NDIV.LE.0) GO TO 910
245 DC0P = MOD( ABS(DC0P), 360.0)
246 IF(SG.LE.0.0) DC0P = 360.0-DC0P
248 IF(C0-PAR(4).LT.0.0) C0=C0+360.0
249 IF(C0-PAR(4).GT.DP) GO TO 910
251 IF(DP.LT.0.0) DP=DP+360
253 IF (NDIV.LE.0) GO TO 910
260 IF(ISH.NE.7.AND.ISH.NE.8) GO TO 190
261 IF(IAXIS.EQ.1) GO TO 165
262 IF(IAXIS.NE.3) GO TO 170
264 IF(PAR(1).LE.0.0) GO TO 920
265 IF(ABS(C0).GT.PAR(1)) GO TO 910
266 NDIV=(PAR(1)-C0+0.001)/STEP
267 IF (NDIV.LE.0) GO TO 910
279 IF(IAXIS.EQ.1) GO TO 210
281 IF(ISH.EQ.8) GO TO 180
285 IF (NDIV.LE.0) GO TO 910
295 DC0P = MOD( ABS(DC0P), 360.0)
296 IF(SG.LE.0.0) DC0P = 360.0-DC0P
298 IF(C0-PAR(6).LT.0.0) C0=C0+360.0
299 IF(C0-PAR(6).GT.DP) GO TO 910
301 IF(DP.LT.0.0) DP=DP+360.0
303 IF (NDIV.LE.0) GO TO 910
309 IF(ISH.NE.9) GO TO 200
310 IF(IAXIS.NE.1) GO TO 195
315 IF(IAXIS.NE.3) GO TO 210
319 DC0P = MOD( ABS(DC0P), 360.0)
320 IF(SG.LE.0.0) DC0P = 360.0-DC0P
322 IF(C0.LT.PAR(5)) C0=C0+360.0
323 IF(C0-PAR(5).GT.DP) GO TO 910
325 IF(DP.LT.0.0) DP=DP+360
327 IF (NDIV.LE.0) GO TO 910
338 C NOW CREATE THE VOLUME FOR DIVISION
340 210 IF (NDVMX.GT.0) THEN
341 IF (NDIV.GT.NDVMX) THEN
342 WRITE (CHMAIL, 1210) NDIV,NDVMX
344 1210 FORMAT (' GSDVT2 : NDIV gt NDVMX', 2I8,' truncated')
347 ELSE IF (NDVMX.LT.0) THEN
348 * Case when called by GSDVX
349 IF (NDIV.GT.-NDVMX) NDIV = -NDVMX
356 IF(NVOLUM.GT.NVOL)CALL MZPUSH(IXCONS,JVOLUM,50,50,'I')
357 CALL MZBOOK(IXCONS,JVO,JVOLUM,-NVOLUM,'VOL1',50,50,NW,3,0)
358 IF(IEOTRI.NE.0)GO TO 95
359 IQ(JVOLUM+NVOLUM)=NAME
361 C COPY PARAMETERS IN DATA AREA
364 CALL UCOPY(Q(JVOM+1),Q(JVO+1),NWM)
365 CALL GSIPAR(JVO,0,NPAR,NATT,PAR,ATT)
368 IF (NUMED.GT.0) Q(JVO+4)=NUMED
373 C DIVIDE ACTION NOT SUPPORTED.
377 WRITE(CHMAIL,8001) ISH,IAXIS
384 C C0 START OF DIVISION OUT OF OBJECT OR STEP SIZE TOO BIG.
386 WRITE(CHMAIL,9000) C0,STEP
392 C +VE DEFINITE PARAMETER IN DIMENSION OF C0 SET -VE OR 0.
401 95 WRITE(CHMAIL,7000)NAME,MOTHER
405 1000 FORMAT(' ***** GSDVT2 CALLED AND NO VOLUMES DEFINED *****')
406 2000 FORMAT(' ***** GSDVT2 VOLUME ',A4,' ALREADY EXISTS *****')
407 3000 FORMAT(' ***** GSDVT2 ROTATION MATRIX',I5,' DOES NOT EXIST *****')
408 4000 FORMAT(' ***** GSDVT2 MOTHER ',A4,' ALREADY DIVIDED *****')
409 5000 FORMAT(' ***** GSDVT2 BAD AXIS VALUE ',I5,' *****')
410 6000 FORMAT(' ***** GSDVT2 BAD STEP SIZE ',E15.5,' *****')
411 7000 FORMAT(' ***** GSDVT2 NOT ENOUGH SPACE TO STORE DIVISIONS ',
412 + ' IN ',A4,' *****')
413 8000 FORMAT(' DIVIDE ACTION WITH C0 REQUESTED NOT SUPPORTED',
415 8001 FORMAT(' ISH =',I5,' IAXIS =',I5)
416 9000 FORMAT(' ***** GSDVT2 C0',E15.5,' OUT OF OBJECT',
417 +' OR STEP',E15.5,' TOO BIG *****')
418 9010 FORMAT(' ATTEMPT TO SPECIFY C0 WHEN APPROPRIATE DIMENSION',
419 +' OF THE MOTHER IS DEFINED -VE (TO BE SELECTED AT RUN TIME)')