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