OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i23dst3.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| i23dst3 ../starter/source/interfaces/inter3d1/i23dst3.F
25!||--- called by ------------------------------------------------------
26!|| inint3 ../starter/source/interfaces/inter3d1/inint3.f
27!||====================================================================
28 SUBROUTINE i23dst3(
29 1 JLT ,CAND_N ,CAND_E ,IRECT ,NSV ,
30 2 GAP_S ,X ,MSR ,PENE ,IFPEN ,
31 3 IGAP ,GAP ,GAPMAX ,GAPMIN ,GAPV ,
32 4 GAP_M )
33C-----------------------------------------------
34C I m p l i c i t T y p e s
35C-----------------------------------------------
36#include "implicit_f.inc"
37C-----------------------------------------------
38C G l o b a l P a r a m e t e r s
39C-----------------------------------------------
40#include "mvsiz_p.inc"
41C-----------------------------------------------
42C D u m m y A r g u m e n t s
43C-----------------------------------------------
44 INTEGER JLT, CAND_N(*), CAND_E(*), IRECT(4,*),
45 . NSV(*), IFPEN(*), IGAP, MSR(*)
46 my_real
47 . X(3,*), PENE(*), GAP_S(*),
48 . gap, gapmin, gapmax, gapv(mvsiz), gap_m(*)
49C-----------------------------------------------
50C L o c a l V a r i a b l e s
51C-----------------------------------------------
52 INTEGER I, L, INPROJ(4,MVSIZ)
53 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
54 . NSVG(MVSIZ)
55 my_real
56 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
57 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
58 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
59 . xi(mvsiz), yi(mvsiz), zi(mvsiz),
60 . lb1(mvsiz), lc1(mvsiz), p1(mvsiz),
61 . lb2(mvsiz), lc2(mvsiz), p2(mvsiz),
62 . lb3(mvsiz), lc3(mvsiz), p3(mvsiz),
63 . lb4(mvsiz), lc4(mvsiz), p4(mvsiz),
64 . la1, la2, la3, la4,
65 . nx1(mvsiz), ny1(mvsiz), nz1(mvsiz),
66 . nx2(mvsiz), ny2(mvsiz), nz2(mvsiz),
67 . nx3(mvsiz), ny3(mvsiz), nz3(mvsiz),
68 . nx4(mvsiz), ny4(mvsiz), nz4(mvsiz),
69 . al1(mvsiz), al2(mvsiz), al3(mvsiz), al4(mvsiz),
70 . x01(mvsiz), x02(mvsiz), x03(mvsiz), x04(mvsiz),
71 . y01(mvsiz), y02(mvsiz), y03(mvsiz), y04(mvsiz),
72 . z01(mvsiz), z02(mvsiz), z03(mvsiz), z04(mvsiz),
73 . xi1(mvsiz), xi2(mvsiz), xi3(mvsiz), xi4(mvsiz),
74 . yi1(mvsiz), yi2(mvsiz), yi3(mvsiz), yi4(mvsiz),
75 . zi1(mvsiz), zi2(mvsiz), zi3(mvsiz), zi4(mvsiz),
76 . x0(mvsiz), y0(mvsiz), z0(mvsiz),
77 . xi0v(mvsiz), yi0v(mvsiz), zi0v(mvsiz),
78 . la, hla, h0, h00,
79 . hlb1(mvsiz), hlc1(mvsiz),
80 . hlb2(mvsiz), hlc2(mvsiz),
81 . hlb3(mvsiz), hlc3(mvsiz),
82 . hlb4(mvsiz), hlc4(mvsiz),
83 . xp(mvsiz), yp(mvsiz), zp(mvsiz),
84 . xp1(mvsiz), yp1(mvsiz), zp1(mvsiz),
85 . xp2(mvsiz), yp2(mvsiz), zp2(mvsiz),
86 . xp3(mvsiz), yp3(mvsiz), zp3(mvsiz),
87 . xp4(mvsiz), yp4(mvsiz), zp4(mvsiz),
88 . n11(mvsiz), n21(mvsiz), n31(mvsiz),
89 . n12(mvsiz), n22(mvsiz), n32(mvsiz),
90 . n13(mvsiz), n23(mvsiz), n33(mvsiz),
91 . n14(mvsiz), n24(mvsiz), n34(mvsiz),
92 . nx(mvsiz), ny(mvsiz), nz(mvsiz),
93 . xg(mvsiz), yg(mvsiz), zg(mvsiz),
94 . h1(mvsiz), h2(mvsiz), h3(mvsiz), h4(mvsiz),
95 . nvers(4,mvsiz), firstimp(4,mvsiz),
96 . xn1(mvsiz),yn1(mvsiz),zn1(mvsiz),
97 . xn2(mvsiz),yn2(mvsiz),zn2(mvsiz),
98 . xn3(mvsiz),yn3(mvsiz),zn3(mvsiz),
99 . xn4(mvsiz),yn4(mvsiz),zn4(mvsiz),
100 . ssc(mvsiz),ttc(mvsiz),
101 . a12(mvsiz),a23(mvsiz),a34(mvsiz),a41(mvsiz),
102 . b12(mvsiz),b23(mvsiz),b34(mvsiz),b41(mvsiz),
103 . ab1(mvsiz),ab2(mvsiz),
104 . n1(mvsiz),n2(mvsiz),n3(mvsiz),
105 . xx1(mvsiz),xx2(mvsiz),xx3(mvsiz),xx4(mvsiz),
106 . yy1(mvsiz),yy2(mvsiz),yy3(mvsiz),yy4(mvsiz),
107 . zz1(mvsiz),zz2(mvsiz),zz3(mvsiz),zz4(mvsiz),
108 . area(mvsiz),alp(mvsiz),var
109 my_real
110 . s2,nn,ps,
111 . x12,x23,x34,x41,sx1,sx2,sx3,sx4,sx0,
112 . y12,y23,y34,y41,sy1,sy2,sy3,sy4,sy0,
113 . z12,z23,z34,z41,sz1,sz2,sz3,sz4,sz0,
114 . gap2(mvsiz), aaa, side, dist,
115 . ll, h
116C--------------------------------------------------------
117 IF(igap==0)THEN
118 DO i=1,jlt
119 gapv(i)=gap
120 END DO
121 ELSE
122 DO i=1,jlt
123 gapv(i)=gap_s(cand_n(i))+gap_m(cand_e(i))
124 gapv(i)=min(gapv(i),gapmax)
125 gapv(i)=max(gapmin,gapv(i))
126 END DO
127 END IF
128C--------------------------------------------------------
129C
130 DO i=1,jlt
131 nsvg(i)= nsv(cand_n(i))
132 l = cand_e(i)
133C
134 ix1(i)=irect(1,l)
135 ix2(i)=irect(2,l)
136 ix3(i)=irect(3,l)
137 ix4(i)=irect(4,l)
138 END DO
139C
140 DO i=1,jlt
141 xi(i)=x(1,nsvg(i))
142 yi(i)=x(2,nsvg(i))
143 zi(i)=x(3,nsvg(i))
144 x1(i)=x(1,ix1(i))
145 y1(i)=x(2,ix1(i))
146 z1(i)=x(3,ix1(i))
147 x2(i)=x(1,ix2(i))
148 y2(i)=x(2,ix2(i))
149 z2(i)=x(3,ix2(i))
150 x3(i)=x(1,ix3(i))
151 y3(i)=x(2,ix3(i))
152 z3(i)=x(3,ix3(i))
153 x4(i)=x(1,ix4(i))
154 y4(i)=x(2,ix4(i))
155 z4(i)=x(3,ix4(i))
156C
157 pene(i)=zero
158 END DO
159C--------------------------------------------------------
160C CASE OF MIXED PACKAGES
161C--------------------------------------------------------
162 DO i=1,jlt
163 IF(ix3(i)/=ix4(i))THEN
164 x0(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
165 y0(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
166 z0(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
167 ELSE
168 x0(i) = x3(i)
169 y0(i) = y3(i)
170 z0(i) = z3(i)
171 ENDIF
172 ENDDO
173C
174 DO i=1,jlt
175C
176 x01(i) = x1(i) - x0(i)
177 y01(i) = y1(i) - y0(i)
178 z01(i) = z1(i) - z0(i)
179C
180 x02(i) = x2(i) - x0(i)
181 y02(i) = y2(i) - y0(i)
182 z02(i) = z2(i) - z0(i)
183C
184 x03(i) = x3(i) - x0(i)
185 y03(i) = y3(i) - y0(i)
186 z03(i) = z3(i) - z0(i)
187C
188 x04(i) = x4(i) - x0(i)
189 y04(i) = y4(i) - y0(i)
190 z04(i) = z4(i) - z0(i)
191C
192 xi0v(i) = x0(i) - xi(i)
193 yi0v(i) = y0(i) - yi(i)
194 zi0v(i) = z0(i) - zi(i)
195C
196 xi1(i) = x1(i) - xi(i)
197 yi1(i) = y1(i) - yi(i)
198 zi1(i) = z1(i) - zi(i)
199C
200 xi2(i) = x2(i) - xi(i)
201 yi2(i) = y2(i) - yi(i)
202 zi2(i) = z2(i) - zi(i)
203C
204 xi3(i) = x3(i) - xi(i)
205 yi3(i) = y3(i) - yi(i)
206 zi3(i) = z3(i) - zi(i)
207C
208 xi4(i) = x4(i) - xi(i)
209 yi4(i) = y4(i) - yi(i)
210 zi4(i) = z4(i) - zi(i)
211C
212 sx1 = yi0v(i)*zi1(i) - zi0v(i)*yi1(i)
213 sy1 = zi0v(i)*xi1(i) - xi0v(i)*zi1(i)
214 sz1 = xi0v(i)*yi1(i) - yi0v(i)*xi1(i)
215C
216 sx2 = yi0v(i)*zi2(i) - zi0v(i)*yi2(i)
217 sy2 = zi0v(i)*xi2(i) - xi0v(i)*zi2(i)
218 sz2 = xi0v(i)*yi2(i) - yi0v(i)*xi2(i)
219C
220 sx0 = y01(i)*z02(i) - z01(i)*y02(i)
221 sy0 = z01(i)*x02(i) - x01(i)*z02(i)
222 sz0 = x01(i)*y02(i) - y01(i)*x02(i)
223 s2 = one/max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
224C
225 nn=sqrt(s2)
226 n11(i)=sx0*nn
227 n21(i)=sy0*nn
228 n31(i)=sz0*nn
229C
230 area(i)=nn
231C
232 lb1(i) = -(sx0*sx2 + sy0*sy2 + sz0*sz2) * s2
233 lc1(i) = (sx0*sx1 + sy0*sy1 + sz0*sz1) * s2
234C
235 sx3 = yi0v(i)*zi3(i) - zi0v(i)*yi3(i)
236 sy3 = zi0v(i)*xi3(i) - xi0v(i)*zi3(i)
237 sz3 = xi0v(i)*yi3(i) - yi0v(i)*xi3(i)
238C
239 sx0 = y02(i)*z03(i) - z02(i)*y03(i)
240 sy0 = z02(i)*x03(i) - x02(i)*z03(i)
241 sz0 = x02(i)*y03(i) - y02(i)*x03(i)
242 s2 = one/max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
243C
244 nn=sqrt(s2)
245 n12(i)=sx0*nn
246 n22(i)=sy0*nn
247 n32(i)=sz0*nn
248C
249 area(i)=area(i)+nn
250C
251 lb2(i) = -(sx0*sx3 + sy0*sy3 + sz0*sz3) * s2
252 lc2(i) = (sx0*sx2 + sy0*sy2 + sz0*sz2) * s2
253C
254 sx4 = yi0v(i)*zi4(i) - zi0v(i)*yi4(i)
255 sy4 = zi0v(i)*xi4(i) - xi0v(i)*zi4(i)
256 sz4 = xi0v(i)*yi4(i) - yi0v(i)*xi4(i)
257C
258 sx0 = y03(i)*z04(i) - z03(i)*y04(i)
259 sy0 = z03(i)*x04(i) - x03(i)*z04(i)
260 sz0 = x03(i)*y04(i) - y03(i)*x04(i)
261 s2 = one/max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
262C
263 nn=sqrt(s2)
264 n13(i)=sx0*nn
265 n23(i)=sy0*nn
266 n33(i)=sz0*nn
267C
268 area(i)=area(i)+nn
269C
270 lb3(i) = -(sx0*sx4 + sy0*sy4 + sz0*sz4) * s2
271 lc3(i) = (sx0*sx3 + sy0*sy3 + sz0*sz3) * s2
272C
273 sx0 = y04(i)*z01(i) - z04(i)*y01(i)
274 sy0 = z04(i)*x01(i) - x04(i)*z01(i)
275 sz0 = x04(i)*y01(i) - y04(i)*x01(i)
276 s2 = one/max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
277C
278 nn=sqrt(s2)
279 n14(i)=sx0*nn
280 n24(i)=sy0*nn
281 n34(i)=sz0*nn
282C
283 area(i)=area(i)+nn
284 area(i)=half*area(i)
285C
286 lb4(i) = -(sx0*sx1 + sy0*sy1 + sz0*sz1) * s2
287 lc4(i) = (sx0*sx4 + sy0*sy4 + sz0*sz4) * s2
288 ENDDO
289C---------------------------------------------------------
290C
291 DO i=1,jlt
292 aaa = one/max(em30,x01(i)*x01(i)+y01(i)*y01(i)+z01(i)*z01(i))
293 hlc1(i)= lc1(i)*abs(lc1(i))*aaa
294 hlb4(i)= lb4(i)*abs(lb4(i))*aaa
295 al1(i) = -(xi0v(i)*x01(i)+yi0v(i)*y01(i)+zi0v(i)*z01(i))*aaa
296 al1(i) = max(zero,min(one,al1(i)))
297 aaa = one/max(em30,x02(i)*x02(i)+y02(i)*y02(i)+z02(i)*z02(i))
298 hlc2(i)= lc2(i)*abs(lc2(i))*aaa
299 hlb1(i)= lb1(i)*abs(lb1(i))*aaa
300 al2(i) = -(xi0v(i)*x02(i)+yi0v(i)*y02(i)+zi0v(i)*z02(i))*aaa
301 al2(i) = max(zero,min(one,al2(i)))
302 aaa = one/max(em30,x03(i)*x03(i)+y03(i)*y03(i)+z03(i)*z03(i))
303 hlc3(i)= lc3(i)*abs(lc3(i))*aaa
304 hlb2(i)= lb2(i)*abs(lb2(i))*aaa
305 al3(i) = -(xi0v(i)*x03(i)+yi0v(i)*y03(i)+zi0v(i)*z03(i))*aaa
306 al3(i) = max(zero,min(one,al3(i)))
307 aaa = one/max(em30,x04(i)*x04(i)+y04(i)*y04(i)+z04(i)*z04(i))
308 hlc4(i)= lc4(i)*abs(lc4(i))*aaa
309 hlb3(i)= lb3(i)*abs(lb3(i))*aaa
310 al4(i) = -(xi0v(i)*x04(i)+yi0v(i)*y04(i)+zi0v(i)*z04(i))*aaa
311 al4(i) = max(zero,min(one,al4(i)))
312 ENDDO
313C
314 DO i=1,jlt
315 x12 = x2(i) - x1(i)
316 y12 = y2(i) - y1(i)
317 z12 = z2(i) - z1(i)
318 la = one - lb1(i) - lc1(i)
319C HLA, HLB1, HLC1 required for triangle sharp angle
320 aaa = one / max(em20,x12*x12+y12*y12+z12*z12)
321 hla= la*abs(la) * aaa
322 inproj(1,i)=0
323 IF(la<zero.AND.
324 + hla<=hlb1(i).AND.hla<=hlc1(i))THEN
325 lb1(i) = (xi2(i)*x12+yi2(i)*y12+zi2(i)*z12) * aaa
326 lb1(i) = max(zero,min(one,lb1(i)))
327 lc1(i) = one - lb1(i)
328 inproj(1,i)=1
329 ELSEIF(lb1(i)<zero.AND.
330 + hlb1(i)<=hlc1(i).AND.hlb1(i)<=hla)THEN
331 lb1(i) = zero
332 lc1(i) = al2(i)
333 inproj(1,i)=1
334 ELSEIF(lc1(i)<zero.AND.
335 + hlc1(i)<=hla.AND.hlc1(i)<=hlb1(i))THEN
336 lc1(i) = zero
337 lb1(i) = al1(i)
338 inproj(1,i)=1
339 ENDIF
340 ENDDO
341C
342 DO i=1,jlt
343 IF(ix3(i)==ix4(i))cycle
344 x23 = x3(i) - x2(i)
345 y23 = y3(i) - y2(i)
346 z23 = z3(i) - z2(i)
347 la = one - lb2(i) - lc2(i)
348C HLA, HLB1, HLC1 required for triangle sharp angle
349 aaa = one / max(em20,x23*x23+y23*y23+z23*z23)
350 hla= la*abs(la) * aaa
351 inproj(2,i)=0
352 IF(la<zero.AND.
353 + hla<=hlb2(i).AND.hla<=hlc2(i))THEN
354 lb2(i) = (xi3(i)*x23+yi3(i)*y23+zi3(i)*z23)*aaa
355 lb2(i) = max(zero,min(one,lb2(i)))
356 lc2(i) = one - lb2(i)
357 inproj(2,i)=1
358 ELSEIF(lb2(i)<zero.AND.
359 + hlb2(i)<=hlc2(i).AND.hlb2(i)<=hla)THEN
360 lb2(i) = zero
361 lc2(i) = al3(i)
362 inproj(2,i)=1
363 ELSEIF(lc2(i)<zero.AND.
364 + hlc2(i)<=hla.AND.hlc2(i)<=hlb2(i))THEN
365 lc2(i) = zero
366 lb2(i) = al2(i)
367 inproj(2,i)=1
368 ENDIF
369 ENDDO
370C
371 DO i=1,jlt
372 IF(ix3(i)==ix4(i))cycle
373 x34 = x4(i) - x3(i)
374 y34 = y4(i) - y3(i)
375 z34 = z4(i) - z3(i)
376 la = one - lb3(i) - lc3(i)
377C HLA, HLB1, HLC1 required for triangle sharp angle
378 aaa = one / max(em20,x34*x34+y34*y34+z34*z34)
379 hla= la*abs(la) * aaa
380 inproj(3,i)=0
381 IF(la<zero.AND.
382 + hla<=hlb3(i).AND.hla<=hlc3(i))THEN
383 lb3(i) = (xi4(i)*x34+yi4(i)*y34+zi4(i)*z34)*aaa
384 lb3(i) = max(zero,min(one,lb3(i)))
385 lc3(i) = one - lb3(i)
386 inproj(3,i)=1
387 ELSEIF(lb3(i)<zero.AND.
388 + hlb3(i)<=hlc3(i).AND.hlb3(i)<=hla)THEN
389 lb3(i) = zero
390 lc3(i) = al4(i)
391 inproj(3,i)=1
392 ELSEIF(lc3(i)<zero.AND.
393 + hlc3(i)<=hla.AND.hlc3(i)<=hlb3(i))THEN
394 lc3(i) = zero
395 lb3(i) = al3(i)
396 inproj(3,i)=1
397 ENDIF
398 ENDDO
399C
400 DO i=1,jlt
401 IF(ix3(i)==ix4(i))cycle
402 x41 = x1(i) - x4(i)
403 y41 = y1(i) - y4(i)
404 z41 = z1(i) - z4(i)
405 la = one - lb4(i) - lc4(i)
406C HLA, HLB1, HLC1 required for triangle sharp angle
407 aaa = one / max(em20,x41*x41+y41*y41+z41*z41)
408 hla= la*abs(la) * aaa
409 inproj(4,i)=0
410 IF(la<zero.AND.
411 + hla<=hlb4(i).AND.hla<=hlc4(i))THEN
412 lb4(i) = (xi1(i)*x41+yi1(i)*y41+zi1(i)*z41)*aaa
413 lb4(i) = max(zero,min(one,lb4(i)))
414 lc4(i) = one - lb4(i)
415 inproj(4,i)=1
416 ELSEIF(lb4(i)<zero.AND.
417 + hlb4(i)<=hlc4(i).AND.hlb4(i)<=hla)THEN
418 lb4(i) = zero
419 lc4(i) = al1(i)
420 inproj(4,i)=1
421 ELSEIF(lc4(i)<zero.AND.
422 + hlc4(i)<=hla.AND.hlc4(i)<=hlb4(i))THEN
423 lc4(i) = zero
424 lb4(i) = al4(i)
425 inproj(4,i)=1
426 ENDIF
427 ENDDO
428C---------------------------------------------------------
429 DO i=1,jlt
430C
431 gap2(i)=gapv(i)*gapv(i)
432C
433 la1 = one - lb1(i) - lc1(i)
434 xp1(i) = lb1(i)*x1(i) + lc1(i)*x2(i) + la1*x0(i)
435 yp1(i) = lb1(i)*y1(i) + lc1(i)*y2(i) + la1*y0(i)
436 zp1(i) = lb1(i)*z1(i) + lc1(i)*z2(i) + la1*z0(i)
437C
438 nx1(i) = xi(i)-xp1(i)
439 ny1(i) = yi(i)-yp1(i)
440 nz1(i) = zi(i)-zp1(i)
441 p1(i) = nx1(i)*nx1(i) + ny1(i)*ny1(i) +nz1(i)*nz1(i)
442C
443 la2 = one - lb2(i) - lc2(i)
444 xp2(i) = lb2(i)*x2(i) + lc2(i)*x3(i) + la2*x0(i)
445 yp2(i) = lb2(i)*y2(i) + lc2(i)*y3(i) + la2*y0(i)
446 zp2(i) = lb2(i)*z2(i) + lc2(i)*z3(i) + la2*z0(i)
447C
448 nx2(i) = xi(i)-xp2(i)
449 ny2(i) = yi(i)-yp2(i)
450 nz2(i) = zi(i)-zp2(i)
451 p2(i) = nx2(i)*nx2(i) + ny2(i)*ny2(i) +nz2(i)*nz2(i)
452C
453 la3 = one - lb3(i) - lc3(i)
454 xp3(i) = lb3(i)*x3(i) + lc3(i)*x4(i) + la3*x0(i)
455 yp3(i) = lb3(i)*y3(i) + lc3(i)*y4(i) + la3*y0(i)
456 zp3(i) = lb3(i)*z3(i) + lc3(i)*z4(i) + la3*z0(i)
457C
458 nx3(i) = xi(i)-xp3(i)
459 ny3(i) = yi(i)-yp3(i)
460 nz3(i) = zi(i)-zp3(i)
461 p3(i) = nx3(i)*nx3(i) + ny3(i)*ny3(i) +nz3(i)*nz3(i)
462C
463 la4 = one - lb4(i) - lc4(i)
464 xp4(i) = lb4(i)*x4(i) + lc4(i)*x1(i) + la4*x0(i)
465 yp4(i) = lb4(i)*y4(i) + lc4(i)*y1(i) + la4*y0(i)
466 zp4(i) = lb4(i)*z4(i) + lc4(i)*z1(i) + la4*z0(i)
467C
468 nx4(i) = xi(i)-xp4(i)
469 ny4(i) = yi(i)-yp4(i)
470 nz4(i) = zi(i)-zp4(i)
471 p4(i) = nx4(i)*nx4(i) + ny4(i)*ny4(i) +nz4(i)*nz4(i)
472C
473 ENDDO
474C
475 DO i=1,jlt
476 END DO
477C
478 DO i=1,jlt
479C
480 IF(ix3(i)/=ix4(i))THEN
481C
482 h =nx1(i)*n11(i) + ny1(i)*n21(i) +nz1(i)*n31(i)
483 ll=p1(i)-h*h
484 IF(inproj(1,i)/=0.AND.ll >= gap2(i))THEN
485 p1(i)=zero
486 ELSE
487 p1(i)=max(zero,gapv(i)-abs(h))
488 END IF
489C
490 h =nx2(i)*n12(i) + ny2(i)*n22(i) +nz2(i)*n32(i)
491 ll=p2(i)-h*h
492 IF(inproj(2,i)/=0.AND.ll >= gap2(i))THEN
493 p2(i)=zero
494 ELSE
495 p2(i)=max(zero,gapv(i)-abs(h))
496 END IF
497C
498 h =nx3(i)*n13(i) + ny3(i)*n23(i) +nz3(i)*n33(i)
499 ll=p3(i)-h*h
500 IF(inproj(3,i)/=0.AND.ll >= gap2(i))THEN
501 p3(i)=zero
502 ELSE
503 p3(i)=max(zero,gapv(i)-abs(h))
504 END IF
505C
506 h =nx4(i)*n14(i) + ny4(i)*n24(i) +nz4(i)*n34(i)
507 ll=p4(i)-h*h
508 IF(inproj(4,i)/=0.AND.ll >= gap2(i))THEN
509 p4(i)=zero
510 ELSE
511 p4(i)=max(zero,gapv(i)-abs(h))
512 END IF
513C
514 pene(i) = max(p1(i),p2(i),p3(i),p4(i))
515C
516 n1(i) = p1(i)*n11(i)+p2(i)*n12(i)+p3(i)*n13(i)+p4(i)*n14(i)
517 n2(i) = p1(i)*n21(i)+p2(i)*n22(i)+p3(i)*n23(i)+p4(i)*n24(i)
518 n3(i) = p1(i)*n31(i)+p2(i)*n32(i)+p3(i)*n33(i)+p4(i)*n34(i)
519 nn=sqrt(n1(i)*n1(i)+n2(i)*n2(i)+n3(i)*n3(i))
520 nn=one/max(em20,nn)
521 n1(i)=n1(i)*nn
522 n2(i)=n2(i)*nn
523 n3(i)=n3(i)*nn
524C
525 la1 = one - lb1(i) - lc1(i)
526 la2 = one - lb2(i) - lc2(i)
527 la3 = one - lb3(i) - lc3(i)
528 la4 = one - lb4(i) - lc4(i)
529C
530 h0 = fourth *
531 . (p1(i)*la1 + p2(i)*la2 + p3(i)*la3 + p4(i)*la4)
532 h1(i) = h0 + p1(i) * lb1(i) + p4(i) * lc4(i)
533 h2(i) = h0 + p2(i) * lb2(i) + p1(i) * lc1(i)
534 h3(i) = h0 + p3(i) * lb3(i) + p2(i) * lc2(i)
535 h4(i) = h0 + p4(i) * lb4(i) + p3(i) * lc3(i)
536 h00 = one/max(em20,h1(i) + h2(i) + h3(i) + h4(i))
537 h1(i) = h1(i) * h00
538 h2(i) = h2(i) * h00
539 h3(i) = h3(i) * h00
540 h4(i) = h4(i) * h00
541C
542 ELSE ! IF(IX3(I)/=IX4(I))THEN
543C
544 h1(i) = lb1(i)
545 h2(i) = lc1(i)
546 h3(i) = one - lb1(i) - lc1(i)
547 h4(i) = zero
548C
549 n1(i) = n11(i)
550 n2(i) = n21(i)
551 n3(i) = n31(i)
552C
553 h =nx1(i)*n11(i) + ny1(i)*n21(i) +nz1(i)*n31(i)
554 ll=p1(i)-h*h
555 IF(inproj(1,i)/=0.AND.ll >= gap2(i))THEN
556 pene(i)=zero
557 ELSE
558 pene(i)=max(zero,gapv(i)-abs(h))
559 END IF
560 END IF
561 ENDDO
562C
563 DO 410 i=1,jlt
564 xp(i)=h1(i)*x1(i)+h2(i)*x2(i)+h3(i)*x3(i)+h4(i)*x4(i)
565 yp(i)=h1(i)*y1(i)+h2(i)*y2(i)+h3(i)*y3(i)+h4(i)*y4(i)
566 zp(i)=h1(i)*z1(i)+h2(i)*z2(i)+h3(i)*z3(i)+h4(i)*z4(i)
567 410 CONTINUE
568C---------------------------------------------------------
569 DO i=1,jlt
570 nx1(i) = xi(i)-xp(i)
571 ny1(i) = yi(i)-yp(i)
572 nz1(i) = zi(i)-zp(i)
573 ENDDO
574C---------------------
575 DO i=1,jlt
576C
577 nvers(1,i) = zero
578 firstimp(1,i) = zero
579C
580 IF(pene(i)==zero)cycle
581C--------------------------------------------------------
582 side=n1(i)*nx1(i)+n2(i)*ny1(i)+n3(i)*nz1(i)
583C
584 IF(ifpen(i)==0)THEN
585 firstimp(1,i) = sign(one,side)
586 IF(firstimp(1,i) < zero)THEN
587 n1(i) = -n1(i)
588 n2(i) = -n2(i)
589 n3(i) = -n3(i)
590 END IF
591 nvers(1,i) = one
592C 1st impact below gap (sorting security)
593 ELSE ! IF(IFPEN(I)==0.OR.TT==ZERO)THEN
594 IF(ifpen(i) < 0)THEN
595 n1(i) = -n1(i)
596 n2(i) = -n2(i)
597 n3(i) = -n3(i)
598C SIDE = -SIDE
599 END IF
600 nvers(1,i)= sign(one,side*ifpen(i))
601 END IF
602C---------------------
603 IF(nvers(1,i)==zero)THEN
604 pene(i)=zero
605 cycle
606 END IF
607C
608C beware of crossing the shell => 1E20...,
609C Take normal = normal at triangle
610 nn=one/
611 . max(em20,sqrt(n1(i)*n1(i)+n2(i)*n2(i)+n3(i)*n3(i)))
612 n1(i)=n1(i)*nn
613 n2(i)=n2(i)*nn
614 n3(i)=n3(i)*nn
615C
616 nx(i)=n1(i)
617 ny(i)=n2(i)
618 nz(i)=n3(i)
619C
620 END DO
621C---------------------
622 DO i=1,jlt
623 IF(pene(i)/=zero)THEN
624 IF(firstimp(1,i) > zero)THEN
625 ifpen(i) = 1
626 ELSEIF(firstimp(1,i) < zero)THEN
627 ifpen(i) =-1
628 END IF
629 END IF
630 ENDDO
631C---------------------
632 RETURN
633 END
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine inint3(inscr, x, ixs, ixc, pm, geo, ipari, nin, itab, ms, mwa, rwa, ixtg, iwrn, ikine, ixt, ixp, ixr, nelemint, iddlevel, ifiend, ale_connectivity, nsnet, nmnet, igrbric, iwcont, nsnt, nmnt, nsn2t, nmn2t, iwcin2, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, igrsurf, ikine1, ielem21, sh4tree, sh3tree, ipart, ipartc, iparttg, thk, thk_part, nod2el1d, knod2el1d, ixs10, i_mem, resort, inter_cand, ixs16, ixs20, id, titr, iremnode, nremnode, iparts, kxx, ixx, igeo, intercep, lelx, intbuf_tab, fillsol, stack, iworksh, kxig3d, ixig3d, tagprt_fric, intbuf_fric_tab, ipartt, ipartp, ipartx, ipartr, nsn_multi_connec, t2_add_connec, t2_nb_connec, t2_connec, nom_opt, icode, iskew, iremnode_edg, s_append_array, x_append, mass_append, n2d, flag_removed_node, nspmd, inter_type2_number, elem_linked_to_segment, sinscr, sicode, sitab, nin25, flag_elem_inter25, multi_fvm, iresp)
Definition inint3.F:147
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine i23dst3(jlt, cand_n, cand_e, irect, nsv, gap_s, x, msr, pene, ifpen, igap, gap, gapmax, gapmin, gapv, gap_m)
Definition i23dst3.F:33
program starter
Definition starter.F:39