5 * Revision 1.1.1.1 1995/10/24 10:19:42 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.31 by S.Giani
12 SUBROUTINE CGBOX (XYZ,N1,N2,LCG,CG)
13 ************************************************************************
16 * Author: E. Chernyaev Date: 12.02.89 *
19 * Function: Create CG-object for box *
21 * References: CGSIZE, CGSNOR *
23 * Input: XYZ(3,N1+N2) - nodes *
24 * N1 - number of nodes in main base *
25 * N2 - number of nodes in 2-nd base *
26 * LCG - max-size of CG-object *
28 * Output: CG - CG-object *
29 * CG(1) - length of CG-object *
30 * = 0 if error in parameters *
35 ************************************************************************
36 #include "geant321/cggpar.inc"
38 INTEGER NFAC(2),NEDG(2)
41 * T E S T P A R A M E T E R S C O R R E C T N E S S
42 IF (N1 .LT. 3) GOTO 999
43 IF (N2.NE.N1 .AND. N2.NE.1) GOTO 999
44 * C O M P U T E S I Z E O F C G - O B J E C T
47 IF (N2 .NE. 1) NEDG(2) = 4
48 IF (N2 .EQ. 1) NEDG(2) = 3
49 IF (N2 .NE. 1) NFAC(1) = 2
50 IF (N2 .EQ. 1) NFAC(1) = 1
52 CG(KCGSIZ) = CGSIZE(LCG,NFATYP,NFAC,NEDG)
53 IF (CG(KCGSIZ) .LE. 0.) GOTO 999
55 ** C R E A T E C G - O B J E C T
58 CG(KCGNF) = NFAC(1) + NFAC(2)
60 * C R E A T E M A I N B A S E
69 CG(JCG+KCGX1) = XYZ(1,I1)
70 CG(JCG+KCGY1) = XYZ(2,I1)
71 CG(JCG+KCGZ1) = XYZ(3,I1)
72 CG(JCG+KCGX2) = XYZ(1,I2)
73 CG(JCG+KCGY2) = XYZ(2,I2)
74 CG(JCG+KCGZ2) = XYZ(3,I2)
77 * C R E A T E 2 - N D B A S E
78 IF (N2 .EQ. 1) GOTO 300
87 CG(JCG+KCGX1) = XYZ(1,I2+N1)
88 CG(JCG+KCGY1) = XYZ(2,I2+N1)
89 CG(JCG+KCGZ1) = XYZ(3,I2+N1)
90 CG(JCG+KCGX2) = XYZ(1,I1+N1)
91 CG(JCG+KCGY2) = XYZ(2,I1+N1)
92 CG(JCG+KCGZ2) = XYZ(3,I1+N1)
95 * C R E A T E S I D E F A C E S
101 CG(JCG + KCGNE) = NEDG(2)
105 CG(JCG+KCGX1) = XYZ(1,I2)
106 CG(JCG+KCGY1) = XYZ(2,I2)
107 CG(JCG+KCGZ1) = XYZ(3,I2)
108 CG(JCG+KCGX2) = XYZ(1,I1)
109 CG(JCG+KCGY2) = XYZ(2,I1)
110 CG(JCG+KCGZ2) = XYZ(3,I1)
113 IF (N2 .NE. 1) K = N1 + I1
114 IF (N2 .EQ. 1) K = N1 + 1
116 CG(JCG+KCGX1) = XYZ(1,I1)
117 CG(JCG+KCGY1) = XYZ(2,I1)
118 CG(JCG+KCGZ1) = XYZ(3,I1)
119 CG(JCG+KCGX2) = XYZ(1,K)
120 CG(JCG+KCGY2) = XYZ(2,K)
121 CG(JCG+KCGZ2) = XYZ(3,K)
124 IF (N2 .EQ. 1) GOTO 310
126 CG(JCG+KCGX1) = XYZ(1,I1+N1)
127 CG(JCG+KCGY1) = XYZ(2,I1+N1)
128 CG(JCG+KCGZ1) = XYZ(3,I1+N1)
129 CG(JCG+KCGX2) = XYZ(1,I2+N1)
130 CG(JCG+KCGY2) = XYZ(2,I2+N1)
131 CG(JCG+KCGZ2) = XYZ(3,I2+N1)
134 310 IF (N2 .NE. 1) K = N1 + I2
135 IF (N2 .EQ. 1) K = N1 + 1
137 CG(JCG+KCGX1) = XYZ(1,K)
138 CG(JCG+KCGY1) = XYZ(2,K)
139 CG(JCG+KCGZ1) = XYZ(3,K)
140 CG(JCG+KCGX2) = XYZ(1,I2)
141 CG(JCG+KCGY2) = XYZ(2,I2)
142 CG(JCG+KCGZ2) = XYZ(3,I2)
145 * S E T N O R M A L E S
147 IF (CG(1) .EQ. 0.) PRINT *, ' Problem in CGBOX'
153 DIST = A*XYZ(1,N1+1) + B*XYZ(2,N1+1) + C*XYZ(3,N1+1) + D
154 IF (DIST .LT. 0.) GOTO 999
155 * S E T I N V E R S E O R D E R O F E D G E S
158 CG(JCG + KCGAA) =-CG(JCG + KCGAA)
159 CG(JCG + KCGBB) =-CG(JCG + KCGBB)
160 CG(JCG + KCGCC) =-CG(JCG + KCGCC)
161 CG(JCG + KCGDD) =-CG(JCG + KCGDD)
162 NEDGE = CG(JCG+KCGNE)
168 CG(JCG + KCGX1) = CG(JCG + KCGX2)
169 CG(JCG + KCGY1) = CG(JCG + KCGY2)
170 CG(JCG + KCGZ1) = CG(JCG + KCGZ2)