29 1 JLT ,CAND_S,CAND_M,H1S ,H2S ,
30 2 H1M ,H2M ,NX ,NY ,NZ ,
31 3 STIF ,N1 ,N2 ,M1 ,M2 ,
32 4 JLT_NEW,XXS1 ,XXS2 ,XYS1 ,XYS2 ,
33 5 XZS1 ,XZS2 ,XXM1 ,XXM2 ,XYM1 ,
34 6 XYM2 ,XZM1 ,XZM2 ,VXS1 ,VXS2 ,
35 7 VYS1 ,VYS2 ,VZS1 ,VZS2 ,VXM1 ,
36 8 VXM2 ,VYM1 ,VYM2 ,VZM1 ,VZM2 ,
37 9 MS1 ,MS2 ,MM1 ,MM2 ,IEDGE ,
38 B NSMS ,INDEX ,INTFRIC ,IPARTFRICSI,IPARTFRICMI ,
39 C GAPVE ,EX ,EY ,EZ ,FX ,
40 D FY ,FZ ,LEDGE ,IRECT ,CAND_P ,
41 E IAM ,JAM ,IBM ,JBM ,IAS ,
42 F JAS ,IBS ,JBS ,ITAB ,EDGE_ID,
47#include "implicit_f.inc"
59 INTEGER JLT,JLT_NEW, IEDGE,INTFRIC
60 INTEGER CAND_S(MVSIZ),CAND_M(MVSIZ),NSMS(MVSIZ),INDEX(*),
61 . N1(MVSIZ),(MVSIZ),M1(MVSIZ),M2(MVSIZ),
62 . IAM(MVSIZ),JAM(MVSIZ),IBM(MVSIZ),JBM(MVSIZ),
63 . IAS(MVSIZ),JAS(MVSIZ),IBS(MVSIZ),JBS(MVSIZ),
64 . IPARTFRICSI(MVSIZ),IPARTFRICMI(MVSIZ),
65 . IRECT(4,*),LEDGE(NLEDGE,*),ITAB(*)
66 INTEGER :: EDGE_ID(2,MVSIZ)
68 . H1S(*),H2S(*),H1M(*),H2M(*),NX(*),NY(*),NZ(*),STIF(*),
69 . XXS1(*), XXS2(*), XYS1(*), (*), XZS1(*) , XZS2(*),
70 . XXM1(*), XXM2(*) , XYM1(*), XYM2(*), XZM1(*), XZM2(*),
71 . VXS1(*), VXS2(*), VYS1(*), VYS2(*), VZS1(*), VZS2(*) ,
72 . VXM1(*), VXM2(*), VYM1(*), VYM2(*), VZM1(*), VZM2(*),
73 . MS1(*) ,MS2(*) ,MM1(*) ,MM2(*),
74 . gapve(*), ex(*), ey(*), ez(*), fx(*), fy(*), fz(*),
76 my_real ,
INTENT(IN) :: dgaploadpmax
80 INTEGER I, SOL_EDGE, SH_EDGE, K
83 . xs12,ys12,zs12,xm12,ym12,zm12,xa,xb,
84 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
85 . det,gap2,p1,p2,nn(mvsiz)
87 DATA NTRIA/1,2,4,2,4,1,0,0,0,4,1,2/
143 xm12 = xxm2(i)-xxm1(i)
144 ym12 = xym2(i)-xym1(i)
145 zm12 = xzm2(i)-xzm1(i)
146 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
148 xs12 = xxs2(i)-xxs1(i)
149 ys12 = xys2(i)-xys1(i)
150 zs12 = xzs2(i)-xzs1(i)
151 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
152 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
153 xs2m2 = xxm2(i)-xxs2(i)
154 ys2m2 = xym2(i)-xys2(i)
155 zs2m2 = xzm2(i)-xzs2(i)
157 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
158 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
159 det = xm2*xs2 - xsm*xsm
163 h1m(i) = (xa*xsm-xb*xs2) / det
166 h1m(i)=
min(one,
max(zero,h1m(i)))
167 h1s(i) = -(xa + h1m(i)*xsm) / xs2
168 h1s(i)=
min(one,
max(zero,h1s(i)))
169 h1m(i) = -(xb + h1s(i)*xsm) / xm2
170 h1m(i)=
min(one,
max(zero,h1m(i)))
177 nx(i) = h1s(i)*xxs1(i) + h2s(i)*xxs2(i)
178 . - h1m(i)*xxm1(i) - h2m(i)*xxm2(i)
179 ny(i) = h1s(i)*xys1(i) + h2s(i)*xys2(i)
180 . - h1m(i)*xym1(i) - h2m(i)*xym2(i)
181 nz(i) = h1s(i)*xzs1(i) + h2s(i)*xzs2(i)
182 . - h1m(i)*xzm1(i) - h2m(i)*xzm2(i)
183 nn(i)= nx(i)*nx(i) + ny(i)*ny(i) + nz(i)*nz(i)
185 gap2 = (gapve(i)+dgaploadpmax)*(gapve(i)+dgaploadpmax)
186 pene2(i) = gap2 - nn(i)
187 pene2(i) =
max(zero,pene2(i))
192 sh_edge =iedge-10*sol_edge
209 . p1=-(nx(i)*ex(i)+ny(i)*ey(i)+nz(i)*ez(i))
213 . p2= nx(i)*fx(i)+ny(i)*fy(i)+nz(i)*fz(i)
216 IF(p1 > em04*nn(i) .OR. p2 > em04*nn(i))pene2(i)=zero
224 IF(pene2(i)==zero) cand_p(index(i))=zero
228 IF(pene2(i)/=zero.AND.stif(i)/=zero)
THEN
229 jlt_new = jlt_new + 1
231 edge_id(1,jlt_new) = edge_id(1,i)
232 edge_id(2,jlt_new) = edge_id(2,i)
234 cand_s(jlt_new) = cand_s(i)
235 cand_m(jlt_new) = cand_m(i)
236 edge_id(1,jlt_new) = edge_id(1,i)
237 edge_id(2,jlt_new) = edge_id(2,i)
242 ibm(jlt_new) = ibm(i)
243 h1s(jlt_new) = h1s(i)
244 h2s(jlt_new) = h2s(i)
245 h1m(jlt_new) = h1m(i)
246 h2m(jlt_new) = h2m(i)
250 stif(jlt_new)= stif(i)
251 gapve(jlt_new)= gapve(i)
253 xxs1(jlt_new) = xxs1(i)
254 xys1(jlt_new) = xys1(i)
255 xzs1(jlt_new) = xzs1(i)
256 xxs2(jlt_new) = xxs2(i)
257 xys2(jlt_new) = xys2(i)
258 xzs2(jlt_new) = xzs2(i)
260 vxs1(jlt_new) = vxs1(i)
261 vys1(jlt_new) = vys1(i)
262 vzs1(jlt_new) = vzs1(i)
263 vxs2(jlt_new) = vxs2(i)
264 vys2(jlt_new) = vys2(i)
265 vzs2(jlt_new) = vzs2(i)
266 vxm1(jlt_new) = vxm1(i)
267 vym1(jlt_new) = vym1(i)
268 vzm1(jlt_new) = vzm1(i)
269 vxm2(jlt_new) = vxm2(i)
270 vym2(jlt_new) = vym2(i)
271 vzm2(jlt_new) = vzm2(i)
272 ms1(jlt_new) = ms1(i)
273 ms2(jlt_new) = ms2(i)
274 mm1(jlt_new) = mm1(i)
275 mm2(jlt_new) = mm2(i)
276 IF(idtmins == 2) nsms(jlt_new)= nsms(i)
277 IF(intfric /= 0)
THEN
278 ipartfricsi(jlt_new)=ipartfricsi(i)
279 ipartfricmi(jlt_new)=ipartfricmi(i)
281 index(jlt_new) = index(i)
subroutine i25dst3e(jlt, cand_s, cand_m, h1s, h2s, h1m, h2m, nx, ny, nz, stif, n1, n2, m1, m2, jlt_new, xxs1, xxs2, xys1, xys2, xzs1, xzs2, xxm1, xxm2, xym1, xym2, xzm1, xzm2, vxs1, vxs2, vys1, vys2, vzs1, vzs2, vxm1, vxm2, vym1, vym2, vzm1, vzm2, ms1, ms2, mm1, mm2, iedge, nsms, index, intfric, ipartfricsi, ipartfricmi, gapve, ex, ey, ez, fx, fy, fz, ledge, irect, cand_p, iam, jam, ibm, jbm, ias, jas, ibs, jbs, itab, edge_id, dgaploadpmax)