38 SUBROUTINE i24pen3(X ,IRECT ,GAPV ,CAND_E,CAND_N,
39 2 NSV ,INACTI,ITAB ,TAG ,IWPENE,
40 3 NSN ,IRTLM ,MSEGTYP ,IWPENE0 ,
41 4 PMIN ,GAP_N ,MVOISN ,IXS ,
42 5 IXS10,IXS16 ,IXS20,PENMAX,PENMIN,
43 6 ID,TITR ,ILEV ,PEN_OLD,KNOD2ELS,
44 7 NOD2ELS,IPARTNS,IPEN0 ,ICONT_I ,
45 8 XFIC ,NRTM ,IRTSE ,IS2SE)
53 USE format_mod ,
ONLY : fmt_i_3f
58#include "implicit_f.inc"
63#include "vect07_c.inc"
67 INTEGER IWPENE,TAG(*),INACTI,NSV(*),NSN,MSEGTYP(*),,
68 . MVOISN(4,*),ILEV,KNOD2ELS(*),NOD2ELS(*),IPARTNS(*),NRTM
71 INTEGER IRECT(4,*), ITAB(*),CAND_E(*),CAND_N(*),IRTLM(2,*)
72 INTEGER IXS(NIXS,*),IXS10(6,*), IXS16(8,*), IXS20(12,*),ICONT_I(
77 CHARACTER(LEN=NCHARTITLE) :: TITR
81 INTEGER II, I, J, K, L, JJ, NJ, IER,NS,IC,,IELIM,NI,ICONN,ip,NS1,
85 . pen, alp,xx(4),yy(4),zz(4),ssc,ttc,dist,dist0,
86 . xi,yi,zi,xc,yc,zc,nn(3),tol,pen0,dpen,
norm,maxpen
93 IF (iresp==1.AND.penmin<=em06) penmin = two*em06
96 IF (iresp==1) alp = two*em05
118 CALL ini_st3(xx,yy,zz,xi,yi,zi,nn,ssc,ttc,ier,alp,
130 . i5=itab(irect(1,l)),
131 . i6=itab(irect(2,l)),
132 . i7=itab(irect(3,l)),
133 . i8=itab(irect(4,l)))
136 ELSE IF(ier==1.AND.(msegtyp(l)/=0.AND.msegtyp(l)<=nrtm))
THEN
145 pen0=nn(1)*(xi-xc)+nn(2)*(yi-yc)+nn(3)*(zi-zc)
147 dist = sqrt((xi-xc)*(xi-xc)+(yi-yc)*(yi-yc)+(zi-zc)*(zi-zc))
154 IF (msegtyp(l)/=0.AND.msegtyp(l)<=nrtm)
THEN
155 pen=gapv(i)-abs(pen0)
156 IF (pen > penmax ) idel = 0
158 IF (pen > zero) dist = abs(gapv(i)-pen0)
160 IF (pen0 < zero .OR. pen > penmax) pen=-abs(pen)-tol
165 IF(ier==1) pen=-abs(pen)-tol
166 IF (pen > zero .OR. abs(pen) < tol)
THEN
168 IF (inacti /= 0) maxpen = penmax
169 CALL i24penmax(pen,maxpen ,mvoisn(1,l),mvoisn(2,l),
170 + ns ,ixs, ixs10, ixs16, ixs20 ,
176 CALL iconnet(irect(1,l),ixs ,knod2els,nod2els,
177 . ixs10 ,ixs16 ,ixs20 ,nn1 ,iconn )
179 .
CALL iconnet(irect(1,l),ixs ,knod2els,nod2els,
180 . ixs10 ,ixs16 ,ixs20 ,nn2 ,iconn )
182 CALL iconnet(irect(1,l),ixs ,knod2els,nod2els
183 . ixs10 ,ixs16 ,ixs20 ,ns ,iconn )
185 IF ((ielim+iconn) > 0) pen = -abs(pen)-tol
189 IF (inacti/=0.AND.(pen > zero .OR. abs(pen) < tol).AND.ilev/=3)
THEN
190 norm = nn(1)*pen_old(1,ni)+nn(2)*pen_old(2,ni)
191 + +nn(3)*pen_old(3,ni)
192 IF (
norm >= zero)
THEN
201 IF (inacti/=0.AND.(pen > zero .OR. abs(pen) < tol))
THEN
202 IF (ipartns(ni) == mvoisn(3,l))
THEN
208 IF (ipartns(ni) == mvoisn(3,l)) idel = 0
210 IF (gapv(i)>zero.AND.(msegtyp(l)==0.OR.msegtyp(l)>nrtm))idel=0
214 IF(abs(pen) < tol .OR. (pen<zero.AND.idel>0))
THEN
222 IF (dist <abs(pen0))
THEN
226 IF (pen0 > zero)
THEN
234 ELSEIF(pen > penmax)
THEN
239 ELSEIF(pen > zero)
THEN
241 IF (tag(ns)==0) iwpene=iwpene+1
243 IF(inacti ==0 .OR. inacti ==1)
THEN
254 pen_old(1:3,ni) = nn(1:3)
262 pen_old(1:3,ni) = nn(1:3)
265 ELSEIF(inacti ==-1)
THEN
270 dist0 = abs(pmin(i0))
271 IF (dist < dist0)
THEN
278 pen_old(1:3,ni) = nn(1:3)
288 pen_old(1:3,ni) = nn(1:3)
292 ELSEIF(inacti ==3 )
THEN
296 dpen = half*(pen + tol)
309 xfic(1,ns1) = xi + dpen*nn(1)
310 xfic(2,ns1) = yi + dpen*nn(2)
311 xfic(3,ns1) = zi + dpen*nn(3)
313 WRITE(iout,fmt=fmt_i_3f)(itab(numnod)+ns1),xfic(1,ns1),xfic(2,ns1),xfic(3,ns1)
316 x(1,ns) = xi + dpen*nn(1)
317 x(2,ns) = yi + dpen*nn(2)
318 x(3,ns) = zi + dpen*nn(3)
320 WRITE(iout,fmt=fmt_i_3f)itab(ns),x(1,ns),x(2,ns),x(3,ns)
324 ELSEIF(inacti ==5)
THEN
329 dist0 = abs(pmin(i0))
330 IF (dist < dist0)
THEN
337 pen_old(1:3,ni) = nn(1:3)
347 pen_old(1:3,ni) = nn(1:3)
351 END IF !(pen > zero)
THEN
356 1000
FORMAT(2x,
'** INITIAL PENETRATION =',1pg20.13,
357 .
' CHANGE COORDINATES OF SECONDARY NODE TO:')
358 1100
FORMAT(2x,
'** INITIAL PENETRATION =',1pg20.13,
359 .
' CHANGE COORDINATES OF MAIN NODE TO:')
360 1200
FORMAT(2x,
'** TOO HIGH INITIAL PENETRATION=, WILL BE IGNORED',
369 SUBROUTINE ini_st3(XX,YY,ZZ,XI,YI,ZI,NN,SSC,TTC,IER,ALP,
375#include "implicit_f.inc"
381 . XX(4),YY(4),ZZ(4),NN(3), SSC, TTC, ALP,XI,YI,ZI,XC,YC,ZC
386 . H(4), X0, Y0, Z0, XL1, XL2, XL3, XL4, YY1, YY2, YY3, YY4,
387 . zz1, zz2, zz3, zz4, xi1, xi2, xi3, xi4, yi1, yi2, yi3, yi4,
388 . zi1, zi2, zi3, zi4, xn1, yn1, zn1, xn2, yn2, zn2, xn3, yn3,
389 . zn3, xn4, yn4, zn4, an,
area, a12, a23, a34, a41, b12, b23,
390 . b34, b41, ab1, ab2, tp, tm, sp, sm, x1,x2,x3,x4,
391 . y1,y2,y3,y4,z1,z2,z3,z4,n1,n2,n3,la,lb,lc,lbs,lcs,tt1,ss1
406 x0 = fourth*(x1+x2+x3+x4)
407 y0 = fourth*(y1+y2+y3+y4)
408 z0 = fourth*(z1+z2+z3+z4)
436 xn1 = yy1*zz2 - yy2*zz1
437 yn1 = zz1*xl2 - zz2*xl1
438 zn1 = xl1*yy2 - xl2*yy1
443 xn2 = yy2*zz3 - yy3*zz2
444 yn2 = zz2*xl3 - zz3*xl2
445 zn2 = xl2*yy3 - xl3*yy2
450 xn3 = yy3*zz4 - yy4*zz3
451 yn3 = zz3*xl4 - zz4*xl3
452 zn3 = xl3*yy4 - xl4*yy3
457 xn4 = yy4*zz1 - yy1*zz4
458 yn4 = zz4*xl1 - zz1*xl4
459 zn4 = xl4*yy1 - xl1*yy4
464 an=
max(em20,sqrt(n1*n1+n2*n2+n3*n3))
477 a12=(n1*xn1+n2*yn1+n3*zn1)
478 a23=(n1*xn2+n2*yn2+n3*zn2)
479 a34=(n1*xn3+n2*yn3+n3*zn3)
480 a41=(n1*xn4+n2*yn4+n3*zn4)
482 xn1 = yi1*zi2 - yi2*zi1
483 yn1 = zi1*xi2 - zi2*xi1
484 zn1 = xi1*yi2 - xi2*yi1
485 b12=(n1*xn1+n2*yn1+n3*zn1)
487 xn2 = yi2*zi3 - yi3*zi2
488 yn2 = zi2*xi3 - zi3*xi2
489 zn2 = xi2*yi3 - xi3*yi2
490 b23=(n1*xn2+n2*yn2+n3*zn2)
492 xn3 = yi3*zi4 - yi4*zi3
493 yn3 = zi3*xi4 - zi4*xi3
494 zn3 = xi3*yi4 - xi4*yi3
495 b34=(n1*xn3+n2*yn3+n3*zn3)
497 xn4 = yi4*zi1 - yi1*zi4
498 yn4 = zi4*xi1 - zi1*xi4
499 zn4 = xi4*yi1 - xi1*yi4
500 b41=(n1*xn4+n2*yn4+n3*zn4)
505 IF(abs(ab1+ab2)/
area>em10)
THEN
506 ssc=(ab1-ab2)/(ab1+ab2)
510 IF(abs(a34/
area)>em10)
THEN
513 IF(abs(ab1+ab2)/
area>em10)
THEN
514 ttc=(ab1-ab2)/(ab1+ab2)
520 IF(b23<=zero.AND.b41<=zero)
THEN
521 IF(-b23/a12<=alp.AND.-b41/a12<=alp)ssc=zero
522 ELSEIF(b23<=zero)
THEN
523 IF(-b23/a12<=alp)
THEN
528 ELSEIF(b41<=zero)
THEN
529 IF(-b41/a12<=alp)
THEN
537 IF(abs(ssc)>one+alp.OR.abs(ttc)>one+alp)
THEN
540 IF (a34==zero.AND.ttc< one)
THEN
541 lb=fourth*(one - ttc)*(one - ssc)
542 lc=fourth*(one - ttc)*(one + ssc)
547 ELSEIF(lc>lb.AND.lc >= one)
THEN
550 ELSEIF(lb >= one)
THEN
554 lbs = half*(one+lb-lc)
555 lcs = half*(one-lb+lc)
556 lb=
min(one,
max(zero,lbs))
557 lc=
min(one,
max(zero,lcs))
560 ttc= one - two*lb - two*lc
562 IF(abs(ssc)>one)ssc=ssc/abs(ssc)
563 IF(abs(ttc)>one)ttc=ttc/abs(ttc)
566 IF(abs(ssc)>one)ssc=ssc/abs(ssc)
567 IF(abs(ttc)>one)ttc=ttc/abs(ttc)
580 xc =h(1)*x1+h(2)*x2+h(3)*x3+h(4)*x4
581 yc =h(1)*y1+h(2)*y2+h(3)*y3+h(4)*y4
582 zc =h(1)*z1+h(2)*z2+h(3)*z3+h(4)*z4
593 + IXS ,IXS10 ,IXS16 , IXS20 ,IELIM )
597#include "implicit_f.inc"
598#include "com04_c.inc"
602 INTEGER IXS(NIXS,*),IXS10(6,*), IXS16(8,*), IXS20(12,*)
603 INTEGER ETYP ,EL ,NS,IELIM
625 IF (intab(8,ixs(2,el),ns)) ielim=1
628 IF (intab(8,ixs(2,el),ns).OR.intab(6,ixs10(1,el2),ns))
631 el2=el-numels8-numels10
632 IF (intab(8,ixs(2,el),ns).OR.intab(12,ixs20(1,el2),ns))
635 el2=el-numels8-numels10-numels20
636 IF (intab(8,ixs(2,el),ns).OR.intab(8,ixs16(1,el2),ns))
640 IF (pen >= penmax ) ielim = 1
649 SUBROUTINE iconnet(IRECT ,IXS ,KNOD2ELS,NOD2ELS,
650 . IXS10 ,IXS16 ,IXS20 ,NS ,ICONN )
654#include "implicit_f.inc"
658#include "com04_c.inc"
663 INTEGER IRECT(4), IXS(NIXS,*), KNOD2ELS(*), NOD2ELS(*),
664 . IXS10(6,*), (8,*), IXS20(12,*),ICONN,NS
669 INTEGER N, JJ, II, K, NN, KK, , IAD
677 DO 230 iad=knod2els(ns)+1,knod2els(ns+1)
683 IF(ixs(k+1,n)==ii) iconn = 1
686 ELSEIF(n <= numels8+numels10)
THEN
690 IF(ixs(k+1,n)==ii) iconn = 1
693 IF(ixs10(k,n-numels8)==ii) iconn = 1
696 ELSEIF(n <= numels8+numels10+numels20)
THEN
700 IF(ixs(k+1,n)==ii) iconn = 1
703 IF(ixs20(k,n-numels8-numels10)==ii) iconn = 1
706 ELSEIF(n <= numels8+numels10+numels20+numels16)
THEN
710 IF(ixs(k+1,n)==ii) iconn = 1
713 IF(ixs16(k,n-numels8-numels10-numels20)==ii) iconn = 1
subroutine i24pen3(x, irect, gapv, cand_e, cand_n, nsv, inacti, itab, tag, iwpene, nsn, irtlm, msegtyp, iwpene0, pmin, gap_n, mvoisn, ixs, ixs10, ixs16, ixs20, penmax, penmin, id, titr, ilev, pen_old, knod2els, nod2els, ipartns, ipen0, icont_i, xfic, nrtm, irtse, is2se)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)