]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/ggeom/gsdvt2.F
Minor corrections after big transformer changes
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / gsdvt2.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1999/05/18 15:55:17  fca
6 * AliRoot sources
7 *
8 * Revision 1.1.1.1  1995/10/24 10:20:56  cernlib
9 * Geant
10 *
11 *
12 #include "geant321/pilot.h"
13 *CMZ :  3.21/03 06/10/94  18.33.17  by  S.Giani
14 *-- Author :
15       SUBROUTINE GSDVT2(KNAME,MOTHER,STEP,IAXIS,C0,NUMED,NDVMX)
16 C.
17 C.    ******************************************************************
18 C.    *                                                                *
19 C.    *       Divides MOTHER into divisions called NAME along          *
20 C.    *        axis IAXIS starting at coordinate value C0 with step    *
21 C.    *        size 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)              *
26 C.    *                                                                *
27 C.    *          JVO=Pointer to MOTHER volume                          *
28 C.    *          JDIV=LQ(JVO-1)                                        *
29 C.    *                                                                *
30 C.    *            Q(JDIV+1)=IAXIS                                     *
31 C.    *            Q(JDIV+2)=Volume number                             *
32 C.    *            Q(JDIV+3)=Number of divisions.                      *
33 C.    *            Q(JDIV+4)=C0                                        *
34 C.    *            Q(JDIV+5)=STEP                                      *
35 C.    *                                                                *
36 C.    *    ==>Called by : ,USER., GSDVS2, GSDVX                        *
37 C.    *         Authors F.Bruyant, M.Maire,  A.McPherson  *********    *
38 C.    *                                                                *
39 C.    ******************************************************************
40 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)
49       SAVE ATT
50       DATA ATT /1.,1.,1.,1.,1.,15*0./
51 C.
52 C.    ------------------------------------------------------------------
53 C.
54 C              CHECK IF VOLUME MASTER BANK EXISTS
55 C
56       CALL UCTOH(KNAME,NAME,4,4)
57       IF(JVOLUM.GT.0)GO TO 10
58       WRITE(CHMAIL,1000)
59       CALL GMAIL(0,0)
60       GO TO 99
61 C
62 C              CHECK IF MOTHER VOLUME EXISTS
63 C
64   10  CALL GLOOK(MOTHER,IQ(JVOLUM+1),NVOLUM,IVO)
65       IF(IVO.GT.0)GO TO 20
66       WRITE(CHMAIL,2000)MOTHER
67       CALL GMAIL(0,0)
68       GO TO 99
69 C
70 C              CHECK IF NAME VOLUME EXISTS
71 C
72   20  CALL GLOOK(KNAME,IQ(JVOLUM+1),NVOLUM,IN)
73       IF(IN.LE.0)GO TO 50
74       WRITE(CHMAIL,2000)NAME
75       CALL GMAIL(0,0)
76       GO TO 99
77 C
78 C              CHECK IF MOTHER IS NOT DIVIDED
79 C
80   50  JVO=LQ(JVOLUM-IVO)
81       NIN=Q(JVO+3)
82       IF(NIN.EQ.0)GO TO 60
83       WRITE(CHMAIL,4000)MOTHER
84       CALL GMAIL(0,0)
85       GO TO 99
86 C
87 C              CHECK VALIDITY OF AXIS VALUE
88 C
89   60  IF(IAXIS.GT.0.AND.IAXIS.LT.4)GO TO 70
90       WRITE(CHMAIL,5000)IAXIS
91       CALL GMAIL(0,0)
92       GO TO 99
93 C
94 C              CHECK VALIDITY OF STEP
95 C
96   70  IF(STEP.GT.0.0)GO TO 80
97       WRITE(CHMAIL,6000)STEP
98       CALL GMAIL(0,0)
99       GO TO 99
100 C
101 C               CREATE BANK TO STORE DIVISION PARAMETERS
102 C
103   80  CALL MZBOOK(IXCONS,JDIV,JVO,-1,'VODI',0,0,6,3,0)
104       IF(IEOTRI.NE.0)GO TO 95
105       IQ(JDIV-5)=IVO
106 C
107 C               NOW STORE PARAMETERS INTO BANK AREA
108 C
109   90  Q(JDIV+1)=IAXIS
110       Q(JDIV+2)=NVOLUM+1
111       Q(JVO+3)=-1
112       IVOM= IVO
113       NWM = IQ(JVO-1)
114       NW  = NWM
115       CALL GFIPAR(JVO,0,0,NPAR,NATT,PAR,ATT)
116 C
117 C              CHECK START AND STEP AND FIND AND STORE NDIV.
118 C
119       ISH=Q(JVO+2)
120       IF(ISH.NE.1) GO TO 100
121 C
122 C               BOX
123 C
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
128       PAR(IAXIS)=STEP/2.
129       GO TO 210
130 C
131   100 CONTINUE
132       IF(ISH.NE.2) GO TO 110
133 C
134 C              TRAPEZOID WITH ONLY X THICKNESS VARYING WITH Z.
135 C
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
141       PAR(1)=-1.
142       PAR(2)=-1.
143       PAR(IAXIS+1)=STEP/2.
144       GO TO 210
145 C
146   110 CONTINUE
147       IF(ISH.NE.3) GO TO 120
148 C
149 C              TRAPEZOID WITH BOTH X AND Y THICKNESSES VARYING WITH
150 C              Z
151 C
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
157       PAR(1)=-1.
158       PAR(2)=-1.
159       PAR(3)=-1.
160       PAR(4)=-1.
161       PAR(5)=STEP/2.
162       GO TO 210
163 C
164   120 CONTINUE
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
171       PAR(1)=STEP*0.5
172       PAR(4)=-1.0
173       PAR(5)=-1.0
174       PAR(6)=-1.0
175       PAR(8)=-1.0
176       PAR(9)=-1.0
177       PAR(10)=-1.0
178       GO TO 210
179 C
180   126 IF(IAXIS.NE.2) GO TO 900
181       IF(MOD(PAR(3),180.).EQ.0.) GO TO 127
182       WRITE(CHMAIL,10100)
183 10100 FORMAT(' Division of TRAP ',A4,
184      +    ' along Y only possible when PHI=0,180')
185       CALL GMAIL(0,0)
186       GOTO 99
187   127 IF(PAR(4).EQ.PAR(8))  GO TO 128
188       WRITE(CHMAIL,10200)
189 10200 FORMAT(' Division of TRAP ',A4,
190      +    ' along Y only possible when H1=H2')
191       CALL GMAIL(0,0)
192       GOTO 99
193   128 CONTINUE
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
198       PAR(4) = 0.5*STEP
199       PAR(5) = -1.
200       PAR(6) = -1.
201       PAR(8) = 0.5*STEP
202       PAR(9) = -1.
203       PAR(10) = -1.
204 C
205       GO TO 210
206 C
207   125 CONTINUE
208       IF(ISH.NE.5.AND.ISH.NE.6.AND.ISH.NE.NSCTUB) GO TO 160
209 C
210 C              Tube, tube segment or cut tube.
211 C
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
217       PAR(3)=STEP/2.
218       GO TO 210
219 C
220   130 CONTINUE
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
226       PAR(1)=-1.
227       PAR(2)=-1.
228       GO TO 210
229 C
230   140 CONTINUE
231       IF(ISH.EQ.6) GO TO 150
232       NW=NW+2
233       ISH=6
234       NDIV=360.001/STEP
235       IF (NDIV.LE.0) GO TO 910
236       NPAR=5
237       PAR(4)=-STEP/2.
238       PAR(5)=STEP/2.
239       GO TO 210
240 C
241   150 CONTINUE
242       DP=PAR(5)-PAR(4)
243       DC0P = C0-PAR(4)
244       SG = SIGN(1.0,DC0P)
245       DC0P = MOD( ABS(DC0P), 360.0)
246       IF(SG.LE.0.0) DC0P = 360.0-DC0P
247       C0 = PAR(4)+DC0P
248       IF(C0-PAR(4).LT.0.0) C0=C0+360.0
249       IF(C0-PAR(4).GT.DP) GO TO 910
250       DP=PAR(5)-C0
251       IF(DP.LT.0.0) DP=DP+360
252       NDIV=(DP+0.001)/STEP
253       IF (NDIV.LE.0) GO TO 910
254       PAR(4)=-STEP/2.
255       PAR(5)=STEP/2.
256       GO TO 210
257 C
258   160 CONTINUE
259 C
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
263 C
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
268       PAR(1)=STEP*0.5
269 C
270   165 CONTINUE
271 C
272       PAR(2)=-1.0
273       PAR(3)=-1.0
274       PAR(4)=-1.0
275       PAR(5)=-1.0
276       GO TO 210
277 C
278   170 CONTINUE
279       IF(IAXIS.EQ.1) GO TO 210
280 C
281       IF(ISH.EQ.8) GO TO 180
282       NW=NW+2
283       ISH=8
284       NDIV=360.001/STEP
285       IF (NDIV.LE.0) GO TO 910
286       NPAR=7
287       PAR(6)=-STEP/2.
288       PAR(7)=STEP/2.
289       GO TO 210
290 C
291   180 CONTINUE
292       DP=PAR(7)-PAR(6)
293       DC0P = C0-PAR(6)
294       SG = SIGN(1.0,DC0P)
295       DC0P = MOD( ABS(DC0P), 360.0)
296       IF(SG.LE.0.0) DC0P = 360.0-DC0P
297       C0 = PAR(6)+DC0P
298       IF(C0-PAR(6).LT.0.0) C0=C0+360.0
299       IF(C0-PAR(6).GT.DP) GO TO 910
300       DP=PAR(7)-C0
301       IF(DP.LT.0.0) DP=DP+360.0
302       NDIV=(DP+0.001)/STEP
303       IF (NDIV.LE.0) GO TO 910
304       PAR(6)=-STEP/2.
305       PAR(7)=STEP/2.
306       GO TO 210
307 C
308   190 CONTINUE
309       IF(ISH.NE.9) GO TO 200
310       IF(IAXIS.NE.1) GO TO 195
311       PAR(1)=-1.0
312       PAR(2)=-1.0
313   195 CONTINUE
314 C
315       IF(IAXIS.NE.3) GO TO 210
316       DP=PAR(6)-PAR(5)
317       DC0P = C0-PAR(4)
318       SG = SIGN(1.0,DC0P)
319       DC0P = MOD( ABS(DC0P), 360.0)
320       IF(SG.LE.0.0) DC0P = 360.0-DC0P
321       C0 = PAR(4)+DC0P
322       IF(C0.LT.PAR(5)) C0=C0+360.0
323       IF(C0-PAR(5).GT.DP) GO TO 910
324       DP=PAR(6)-C0
325       IF(DP.LT.0.0) DP=DP+360
326       NDIV=(DP+0.001)/STEP
327       IF (NDIV.LE.0) GO TO 910
328       PAR(3)=-1.
329       PAR(4)=-1.
330       PAR(5)=-0.5*STEP
331       PAR(6)=0.5*STEP
332       GO TO 210
333 C
334   200 CONTINUE
335 C
336       GO TO 900
337 C
338 C                NOW CREATE THE VOLUME FOR DIVISION
339 C
340  210  IF (NDVMX.GT.0) THEN
341          IF (NDIV.GT.NDVMX) THEN
342             WRITE (CHMAIL, 1210) NDIV,NDVMX
343             CALL GMAIL(0,0)
344  1210    FORMAT (' GSDVT2 : NDIV gt NDVMX', 2I8,'  truncated')
345             NDIV = NDVMX
346         ENDIF
347       ELSE IF (NDVMX.LT.0) THEN
348 *       Case when called by GSDVX
349          IF (NDIV.GT.-NDVMX) NDIV = -NDVMX
350       ENDIF
351       Q(JDIV+4)=C0
352       Q(JDIV+5)=STEP
353       Q(JDIV+3)=NDIV
354       NVOLUM=NVOLUM+1
355       NVOL  =IQ(JVOLUM-2)
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
360 C
361 C              COPY PARAMETERS IN DATA AREA
362 C
363       JVOM=LQ(JVOLUM-IVOM)
364       CALL UCOPY(Q(JVOM+1),Q(JVO+1),NWM)
365       CALL GSIPAR(JVO,0,NPAR,NATT,PAR,ATT)
366       Q(JVO+2)=ISH
367       Q(JVO+3)=0.
368       IF (NUMED.GT.0) Q(JVO+4)=NUMED
369       GO TO 99
370 C
371   900 CONTINUE
372 C
373 C        DIVIDE ACTION NOT SUPPORTED.
374 C
375       WRITE(CHMAIL,8000)
376       CALL GMAIL(0,0)
377       WRITE(CHMAIL,8001) ISH,IAXIS
378       CALL GMAIL(0,0)
379 C
380       GO TO 99
381 C
382   910 CONTINUE
383 C
384 C              C0 START OF DIVISION OUT OF OBJECT OR STEP SIZE TOO BIG.
385 C
386       WRITE(CHMAIL,9000) C0,STEP
387       CALL GMAIL(0,0)
388 C
389       GO TO 99
390   920 CONTINUE
391 C
392 C              +VE DEFINITE PARAMETER IN DIMENSION OF C0 SET -VE OR 0.
393 C
394       WRITE(CHMAIL,9010)
395       CALL GMAIL(0,0)
396 C
397       GO TO 99
398 C
399 C              NOT ENOUGH SPACE
400 C
401   95  WRITE(CHMAIL,7000)NAME,MOTHER
402       CALL GMAIL(0,0)
403 C
404   99  CONTINUE
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',
414      +' AT PRESENT.')
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)')
420       END