]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/cgpack/cgvtef.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / cgpack / cgvtef.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:19:45 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.32 by S.Giani
11*-- Author :
12 SUBROUTINE CGVTEF(IFACE,XYZ,IVIS)
13************************************************************************
14* *
15* Name: CGVTEF *
16* Author: E. Chernyaev Date: 16.08.88 *
17* Revised: *
18* *
19* Function: Test edge against face *
20* *
21* References: CGHPLA, CGVTIN *
22* *
23* Input: IFACE(*) - face *
24* XYZ(3,*) - nodes coordinates *
25* *
26* Output: IVIS = -1 for unvisible edge *
27* *
28* Errors: none *
29* *
30************************************************************************
31#include "geant321/cgdelt.inc"
32#include "geant321/cgcedg.inc"
33*SG
34 INTEGER IFACE(*)
35*SG
36 REAL XYZ(3,*),ABCD(4)
37*-
38 ERROR = 2.*EESCR
39 IVIS = 0
40 NEDGE = IFACE(1)
41 JF = 2
42 JT = 0
43 TMIN = 99999.
44 TMAX =-99999.
45* C O M P U T E A L L I N T E R S E C T I O N POINTS
46 DO 140 NE=1,NEDGE
47 N1 = IFACE(JF)
48 N2 = IFACE(JF+1)
49 JF = JF + 2
50 TY1 = ABC(1,2)*XYZ(1,N1) + ABC(2,2)*XYZ(2,N1) + ABC(3,2)
51 TY2 = ABC(1,2)*XYZ(1,N2) + ABC(2,2)*XYZ(2,N2) + ABC(3,2)
52 IF (ABS(TY1) .LE. ERROR) TY1 = 0.
53 IF (ABS(TY2) .LE. ERROR) TY2 = 0.
54 IF (TY1*TY2) 110,120,140
55 110 TX1 = ABC(1,1)*XYZ(1,N1) + ABC(2,1)*XYZ(2,N1) + ABC(3,1)
56 TX2 = ABC(1,1)*XYZ(1,N2) + ABC(2,1)*XYZ(2,N2) + ABC(3,1)
57 T1 = (TX1*TY2-TX2*TY1) / (TY2-TY1)
58 T2 = 0.
59 GOTO 130
60 120 IF (TY2 .NE. 0.) GOTO 121
61 IF (TY1 .NE. 0.) GOTO 122
62 TTT(1,JT+1) = ABC(1,1)*XYZ(1,N1) + ABC(2,1)*XYZ(2,N1) + ABC(3,1)
63 TTT(2,JT+1) = 0
64 TTT(1,JT+2) = ABC(1,1)*XYZ(1,N2) + ABC(2,1)*XYZ(2,N2) + ABC(3,1)
65 TTT(2,JT+2) = 0
66 IF (TTT(1,JT+1) .LT. TMIN) TMIN = TTT(1,JT+1)
67 IF (TTT(1,JT+1) .GT. TMAX) TMAX = TTT(1,JT+1)
68 IF (TTT(1,JT+2) .LT. TMIN) TMIN = TTT(1,JT+1)
69 IF (TTT(1,JT+2) .GT. TMAX) TMAX = TTT(1,JT+1)
70 GOTO 140
71 121 T1 = ABC(1,1)*XYZ(1,N1) + ABC(2,1)*XYZ(2,N1) + ABC(3,1)
72 IF (TY2 .LT. 0.) T2=-1.
73 IF (TY2 .GT. 0.) T2= 1.
74 GOTO 130
75 122 T1 = ABC(1,1)*XYZ(1,N2) + ABC(2,1)*XYZ(2,N2) + ABC(3,1)
76 IF (TY1 .LT. 0.) T2=-1
77 IF (TY1 .GT. 0.) T2= 1
78 GOTO 130
79 130 JT = JT + 1
80 TTT(1,JT)= T1
81 TTT(2,JT)= T2
82 IF (TTT(1,JT) .LT. TMIN) TMIN = TTT(1,JT)
83 IF (TTT(1,JT) .GT. TMAX) TMAX = TTT(1,JT)
84 140 CONTINUE
85* C H E C K I F F A C E O U T O F E D G E
86 IF (JT .EQ. 0) GOTO 999
87 IF (TMIN.GE.1.-TDEL .OR. TMAX.LE.0.+TDEL) GOTO 999
88* C O M P U T E F A C E P L A N E
89* C H E C K I F E D G E B E F O R E P L A N E
90 CALL CGHPLA(IFACE,XYZ,ABCD)
91 DA = ABCD(1)*AA(1)+ABCD(2)*AA(2)+ABCD(3)*AA(3)+ABCD(4)
92 DB = ABCD(1)*BB(1)+ABCD(2)*BB(2)+ABCD(3)*BB(3)+ABCD(4)
93 IF (DA.GE.-2.*EESCR .AND. DB.GE.-2.*EESCR) GOTO 999
94 IF (DA.LE.0. .AND. DB.LE.0.) GOTO 150
95 T0 = DA/(DA-DB)
96 IF (DA.GE.0. .AND. TMAX.LE.T0+TDEL) GOTO 999
97 IF (DB.GE.0. .AND. TMIN.GE.T0-TDEL) GOTO 999
98* S O R T I N T E R S E C T I O N P O I N T S
99 IF (JT .EQ. 1) GOTO 400
100 150 DO 300 I=1,JT-1
101 DO 200 J=I,1,-1
102 IF (TTT(1,J+1) .GE. TTT(1,J)) GOTO 300
103 T1 = TTT(1,J+1)
104 T2 = TTT(2,J+1)
105 TTT(1,J+1) = TTT(1,J)
106 TTT(2,J+1) = TTT(2,J)
107 TTT(1,J) = T1
108 TTT(2,J) = T2
109 200 CONTINUE
110 300 CONTINUE
111*
112 DO 310 I=2,JT
113 IF (TTT(2,I-1) .EQ. -2.) GOTO 310
114*
115******* 02-FEB-1990 **** R.N.
116 IF(.0001.LT.ABS(TTT(1,I)-TTT(1,I-1)))GOTO 310
117******* 02-FEB-1990 **** R.N.
118*
119 IF (TTT(1,I) .NE. TTT(1,I-1)) GOTO 310
120 IF (TTT(2,I) .EQ. TTT(2,I-1)) GOTO 305
121 IF (TTT(2,I) .EQ. 0.) GOTO 305
122 IF (TTT(2,I-1) .EQ. 0.) GOTO 305
123 TTT(2,I) = -2
124 GOTO 310
125 305 TTT(2,I-1) = -2.
126 TTT(2,I) = -2.
127 310 CONTINUE
128*
129 J = 0
130 DO 320 I=1,JT
131 IF (TTT(2,I) .EQ. -2.) GOTO 320
132 J = J + 1
133 TTT(1,J) = TTT(1,I)
134 320 CONTINUE
135 JT = J
136 IF (JT .EQ. 0) GOTO 999
137*
138 400 T1 = 0.
139 T2 = 1.
140 IF (DA .GT. 0.) T1 = T0
141 IF (DB .GT. 0.) T2 = T0
142 DO 500 I=1,JT,2
143 IF (TTT(1,I+1) .LE. T1) GOTO 500
144 IF (TTT(1,I) .GE. T2) GOTO 999
145 TMIN = TTT(1,I)
146 TMAX = TTT(1,I+1)
147 IF (TMIN .LT. T1) TMIN = T1
148 IF (TMAX .GT. T2) TMAX = T2
149 IF (TMAX-TMIN.LE.TDEL) GOTO 500
150 CALL CGVTIN(TMIN,TMAX,IVIS)
151 IF (IVIS .LT. 0) GOTO 999
152 500 CONTINUE
153 999 RETURN
154 END