]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/ggeom/gsdvn2.F
Minor corrections after big transformer changes
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / gsdvn2.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
d43b40e2 5* Revision 1.1.1.1 1999/05/18 15:55:17 fca
6* AliRoot sources
7*
fe4da5cc 8* Revision 1.1.1.1 1995/10/24 10:20:55 cernlib
9* Geant
10*
11*
12#include "geant321/pilot.h"
13*CMZ : 3.21/02 29/03/94 15.41.30 by S.Giani
14*-- Author :
15 SUBROUTINE GSDVN2(KNAME,MOTHER,NDIV,IAXIS,C0I,NUMED)
16C.
17C. ******************************************************************
18C. * *
19C. * DIVIDES MOTHER INTO NDIV DIVISIONS CALLED NAME *
20C. * ALONG AXIS IAXIS STARTING AT COORDINATE VALUE C0. *
21C. * THE NEW VOLUME CREATED WILL BE MEDIUM NUMBER NUMED. *
22C. * *
23C. * JVO=POINTER TO MOTHER VOLUME *
24C. * JDIV=LQ(JVO-1) *
25C. * *
26C. * Q(JDIV+1)=IAXIS *
27C. * Q(JDIV+2)=VOLUME NUMBER *
28C. * Q(JDIV+3)=NDIV *
29C. * Q(JDIV+4)=C0 *
30C. * Q(JDIV+5)=STEP SIZE IN COORDINATES. *
31C. * *
32C. * ==>Called by : <USER>, GSDVX *
33C. * Authors F.Bruyant, A.McPherson ********* *
34C. * *
35C. ******************************************************************
36C.
37#include "geant321/gcbank.inc"
38#include "geant321/gcflag.inc"
39#include "geant321/gcnum.inc"
40#include "geant321/gcunit.inc"
41#include "geant321/gcdraw.inc"
42#include "geant321/gcshno.inc"
43 CHARACTER*4 KNAME,MOTHER
d43b40e2 44 DIMENSION PAR(100),ATT(20)
fe4da5cc 45 SAVE ATT
46 DATA ATT /1.,1.,1.,1.,1.,15*0./
47C.
48C. ------------------------------------------------------------------
49C.
50C CHECK IF VOLUME MASTER BANK EXISTS
51C
52 CALL UCTOH(KNAME,NAME,4,4)
53 IF(JVOLUM.GT.0)GO TO 10
54 WRITE(CHMAIL,1000)
55 CALL GMAIL(0,0)
56 GO TO 99
57C
58C CHECK IF MOTHER VOLUME EXISTS
59C
60 10 CALL GLOOK(MOTHER,IQ(JVOLUM+1),NVOLUM,IVO)
61 IF(IVO.GT.0)GO TO 20
62 WRITE(CHMAIL,2000)MOTHER
63 CALL GMAIL(0,0)
64 GO TO 99
65C
66C CHECK IF NAME VOLUME EXISTS
67C
68 20 CALL GLOOK(KNAME,IQ(JVOLUM+1),NVOLUM,IN)
69 IF(IN.LE.0)GO TO 50
70 WRITE(CHMAIL,2000)NAME
71 CALL GMAIL(0,0)
72 GO TO 99
73C
74C CHECK IF MOTHER IS NOT DIVIDED
75C
76 50 JVO=LQ(JVOLUM-IVO)
77 NIN=Q(JVO+3)
78 IF(NIN.EQ.0)GO TO 60
79 WRITE(CHMAIL,4000)MOTHER
80 CALL GMAIL(0,0)
81 GO TO 99
82C
83C CHECK VALIDITY OF AXIS VALUE
84C
85 60 IF(IAXIS.GT.0.AND.IAXIS.LT.4)GO TO 70
86 WRITE(CHMAIL,5000)IAXIS
87 CALL GMAIL(0,0)
88 GO TO 99
89C
90C CHECK VALIDITY OF NDIV
91C
92 70 IF(NDIV.GT.0)GO TO 80
93 WRITE(CHMAIL,6000)NDIV
94 CALL GMAIL(0,0)
95 GO TO 99
96C
97C CREATE BANK TO STORE DIVISION PARAMETERS
98C
99 80 CALL MZBOOK(IXCONS,JDIV,JVO,-1,'VODI',0,0,6,3,0)
100 IF(IEOTRI.NE.0)GO TO 95
101 IQ(JDIV-5)=IVO
102C
103C NOW STORE PARAMETERS INTO BANK AREA
104C
105 90 Q(JDIV+1)=IAXIS
106 Q(JDIV+2)=NVOLUM+1
107 Q(JDIV+3)=NDIV
108 Q(JVO+3)=-1
109 IVOM= IVO
110 NWM = IQ(JVO-1)
111 NW = NWM
112 CALL GFIPAR(JVO,0,0,NPAR,NATT,PAR,ATT)
113C
114C CHECK START AND FIND AND STORE STEP.
115C
116 ISH=Q(JVO+2)
117 C0 = C0I
118 IF(ISH.NE.1) GO TO 100
119C
120C BOX
121C
122 IF(PAR(IAXIS).LE.0.0) GO TO 920
123 IF(ABS(C0).GT.PAR(IAXIS)) GO TO 910
124 STEP=(PAR(IAXIS)-C0)/NDIV
125 PAR(IAXIS)=STEP/2.
126 GO TO 210
127C
128 100 CONTINUE
129 IF(ISH.NE.2) GO TO 110
130C
131C TRAPEZOID WITH ONLY X THICKNESS VARYING WITH Z.
132C
133 IF(IAXIS.EQ.1) GO TO 900
134 IF(PAR(IAXIS+1).LE.0.0) GO TO 920
135 IF(ABS(C0).GT.PAR(IAXIS+1)) GO TO 910
136 STEP=(PAR(IAXIS+1)-C0)/NDIV
137 PAR(1)=-1.
138 PAR(2)=-1.
139 PAR(IAXIS+1)=STEP/2.
140 GO TO 210
141C
142 110 CONTINUE
143 IF(ISH.NE.3) GO TO 120
144C
145C TRAPEZOID WITH BOTH X AND Y THICKNESSES VARYING WITH
146C Z
147C
148 IF(IAXIS.NE.3) GO TO 900
149 IF(PAR(5).LE.0.0) GO TO 920
150 IF(ABS(C0).GT.PAR(5)) GO TO 910
151 STEP=(PAR(5)-C0)/NDIV
152 PAR(1)=-1.
153 PAR(2)=-1.
154 PAR(3)=-1.
155 PAR(4)=-1.
156 PAR(5)=STEP/2.
157 GO TO 210
158C
159 120 CONTINUE
160 IF(ISH.NE.4) GO TO 125
161 IF(IAXIS.NE.3) GO TO 126
162 IF(PAR(1).LE.0.0) GO TO 920
163 IF(ABS(C0).GT.PAR(1)) GO TO 910
164 STEP=(PAR(1)-C0)/NDIV
165 PAR(1)=STEP*0.5
166 PAR(4)=-1.0
167 PAR(5)=-1.0
168 PAR(6)=-1.0
169 PAR(8)=-1.0
170 PAR(9)=-1.0
171 PAR(10)=-1.0
172 GO TO 210
173C
174 126 IF(IAXIS.NE.2) GO TO 900
175 IF(MOD(PAR(3),180.).EQ.0.) GO TO 127
176 WRITE(CHMAIL,10100)
17710100 FORMAT(' Division of TRAP ',A4,
178 + ' along Y only possible when PHI=0,180')
179 CALL GMAIL(0,0)
180 GOTO 99
181 127 IF(PAR(4).EQ.PAR(8)) GO TO 128
182 WRITE(CHMAIL,10200)
18310200 FORMAT(' Division of TRAP ',A4,
184 + ' along Y only possible when H1=H2')
185 CALL GMAIL(0,0)
186 GOTO 99
187 128 CONTINUE
188 IF(PAR(4).LE.0.) GO TO 920
189 IF(ABS(C0).GT.PAR(4)) GO TO 910
190 STEP = (PAR(4)-C0)/NDIV
191 PAR(4) = 0.5*STEP
192 PAR(5) = -1.
193 PAR(6) = -1.
194 PAR(8) = 0.5*STEP
195 PAR(9) = -1.
196 PAR(10) = -1.
197C
198 GO TO 210
199C
200 125 CONTINUE
201 IF(ISH.NE.5.AND.ISH.NE.6.AND.ISH.NE.NSCTUB) GO TO 160
202C
203C Tube, tube segment or cut tube.
204C
205 IF(IAXIS.NE.3) GO TO 130
206 IF(PAR(3).LE.0.0) GO TO 920
207 IF(ABS(C0).GT.PAR(3)) GO TO 910
208 STEP=(PAR(3)-C0)/NDIV
209 PAR(3)=STEP/2.
210 GO TO 210
211C
212 130 CONTINUE
213 IF(IAXIS.NE.1) GO TO 140
214 IF(PAR(1).LE.0.0.OR.PAR(2).LE.0.0) GO TO 920
215 IF(C0.LT.PAR(1).OR.C0.GT.PAR(2)) GO TO 910
216 STEP=(PAR(2)-C0)/NDIV
217 PAR(1)=-1.
218 PAR(2)=-1.
219 GO TO 210
220C
221 140 CONTINUE
222 IF(ISH.EQ.6) GO TO 150
223 NW=NW+2
224 ISH=6
225 STEP=360.0/NDIV
226 NPAR=5
227 PAR(4)=-STEP/2.
228 PAR(5)=STEP/2.
229 GO TO 210
230C
231 150 CONTINUE
232 DP=PAR(5)-PAR(4)
233 DC0P = C0-PAR(4)
234 SG = SIGN(1.0,DC0P)
235 DC0P = MOD( ABS(DC0P), 360.0)
236 IF(SG.LE.0.0) DC0P = 360.0-DC0P
237 C0 = PAR(4)+DC0P
238 IF(C0-PAR(4).LT.0.0) C0=C0+360.0
239 IF(C0-PAR(4).GT.DP) GO TO 910
240 DP=PAR(5)-C0
241 IF(DP.LT.0.0) DP=DP+360
242 STEP=DP/NDIV
243 PAR(4)=-STEP/2.
244 PAR(5)=STEP/2.
245 GO TO 210
246C
247 160 CONTINUE
248C
249 IF(ISH.NE.7.AND.ISH.NE.8) GO TO 190
250 IF(IAXIS.EQ.1) GO TO 165
251 IF(IAXIS.NE.3) GO TO 170
252C
253 IF(PAR(1).LE.0.0) GO TO 920
254 IF(ABS(C0).GT.PAR(1)) GO TO 910
255 STEP=(PAR(1)-C0)/NDIV
256 PAR(1)=STEP*0.5
257C
258 165 CONTINUE
259C
260 PAR(2)=-1.0
261 PAR(3)=-1.0
262 PAR(4)=-1.0
263 PAR(5)=-1.0
264 GO TO 210
265C
266 170 CONTINUE
267 IF(IAXIS.EQ.1) GO TO 210
268C
269 IF(ISH.EQ.8) GO TO 180
270 NW=NW+2
271 ISH=8
272 STEP=360.0/NDIV
273 NPAR=7
274 PAR(6)=-STEP/2.
275 PAR(7)=STEP/2.
276 GO TO 210
277C
278 180 CONTINUE
279 DP=PAR(7)-PAR(6)
280 DC0P = C0-PAR(6)
281 SG = SIGN(1.0,DC0P)
282 DC0P = MOD( ABS(DC0P), 360.0)
283 IF(SG.LE.0.0) DC0P = 360.0-DC0P
284 C0 = PAR(6)+DC0P
285 IF(C0-PAR(6).LT.0.0) C0=C0+360.0
286 IF(C0-PAR(6).GT.DP) GO TO 910
287 DP=PAR(7)-C0
288 IF(DP.LT.0.0) DP=DP+360.0
289 STEP=DP/NDIV
290 PAR(6)=-STEP/2.
291 PAR(7)=STEP/2.
292 GO TO 210
293C
294 190 CONTINUE
295 IF(ISH.NE.9) GO TO 200
296 IF(IAXIS.NE.1) GO TO 195
297 PAR(1)=-1.0
298 PAR(2)=-1.0
299 IF(C0.LT.PAR(1).OR.C0.GT.PAR(2)) THEN
300 GOTO 910
301 ENDIF
302 STEP = (PAR(2)-C0)/NDIV
303 GOTO 210
304 195 CONTINUE
305 IF(IAXIS.NE.2) GO TO 196
306 WRITE(CHMAIL,8102)
307 CALL GMAIL(0,0)
308 GOTO 99
309C
310 196 CONTINUE
311 IF(IAXIS.NE.3) GO TO 210
312 ANGMIN = MOD(PAR(5),360.)
313 IF(ANGMIN.LT.0.) ANGMIN=ANGMIN+360.
314 ANGMAX = MOD(PAR(6),360.)
315 IF(ANGMAX.LE.ANGMIN) ANGMAX=ANGMAX+360.
316 C0 = MOD(C0,360.)
317 IF(C0.LT.0.0) C0=C0+360.0
318 IF(C0.GT.ANGMAX.OR.C0.LT.ANGMIN) GO TO 910
319 STEP=(ANGMAX-C0)/NDIV
320 PAR(3)=-1.
321 PAR(4)=-1.
322 PAR(5)=-0.5*STEP
323 PAR(6)=0.5*STEP
324 GO TO 210
325C
326 200 CONTINUE
327C
328 GO TO 900
329C
330C NOW CREATE THE VOLUME FOR DIVISION
331C
332 210 Q(JDIV+4)=C0
333 Q(JDIV+5)=STEP
334 NVOLUM=NVOLUM+1
335 NVOL =IQ(JVOLUM-2)
336 IF(NVOLUM.GT.NVOL)CALL MZPUSH(IXCONS,JVOLUM,50,50,'I')
337 CALL MZBOOK(IXCONS,JVO,JVOLUM,-NVOLUM,'VOL1',50,50,NW,3,0)
338 IF(IEOTRI.NE.0)GO TO 95
339 IQ(JVOLUM+NVOLUM)=NAME
340C
341C COPY PARAMETERS IN DATA AREA
342C
343 JVOM=LQ(JVOLUM-IVOM)
344 CALL UCOPY(Q(JVOM+1),Q(JVO+1),NWM)
345 CALL GSIPAR(JVO,0,NPAR,NATT,PAR,ATT)
346 Q(JVO+2)=ISH
347 Q(JVO+3)=0.
348 Q(JVO+4)=NUMED
349 GO TO 99
350C
351 900 CONTINUE
352C
353C DIVIDE ACTION NOT SUPPORTED.
354C
355 WRITE(CHMAIL,8000)
356 CALL GMAIL(0,0)
357 WRITE(CHMAIL,8001) ISH,IAXIS
358 CALL GMAIL(0,0)
359C
360 GO TO 99
361C
362 910 CONTINUE
363C
364C C0 START OF DIVISION OUT OF OBJECT.
365C
366 WRITE(CHMAIL,9000) C0
367 CALL GMAIL(0,0)
368C
369 GO TO 99
370 920 CONTINUE
371C
372C +VE DEFINITE PARAMETER IN DIMENSION OF C0 SET -VE OR 0.
373C
374 WRITE(CHMAIL,9010)
375 CALL GMAIL(0,0)
376C
377 GO TO 99
378C
379C NOT ENOUGH SPACE
380C
381 95 WRITE(CHMAIL,7000)NAME,MOTHER
382 CALL GMAIL(0,0)
383C
384 99 CONTINUE
385 1000 FORMAT(' ***** GSDVN2 CALLED AND NO VOLUMES DEFINED *****')
386 2000 FORMAT(' ***** GSDVN2 VOLUME ',A4,' ALREADY EXISTS *****')
387 3000 FORMAT(' ***** GSDVN2 ROTATION MATRIX',I5,' DOES NOT EXIST *****')
388 4000 FORMAT(' ***** GSDVN2 MOTHER ',A4,' ALREADY DIVIDED *****')
389 5000 FORMAT(' ***** GSDVN2 BAD AXIS VALUE ',I5,' *****')
390 6000 FORMAT(' ***** GSDVN2 BAD NUMBER OF DIVISIONS ',I5,' *****')
391 7000 FORMAT(' ***** GSDVN2 NOT ENOUGH SPACE TO STORE DIVISIONS ',
392 + ' IN ',A4,' *****')
393 8000 FORMAT(' DIVIDE ACTION WITH C0 REQUESTED NOT SUPPORTED',
394 +' AT PRESENT.')
395 8001 FORMAT(' ISH =',I5,' IAXIS =',I5)
396 8102 FORMAT(' DIVISION OF A SPHERE ALONG AXIS 2 NOT SUPPORTED')
397 9000 FORMAT(' ***** GSDVN2 C0',E15.5,' OUT OF OBJECT *****')
398 9010 FORMAT(' ***** GSDVN2 C0 WITH -VE DIMENSION IN MOTHER *****')
399 END