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 10/10/94 20.01.58 by S.Giani
15 SUBROUTINE GVDCAR(IAXIS,ISH,IROT,PARS,CL,CH,IERR)
17 C. *****************************************************************
19 C. * ROUTINE TO FIND THE LIMITS ALONG AXIS IAXIS IN CARTESIAN *
20 C. * COORDINATES FOR VOLUME OF SHAPE ISH ROTATED BY THE *
21 C. * ROTATION MATRIX IROT. THE SHAPE HAS NPAR PARAMETERS IN *
22 C. * THE ARRAY PARS. THE LOWER LIMIT IS RETURNED IN CL, THE *
23 C. * HIGHER IN CH. IF THE CALCULATION CANNOT BE MADE IERR IS *
24 C. * SET TO 1 OTHERWISE IT IS SET TO 0. *
26 C. * ==>Called by : GVDLIM *
27 C. * Author S.Giani ******** *
29 C. *****************************************************************
31 #include "geant321/gcbank.inc"
32 #include "geant321/gconsp.inc"
33 #include "geant321/gcshno.inc"
34 DIMENSION PARS(100),X(3),XT(3)
36 C. ---------------------------------------------------
39 IF (ISH.GT.4.AND.ISH.NE.10.AND.ISH.NE.28) GO TO 40
41 C CUBOIDS, TRAPEZOIDS, PARALLELEPIPEDS.
50 C THIS IS A LOOP OVER THE 8 CORNERS.
51 C FIRST FIND THE LOCAL COORDINATES.
55 C General twisted trapezoid.
61 X(1)=PARS(I0)+PARS(I0+2)*X(3)
62 X(2)=PARS(I0+1)+PARS(I0+3)*X(3)
71 IF(IP.LE.4) X(3)=-X(3)
73 IF(ISH.GT.2.AND.X(3).GT.0.0) IP2=4
74 IF(ISH.EQ.1.OR.ISH.EQ.10) IP2=2
76 IF(ISH.EQ.4.AND.X(3).GT.0.0) IP2=8
78 IF(MOD(IP+3,4).LT.2) X(2)=-X(2)
80 IF(ISH.NE.1.AND.ISH.NE.10.AND.X(3).GT.0.0) IP1=2
82 IF(ISH.EQ.4.AND.X(3).GT.0.0) IP1=IP1+4
83 IF(ISH.EQ.4.AND.X(2).GT.0.0) IP1=IP1+1
85 IF(MOD(IP,2).EQ.1) X(1)=-X(1)
87 IF(ISH.NE.10) GO TO 10
88 X(1)=X(1)+X(2)*PARS(4)+X(3)*PARS(5)
89 X(2)=X(2)+X(3)*PARS(6)
94 IF(X(3).GT.0.0) IP4=11
95 X(1)=X(1)+X(2)*PARS(IP4)+X(3)*PARS(2)
96 X(2)=X(2)+X(3)*PARS(3)
105 IF(IROT.NE.0) CALL GINROT(X,Q(JROT+1),XT)
107 C UPDATE LIMITS IF NECESSARY.
109 IF(XT(IAXIS).LT.CL) CL=XT(IAXIS)
110 IF(XT(IAXIS).GT.CH) CH=XT(IAXIS)
117 IF(ISH.EQ.9) GO TO 90
119 C TUBES , CONES, POLYGONS, POLYCONES.
123 IF((ISH.EQ.11.OR.ISH.EQ.12).AND.(IAXIS.LT.3))THEN
133 IF(IROT.NE.0) CALL GINROT(X,Q(JROT+1),XT)
135 C XT IS Z AXIS ROTATED.
138 IF(ABS(XT(IAXIS)).LT.0.99) GO TO 50
140 IF(ABS(XT(3)).LT.0.99) GO TO 50
142 IF(ISH.EQ.11)GO TO 45
143 IF(ISH.EQ.12)GO TO 46
148 IF(ISH.GT.6.AND.ISH.NE.NSCTUB.AND.ISH.NE.13.AND.ISH.NE.14) IP=1
154 45 IF(MYFLAG.EQ.0)THEN
159 ELSEIF(MYFLAG.EQ.1)THEN
163 DO 145 I=7,IZLAST+2,3
164 IF(PARS(I).GT.TMPRAD)TMPRAD=PARS(I)
167 PHIMAX=PHIMIN+PARS(2)
168 AANG=ABS(PHIMAX-PHIMIN)
170 AATMAX=NANG*360./AANG
173 IF(ALA.GT..5)LATMAX=LATMAX+1
174 AFINV=1./COS(PI/LATMAX)
183 46 IF(MYFLAG.EQ.0)THEN
187 ELSEIF(MYFLAG.EQ.1)THEN
191 DO 146 I=6,IZLAST+2,3
192 IF(PARS(I).GT.TMPRAD)TMPRAD=PARS(I)
201 IF ( ABS(XT(IAXIS)-X(IAXIS)) .GT.1.) THEN
219 C for hyperboloid, use escribed cylinder
220 CH = SQRT(PARS(2)**2+(PARS(3)*TAN(PARS(4)*DEGRAD))**2)
226 IF(ISH.GT.10.AND.ISH.NE.NSCTUB)GO TO 999
227 IF(ABS(XT(IAXIS)).GT.0.01) GO TO 70
229 C Z AXIS PERPENDICULAR TO IAXIS. ASSUME COMPLETE TUBE OR
230 C CONE (I.E. IGNORE PHI SEGMENTATION).
232 IF(ISH.GT.6.AND.ISH.NE.NSCTUB) GO TO 60
241 IF(Q(JROT+15).EQ.0.)THEN
242 PHI1=(PARS(4)+Q(JROT+12))*DEGRAD
243 PHI2=(PARS(5)+Q(JROT+12))*DEGRAD
244 ELSEIF(Q(JROT+15).EQ.180.)THEN
245 PHI1=(PARS(4)+Q(JROT+12)-(PARS(5)-PARS(4)))*DEGRAD
246 PHI2=(PARS(5)+Q(JROT+12)-(PARS(5)-PARS(4)))*DEGRAD
255 IF(PHI1.GE.0..AND.PHI2.LE.PI)THEN
262 ELSEIF(PHI1.GE.PI.AND.PHI2.LE.TWOPI.OR.
263 + PHI1.GE.-PI.AND.PHI2.LE.0.)THEN
270 ELSEIF(PHI1.LT.0..AND.PHI2.GT.0..AND.
271 + (PHI2-PHI1).LE.PI)THEN
280 ELSEIF(PHI1.LT.PI.AND.PHI2.GT.PI.AND.
281 + (PHI2-PHI1).LE.PI)THEN
291 ELSEIF(IAXIS.EQ.2)THEN
292 IF(PHI1.GE.(-PI*.5).AND.PHI2.LE.(PI*.5))THEN
299 ELSEIF(PHI1.GE.(PI*.5).AND.PHI2.LE.(PI*3*.5))THEN
306 ELSEIF(PHI1.LT.(PI*.5).AND.PHI2.GT.(PI*.5).AND.
307 + (PHI2-PHI1).LE.PI)THEN
316 ELSEIF(((PHI1.LT.(PI*3*.5).AND.PHI2.GT.(PI*3*.5)).OR.
317 + (PHI1.LT.-(PI*.5).AND.PHI2.GT.-(PI*.5)))
318 + .AND.(PHI2-PHI1).LE.PI)THEN
336 IF(PARS(5).GT.PARS(3)) RM=PARS(5)
346 C ARBITRARY ROTATION.
352 ** approxime to a cylinder whit radius
353 ** equal to the ellipse major axis
355 IF(PARS(1).GT.RM) RM=PARS(1)
360 RM = SQRT(PARS(2)**2+(PARS(3)*TAN(PARS(4)*DEGRAD))**2)
364 IF(ISH.EQ.NSCTUB) THEN
365 S1 = (1.0-PARS(8))*(1.0+PARS(8))
366 IF( S1 .GT. 0.0) S1 = SQRT(S1)
367 S2 = (1.0-PARS(11))*(1.0+PARS(11))
368 IF( S2 .GT. 0.0) S2 = SQRT(S2)
369 IF( S2 .GT. S1 ) S1 = S2
372 IF(ISH.LE.6) GO TO 80
376 IF(PARS(5).GT.RM) RM=PARS(5)
381 SINT=(1+COST)*(1-COST)
382 IF(SINT.GT.0.0) SINT=SQRT(SINT)
391 C SPHERE - ASSUME COMPLETE SPHERE, TAKE OUTER RADIUS.