31 SUBROUTINE i21cor3(JLT ,NIN ,X ,IRECT ,NSN ,
32 2 NSV ,CAND_E ,CAND_N ,STF ,STFN ,
33 3 XM0 ,NOD_NORMAL,IRTLM ,CSTS ,MSR ,
35 5 IX1 ,IX2 ,IX3 ,IX4 ,NSVG ,
36 6 IGSTI ,STIF ,KMIN ,KMAX ,IGAP ,
37 7 GAP ,GAP_S ,GAPV ,GAPMAX,GAPMIN,
38 8 NX ,NY ,NZ ,PENE ,VXM ,
39 9 VYM ,VZM ,VXI ,VYI ,VZI ,
40 A MSI ,ITRIA ,LB ,LC ,IADM ,
41 B RCURV ,ANGLM ,NRADM ,ANGLT ,RCURVI,
42 C ANGLMI ,FXT ,FYT ,FZT ,FTXSAV,
43 D FTYSAV ,FTZSAV ,GAP_S0 ,AREA_S0,GAP0 ,
44 E AREA0 ,INTTH ,TEMP ,TEMPI ,IROT ,
45 F XG ,ROT ,AS ,BS ,ASI ,
46 G BSI ,XP ,YP ,ZP ,NODNX_SMS,
47 H NSMS ,MSTR ,PENI ,IFPEN ,ILEV ,
48 I X1 ,Y1 ,Z1 ,X2 ,Y2 ,
49 J Z2 ,X3 ,Y3 ,Z3 ,X4 ,
50 K Y4 ,Z4 ,DRAD ,PENRAD ,TINT ,
51 L TEMPM ,IFORM ,H1 ,H2 ,H3 ,
52 N H4 ,DIST ,ITAB ,NOINT ,DEPTH,
53 M INVN ,INTFRIC,IPARTFRICS,IPARTFRICSI,IPARTFRICM,
63#include "implicit_f.inc"
79 INTEGER IRECT(4,*), NSV(*), CAND_E(*), CAND_N(*),
80 . IRTLM(2,*), MSR(*), NODNX_SMS(*),
81 . jlt, noint, igap , nsn, nin, igsti, iadm, nradm, intth,
82 . irot, mstr, ifpen(*), ilev, iform,invn
83 INTEGER ,
INTENT(IN) :: INTFRIC, NRTM
84 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
85 . NSVG(MVSIZ), ITRIA(MVSIZ), NSMS(MVSIZ),ITAB(*)
86 INTEGER ,
INTENT(IN) :: IPARTFRICS(NSN),IPARTFRICM(NRTM)
87 INTEGER ,
INTENT(INOUT) :: IPARTFRICSI(MVSIZ),IPARTFRICMI(MVSIZ)
90 . X(3,*), STF(*), STFN(*),GAP_S(*),
91 . XM0(3,*), CSTS(2,*), MS(*), V(3,*), NOD_NORMAL(3,*),
92 . GAP, KMIN, KMAX, GAPMAX, GAPMIN, ANGLT,
93 . RCURV(*), ANGLM(*), RCURVI(MVSIZ), ANGLMI(MVSIZ),
94 . FTXSAV(*), FTYSAV(*), FTZSAV(*),
95 . FXT(MVSIZ), FYT(MVSIZ), FZT(MVSIZ),
96 . GAP_S0(*), AREA_S0(*), GAP0(*), AREA0(*), TEMP(*), TEMPI(*),
97 . XG(3), ROT(9), AS(*), BS(*), PENI(*), DRAD, TINT, TEMPM(*),DEPTH
100 . X1(MVSIZ), X2(MVSIZ), X3(MVSIZ), X4(MVSIZ),
101 . Y1(MVSIZ), Y2(MVSIZ), Y3(MVSIZ), Y4(MVSIZ),
102 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
103 . xi(mvsiz), yi(mvsiz), zi(mvsiz),
104 . nx(mvsiz), ny(mvsiz), nz(mvsiz), pene(mvsiz),
105 . stif(mvsiz) ,gapv(mvsiz),
108 . lb(mvsiz), lc(mvsiz), ls, asi(mvsiz), bsi(mvsiz),
109 . xp(mvsiz), yp(mvsiz), zp(mvsiz),
110 . penrad(*),h1(mvsiz), h2(mvsiz),h3(mvsiz),h4(mvsiz),
115 INTEGER I ,J ,IL, L, IG,JFT, IX, NI,
116 . N1, N2, N3, N4,I1,I2,I3,I4,ND,NG
118 . XT1(MVSIZ), XT2(MVSIZ), XT3(MVSIZ),
119 . YT1(), YT2(MVSIZ), YT3(MVSIZ),
120 . ZT1(MVSIZ), ZT2(MVSIZ), ZT3(MVSIZ),
121 . X0(MVSIZ), Y0(MVSIZ), Z0(MVSIZ),
122 . nx1(mvsiz), nx2(mvsiz), nx3(mvsiz), nx4(mvsiz),
123 . ny1(mvsiz), ny2(mvsiz), ny3(mvsiz), ny4(mvsiz),
124 . nz1(mvsiz), nz2(mvsiz), nz3(mvsiz), nz4(mvsiz),
125 . nx0(mvsiz), ny0(mvsiz), nz0(mvsiz), la(mvsiz),
126 . hx(mvsiz), hy(mvsiz), hz(mvsiz),
127 . nn, hn,temp0 , temp1, temp2, temp3,
139 la(i) = one-lb(i)-lc(i)
154 gapv(i)=gap_s(cand_n(i))
155 gapv(i)=
min(gapv(i),gapmax)
156 gapv(i)=
max(gapmin,gapv(i))
162 gap0(i) =gap_s0(cand_n(i))
163 area0(i)=area_s0(cand_n(i))
167 area0(i)=area_s0(cand_n(i))
178 asi(i) = as(cand_n(i))
179 bsi(i) = bs(cand_n(i))
191 temp1 =
nmtemp(nin)%P(-nd)
199 temp2 =
nmtemp(nin)%P(-nd)
207 temp3 =
nmtemp(nin)%P(-nd)
215 temp4 =
nmtemp(nin)%P(-nd)
218 IF(ix3(i)/=ix4(i))
THEN
219 temp0 = fourth*(temp1+temp2+temp3+temp4)
224 IF(itria(i)==1.OR.itria
THEN
225 tempm(i) = lb(i)*temp1+lc(i)*temp2+la(i)*temp0
226 ELSEIF(itria(i)==2.OR.itria(i)==-2)
THEN
227 tempm(i) = lb(i)*temp2+lc(i)*temp3+la(i)*temp0
228 ELSEIF(itria(i)==3.OR.itria(i)==-3)
THEN
229 tempm(i) = lb(i)*temp3+lc(i)*temp4+la(i)*temp0
230 ELSEIF(itria(i)==4.OR.itria(i)==-4)
THEN
231 tempm(i) = lb(i)*temp4+lc(i)*temp1+la(i)*temp0
244 IF(ix3(i)/=ix4(i))
THEN
246 IF(itria(i)==1.OR.itria(i)==-1)
THEN
247 h1(i) = lb(i) + la(i)/4
248 h2(i) = lc(i) + la(i)/4
251 ELSEIF(itria(i)==2.OR.itria(i)==-2)
THEN
252 h2(i) = lb(i) + la(i)/4
253 h3(i) = lc(i) + la(i)/4
256 ELSEIF(itria(i)==3.OR.itria(i)==-3)
THEN
257 h3(i) = lb(i) + la(i)/4
258 h4(i) = lc(i) + la(i)/4
261 ELSEIF(itria(i)==4.OR.itria(i)==-4)
THEN
262 h4(i) = lb(i) + la(i)/4
263 h1(i) = lc(i) + la(i)/4
293 x1(i)=xm0(1,ix1(i))+xg(1)
294 y1(i)=xm0(2,ix1(i))+xg(2)
295 z1(i)=xm0(3,ix1(i))+xg(3)
297 x2(i)=xm0(1,ix2(i))+xg(1)
298 y2(i)=xm0(2,ix2(i))+xg(2)
299 z2(i)=xm0(3,ix2(i))+xg(3)
301 x3(i)=xm0(1,ix3(i))+xg(1)
302 y3(i)=xm0(2,ix3(i))+xg(2)
303 z3(i)=xm0(3,ix3(i))+xg(3)
305 x4(i)=xm0(1,ix4(i))+xg(1)
306 y4(i)=xm0(2,ix4(i))+xg(2)
307 z4(i)=xm0(3,ix4(i))+xg(3)
313 nx1(i)=nod_normal(1,ix1(i))
314 ny1(i)=nod_normal(2,ix1(i))
315 nz1(i)=nod_normal(3,ix1(i))
317 nx2(i)=nod_normal(1,ix2(i))
318 ny2(i)=nod_normal(2,ix2(i))
319 nz2(i)=nod_normal(3,ix2(i))
321 nx3(i)=nod_normal(1,ix3(i))
322 ny3(i)=nod_normal(2,ix3(i))
323 nz3(i)=nod_normal(3,ix3(i))
325 nx4(i)=nod_normal(1,ix4(i))
326 ny4(i)=nod_normal(2,ix4(i))
327 nz4(i)=nod_normal(3,ix4(i))
336 . +rot(1)*xm0(1,ix1(i))
337 . +rot(4)*xm0(2,ix1(i))
338 . +rot(7)*xm0(3,ix1(i))
340 . +rot(2)*xm0(1,ix1(i))
341 . +rot(5)*xm0(2,ix1(i))
342 . +rot(8)*xm0(3,ix1(i))
344 . +rot(3)*xm0(1,ix1(i))
345 . +rot(6)*xm0(2,ix1(i))
346 . +rot(9)*xm0(3,ix1(i))
349 . +rot(1)*xm0(1,ix2(i))
350 . +rot(4)*xm0(2,ix2(i))
351 . +rot(7)*xm0(3,ix2(i))
353 . +rot(2)*xm0(1,ix2(i))
354 . +rot(5)*xm0(2,ix2(i))
355 . +rot(8)*xm0(3,ix2(i))
357 . +rot(3)*xm0(1,ix2(i))
358 . +rot(6)*xm0(2,ix2(i))
359 . +rot(9)*xm0(3,ix2(i))
362 . +rot(1)*xm0(1,ix3(i))
363 . +rot(4)*xm0(2,ix3(i))
364 . +rot(7)*xm0(3,ix3(i))
366 . +rot(2)*xm0(1,ix3(i))
367 . +rot(5)*xm0(2,ix3(i))
368 . +rot(8)*xm0(3,ix3(i))
370 . +rot(3)*xm0(1,ix3(i))
371 . +rot(6)*xm0(2,ix3(i))
372 . +rot(9)*xm0(3,ix3(i))
375 . +rot(1)*xm0(1,ix4(i))
376 . +rot(4)*xm0(2,ix4(i))
377 . +rot(7)*xm0(3,ix4(i))
379 . +rot(2)*xm0(1,ix4(i))
380 . +rot(5)*xm0(2,ix4(i))
381 . +rot(8)*xm0(3,ix4(i))
383 . +rot(3)*xm0(1,ix4(i))
384 . +rot(6)*xm0(2,ix4(i))
385 . +rot(9)*xm0(3,ix4(i))
391 nx1(i)= rot(1)*nod_normal(1,ix1(i))
392 . +rot(4)*nod_normal(2,ix1(i))
393 . +rot(7)*nod_normal(3,ix1(i))
394 ny1(i)= rot(2)*nod_normal(1,ix1(i))
395 . +rot(5)*nod_normal(2,ix1(i))
396 . +rot(8)*nod_normal(3,ix1(i))
397 nz1(i)= rot(3)*nod_normal(1,ix1(i))
398 . +rot(6)*nod_normal(2,ix1(i))
399 . +rot(9)*nod_normal(3,ix1(i))
401 nx2(i)= rot(1)*nod_normal(1,ix2(i))
402 . +rot(4)*nod_normal(2,ix2(i))
403 . +rot(7)*nod_normal(3,ix2(i))
404 ny2(i)= rot(2)*nod_normal(1,ix2(i))
405 . +rot(5)*nod_normal(2,ix2(i))
406 . +rot(8)*nod_normal(3,ix2(i))
407 nz2(i)= rot(3)*nod_normal(1,ix2(i))
408 . +rot(6)*nod_normal(2,ix2(i))
409 . +rot(9)*nod_normal(3,ix2(i))
411 nx3(i)= rot(1)*nod_normal(1,ix3(i))
412 . +rot(4)*nod_normal(2,ix3(i))
413 . +rot(7)*nod_normal(3,ix3(i))
414 ny3(i)= rot(2)*nod_normal(1,ix3(i))
415 . +rot(5)*nod_normal(2,ix3(i))
416 . +rot(8)*nod_normal(3,ix3(i))
417 nz3(i)= rot(3)*nod_normal(1,ix3(i))
418 . +rot(6)*nod_normal(2,ix3(i))
419 . +rot(9)*nod_normal(3,ix3(i))
421 nx4(i)= rot(1)*nod_normal(1,ix4(i))
422 . +rot(4)*nod_normal(2,ix4(i))
423 . +rot(7)*nod_normal(3,ix4(i))
424 ny4(i)= rot(2)*nod_normal(1,ix4(i))
425 . +rot(5)*nod_normal(2,ix4(i))
426 . +rot(8)*nod_normal(3,ix4(i))
427 nz4(i)= rot(3)*nod_normal(1,ix4(i))
428 . +rot(6)*nod_normal(2,ix4(i))
429 . +rot(9)*nod_normal(3,ix4(i))
436 IF(ix3(i)/=ix4(i))
THEN
437 x0(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
438 y0(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
439 z0(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
440 nx0(i)= fourth*(nx1(i)+nx2(i)+nx3(i)+nx4(i))
441 ny0(i)= fourth*(ny1(i)+ny2(i)+ny3(i)+ny4(i))
442 nz0(i)= fourth*(nz1(i)+nz2(i)+nz3(i)+nz4(i))
455 IF(itria(i)==1.OR.itria(i)==-1)
THEN
465 nx(i)=lb(i)*nx1(i)+lc(i)*nx2(i)+la(i)*nx0(i)
466 ny(i)=lb(i)*ny1(i)+lc(i)*ny2(i)+la(i)*ny0(i)
467 nz(i)=lb(i)*nz1(i)+lc(i)*nz2(i)+la(i)*nz0(i)
468 ELSEIF(itria(i)==2.OR.itria(i)==-2)
THEN
478 nx(i)=lb(i)*nx2(i)+lc(i)*nx3(i)+la(i)*nx0(i)
479 ny(i)=lb(i)*ny2(i)+lc(i)*ny3(i)+la(i)*ny0(i)
480 nz(i)=lb(i)*nz2(i)+lc(i)*nz3(i)+la(i)*nz0(i)
481 ELSEIF(itria(i)==3.OR.itria(i)==-3)
THEN
491 nx(i)=lb(i)*nx3(i)+lc(i)*nx4(i)+la(i)*nx0(i)
492 ny(i)=lb(i)*ny3(i)+lc(i)*ny4(i)+la(i)*ny0(i)
493 nz(i)=lb(i)*nz3(i)+lc(i)*nz4(i)+la(i)*nz0(i)
494 ELSEIF(itria(i)==4.OR.itria(i)==-4)
THEN
504 nx(i)=lb(i)*nx4(i)+lc(i)*nx1(i)+la(i)*nx0(i)
505 ny(i)=lb(i)*ny4(i)+lc(i)*ny1(i)+la(i)*ny0(i)
506 nz(i)=lb(i)*nz4(i)+lc(i)*nz1(i)+la(i)*nz0(i)
522 xp(i)=(lb(i)*xt1(i)+lc(i)*xt2(i)+la(i)*xt3(i))
523 yp(i)=(lb(i)*yt1(i)+lc(i)*yt2(i)+la(i)*yt3(i))
524 zp(i)=(lb(i)*zt1(i)+lc(i)*zt2(i)+la(i)*zt3(i))
530 hn =hx(i)*nx(i)+hy(i)*ny(i)+hz(i)*nz(i)
531 nx(i)=hx(i)*sign(one,hn)
532 ny(i)=hy(i)*sign(one,hn)
533 nz(i)=hz(i)*sign(one,hn)
535 dist(i)=sqrt(nx(i)*nx(i)+ny(i)*ny(i)+nz(i)*nz(i))
536 nn=one/
max(em20,dist(i))
541 dist(i)=dist(i)*sign(one,hn)
543 pene(i)=
max(zero,gapv(i)-dist(i))
550 stif(i)=stf(l)*abs(stfn(cand_n(i)))
557 penrad(i)=dist(i)-gapv(i)
567 ipartfricsi(i)= ipartfrics(ni)
568 ipartfricmi(i) = ipartfricm(l)
578 IF(pene(i)==zero)
THEN
579 ftxsav(cand_n(i))=zero
580 ftysav(cand_n(i))=zero
581 ftzsav(cand_n(i))=zero
582 peni(cand_n(i)) =zero
589 IF(pene(i)==zero)
THEN
590 ftxsav(cand_n(i))=zero
591 ftysav(cand_n(i))=zero
592 ftzsav(cand_n(i))=zero
593 peni(cand_n(i)) =zero
595 ELSEIF(ifpen(cand_n(i))==1)
THEN
598 peni(cand_n(i)) =pene(i)
604 tolfix = (one-em02)*depth
606 tol = gapv(i) + tolfix
607 IF(ifpen(cand_n(i))==1)
THEN
609 IF(pene(i)>tol.AND.stif(i)>zero)
THEN
611 WRITE(iout,
'(A,I10,A)')
612 .
' **CONTACT PROBLEM IN INTERFACE ',noint,
'**'
613 WRITE(istdo,
'(A)')
'The run encountered a problem in an in
615 WRITE(istdo,
'(A)')
'Maximum penetration is reached'
616 WRITE(istdo,
'(A)')
'You may need to check if contact normals
617 .of tools are oriented toward the blank,'
618 WRITE(iout,
'(A)')
'The run encountered a problem in an in
620 WRITE(iout,
'(A)')
'Maximum penetration is reached'
621 WRITE(iout,
'(A)')
'You may need to check if contact normals
622 .of tools are oriented toward the blank,'
627 WRITE(iout,
'(A,I10)')
' SECONDARY NODE : ',ni
628 WRITE(iout,
'(A,4I10)')
' MAIN NODES : ',
629 . itab(ix1(i)),itab(ix2(i)),itab(ix3(i)),itab(ix4(i))
630#include "lockoff.inc"
640 fxt(i)=ftxsav(cand_n(i))
641 fyt(i)=ftysav(cand_n(i))
642 fzt(i)=ftzsav(cand_n(i))
648 rcurvi(i)=rcurv(l)/nradm
649 anglmi(i)=anglm(l)/
max(em20,anglt)
655 nsms(i)=nodnx_sms(nsvg(i))+nodnx_sms(mstr)
657 IF(idtmins_int/=0)
THEN
659 IF(nsms(i)==0)nsms(i)=-1
662 ELSEIF(idtmins_int/=0)
THEN
subroutine i21cor3(jlt, nin, x, irect, nsn, nsv, cand_e, cand_n, stf, stfn, xm0, nod_normal, irtlm, csts, msr, ms, v, xi, yi, zi, ix1, ix2, ix3, ix4, nsvg, igsti, stif, kmin, kmax, igap, gap, gap_s, gapv, gapmax, gapmin, nx, ny, nz, pene, vxm, vym, vzm, vxi, vyi, vzi, msi, itria, lb, lc, iadm, rcurv, anglm, nradm, anglt, rcurvi, anglmi, fxt, fyt, fzt, ftxsav, ftysav, ftzsav, gap_s0, area_s0, gap0, area0, intth, temp, tempi, irot, xg, rot, as, bs, asi, bsi, xp, yp, zp, nodnx_sms, nsms, mstr, peni, ifpen, ilev, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, drad, penrad, tint, tempm, iform, h1, h2, h3, h4, dist, itab, noint, depth, invn, intfric, ipartfrics, ipartfricsi, ipartfricm, ipartfricmi, nrtm)