42
43
44
45
46
47
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "mvsiz_p.inc"
56
57
58
59 integer, intent(in) :: first
60 integer, intent(in) :: last
61 INTEGER CAND_E(*),CAND_N(*),IRTL(*),IGNORE
63 . gapv(*),tzinf,st(2,*),dmin(*)
64 INTEGER, DIMENSION(MVSIZ), INTENT(IN) :: IX3,IX4
65 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x1,x2,x3,x4
66 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: y1,y2,y3,y4
67 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: z1,z2,z3,z4
68 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: xi,yi,zi
69 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x0,y0,z0
70 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx1,ny1,nz1
71 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx2,ny2,nz2
72 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx3,ny3,nz3
73 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx4,ny4,nz4
74 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: p1,p2,p3,p4
75 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: lb1,lb2,lb3,lb4
76 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: lc1,lc2,lc3,lc4
77 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: s,t
78
79
80
81#include "param_c.inc"
82#include "vect07_c.inc"
83
84
85
86 INTEGER TFLAG(MVSIZ)
87 INTEGER I, II
89
90
91 DO i=first,last
92 x0(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
93 y0(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
94 z0(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
95 ENDDO
96
97 DO i=first,last
98 IF (ix3(i) == ix4(i)) THEN
99 x0(i) = x3(i)
100 y0(i) = y3(i)
101 z0(i) = z3(i)
102 tflag(i) = 1
103 ELSE
104 tflag(i) = 0
105 ENDIF
106 ENDDO
107
109 . xi ,yi ,zi ,x0 ,y0 ,
110 . z0 ,x1 ,y1 ,z1 ,x2 ,
111 . y2 ,z2 ,nx1,ny1,nz1,
112 . lb1 ,lc1 ,p1 ,gapv, tflag )
113
115 . xi ,yi ,zi ,x0 ,y0 ,
116 . z0 ,x2 ,y2 ,z2 ,x3 ,
117 . y3 ,z3 ,nx2,ny2,nz2,
118 . lb2 ,lc2 ,p2 ,gapv, tflag )
119
121 . xi ,yi ,zi ,x0 ,y0 ,
122 . z0 ,x3 ,y3 ,z3 ,x4 ,
123 . y4 ,z4 ,nx3,ny3,nz3,
124 . lb3 ,lc3 ,p3 ,gapv, tflag )
125
127 . xi ,yi ,zi ,x0 ,y0 ,
128 . z0 ,x4 ,y4 ,z4 ,x1 ,
129 . y1 ,z1 ,nx4,ny4,nz4,
130 . lb4 ,lc4 ,p4 ,gapv, tflag )
131
132 DO i=first,last
133 pene(i) =
max(p1(i),p2(i),p3(i),p4(i))
134
135 IF(p1(i)==pene(i))THEN
136 s(i) = -lb1(i) + lc1(i)
137 t(i) = -lb1(i) - lc1(i)
138 ELSEIF(p2(i)==pene(i))THEN
139 s(i) = lb2(i) + lc2(i)
140 t(i) = -lb2(i) + lc2(i)
141 ELSEIF(p3(i)==pene(i))THEN
142 s(i) = lb3(i) - lc3(i)
143 t(i) = lb3(i) + lc3(i)
144 ELSEIF(p4(i)==pene(i))THEN
145 s(i) = -lb4(i) - lc4(i)
146 t(i) = lb4(i) - lc4(i)
147 ELSE
148 s(i) = zero
149 t(i) = zero
150 ENDIF
151 ENDDO
152
153 DO i=first,last
154 IF (tflag(i) == 1) THEN
155 pene(i) = p1(i)
156 t(i)= one - two*lb1(i) - two*lc1(i)
157 IF (t(i) < one-em10) THEN
158 s(i)= (lc1(i)-lb1(i))/(lc1(i)+lb1(i))
159 ELSEIF (lb1(i) < -em10) THEN
160 s(i)= two
161 ELSEIF (lc1(i) < -em10) THEN
162 s(i)= -two
163 ELSE
164 s(i)= zero
165 ENDIF
166 ENDIF
167 ENDDO
168
169 IF(ignore==2 .OR. ignore == 3)THEN
170 DO i=first,last
171 IF(pene(i)>zero .AND.
172 . (s(i) < onep5 .AND.
173 . t(i) < onep5 .AND.
174 . s(i) >-onep5 .AND.
175 . t(i) >-onep5))THEN
176 ii=cand_n(i)
177 IF(gapv(i) - pene(i)<dmin(ii))THEN
178 dmin(ii)=gapv(i)-pene(i)
179 irtl(ii)=cand_e(i)
180 st(1,ii) = s(i)
181 st(2,ii) = t(i)
182 ELSEIF(gapv(i) - pene(i)==dmin(ii))THEN
183 IF(
max(abs(s(i)) ,abs(t(i) ))<
184 .
max(abs(st(1,ii)),abs(st(2,ii))) )
THEN
185 irtl(ii)=cand_e(i)
186 st(1,ii) = s(i)
187 st(2,ii) = t(i)
188 ENDIF
189 ENDIF
190 ENDIF
191 ENDDO
192 ELSEIF(ignore==1)THEN
193 DO i=first,last
194
195 IF(pene(i)>zero .AND.
196 . (s(i) < onep5 .AND.
197 . t(i) < onep5 .AND.
198 . s(i) >-onep5 .AND.
199 . t(i) >-onep5)) THEN
200 ii=cand_n(i)
201
202 IF(tzinf - pene(i)<dmin(ii))THEN
203 dmin(ii)=tzinf - pene(i)
204 irtl(ii)=cand_e(i)
205 st(1,ii) = s(i)
206 st(2,ii) = t(i)
207 ELSEIF(tzinf - pene(i)==dmin(ii))THEN
208 IF(
max(abs(s(i)) ,abs(t(i) ))<
209 .
max(abs(st(1,ii)),abs(st(2,ii))) )
THEN
210 irtl(ii)=cand_e(i)
211 st(1,ii) = s(i)
212 st(2,ii) = t(i)
213 ENDIF
214 ENDIF
215 ENDIF
216 ENDDO
217 ELSE
218 DO i=first,last
219
220 IF(pene(i)>zero) THEN
221 ii=cand_n(i)
222 IF(tzinf - pene(i)<dmin(ii))THEN
223 dmin(ii)=tzinf - pene(i)
224 irtl(ii)=cand_e(i)
225 st(1,ii) = s(i)
226 st(2,ii) = t(i)
227 ELSEIF(tzinf - pene(i)==dmin(ii))THEN
228 IF(
max(abs(s(i)) ,abs(t(i) ))<
229 .
max(abs(st(1,ii)),abs(st(2,ii))) )
THEN
230 irtl(ii)=cand_e(i)
231 st(1,ii) = s(i)
232 st(2,ii) = t(i)
233 ENDIF
234 ENDIF
235 ENDIF
236 ENDDO
237 ENDIF
238
239 RETURN
subroutine i2bar3(first, last, xi, yi, zi, xa, ya, za, xb, yb, zb, xc, yc, zc, nx, ny, nz, lb, lc, p, gapv, tflag)