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 CGBTEF(IFEXT,IVAR,EDGE,FACE,C)
13 ************************************************************************
16 * Author: E. Chernyaev Date: 23.10.88 *
19 * Function: Test edge against face *
21 * References: CGBEDG, CGTSOR *
23 * Input: IFEXT - flag for searching external or internal intervals *
24 * ( 1 - external, -1 - internal) *
25 * IVAR - number of variant *
26 * ( 1 - visibility of intervals the same as edge) *
27 * ( 2 - intervals are invisible) *
28 * EDGE(*) - number of edges in face *
30 * NMAX - max length of C array *
32 * Output: C(*) - a set of new edges *
33 * (C(KCGAF) = -1 if no space) *
37 ************************************************************************
38 #include "geant321/cggpar.inc"
39 #include "geant321/cgcedg.inc"
41 REAL EDGE(LCGEDG),FACE(*),C(*),ABCD(4)
43 DATA KCG/KCGX1,KCGY1,KCGZ1,KCGX2,KCGY2,KCGZ2/
45 ** F I N D I N T E R S E C T I O N P O I N T S
47 IF (IFEXT .LE. 0) WHAT = 'LE'
48 IF (IFEXT .GT. 0) WHAT = 'GE'
49 XD = EDGE(KCGX2) - EDGE(KCGX1)
50 YD = EDGE(KCGY2) - EDGE(KCGY1)
51 ZD = EDGE(KCGZ2) - EDGE(KCGZ1)
52 ALENG = SQRT(XD*XD + YD*YD + ZD*ZD)
53 IF(ALENG.LT.1.0E-4)GOTO 998
57 ABCD(1)= YD*FACE(KCGCC) - FACE(KCGBB)*ZD
58 ABCD(2)= ZD*FACE(KCGAA) - FACE(KCGCC)*XD
59 ABCD(3)= XD*FACE(KCGBB) - FACE(KCGAA)*YD
60 ABCD(4)=-(ABCD(1)*EDGE(KCGX1) +
61 + ABCD(2)*EDGE(KCGY1) +
62 + ABCD(3)*EDGE(KCGZ1))
63 CALL CGBFIT(FACE,ABCD,NT)
64 IF (NT .GT. 0) GOTO 100
68 XDELT = EDGE(KCGX2) - EDGE(KCGX1)
69 YDELT = EDGE(KCGY2) - EDGE(KCGY1)
70 ZDELT = EDGE(KCGZ2) - EDGE(KCGZ1)
72 ** P R E P A R E E D G E S
75 IF (ABS(YDELT) .GT. ABS(XDELT)) K = 2
76 IF (ABS(ZDELT) .GT. ABS(DELTA(K))) K = 3
77 TMIN = (EDGE(KCG(K)) - AA(K)) / DELTA(K)
78 TMAX = (EDGE(KCG(K+3)) - AA(K)) / DELTA(K)
79 CALL CGBTTT(WHAT,TMIN,TMAX,NT,NEDGE)
80 IF (NEDGE .EQ. 0) GOTO 999
84 J = LCGFAC + NN*LCGEDG
85 IF (NMAX .LT. J + NEDGE*LCGEDG) GOTO 998
87 IF (IVAR .EQ. 1) C(J+KCGAE) = IVIS
88 IF (IVAR .EQ. 2) C(J+KCGAE) =-1.
89 IF (ITTT(NE) .NE. 0) C(J+KCGAE) = IVIS
90 C(J+KCGX1) = XA + XDELT*TTT(1,NE)
91 C(J+KCGY1) = YA + YDELT*TTT(1,NE)
92 C(J+KCGZ1) = ZA + ZDELT*TTT(1,NE)
93 C(J+KCGX2) = XA + XDELT*TTT(2,NE)
94 C(J+KCGY2) = YA + YDELT*TTT(2,NE)
95 C(J+KCGZ2) = ZA + ZDELT*TTT(2,NE)
98 C(KCGNE) = C(KCGNE) + NEDGE