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
54 use element_mod ,
only :nixs
59#include "implicit_f.inc"
64#include "vect07_c.inc"
68 INTEGER IWPENE,TAG(*),INACTI,NSV(*),NSN,MSEGTYP(*),IWPENE0,
69 . MVOISN(4,*),ILEV,(*),NOD2ELS(*),IPARTNS(*),NRTM
72 INTEGER IRECT(4,*), ITAB(*),CAND_E(*),CAND_N(*),IRTLM(2,*)
73 INTEGER IXS(NIXS,*),IXS10(6,*), IXS16(8,*), IXS20(12,*),ICONT_I(*),
75 my_real x(3,*),pmin(*),gap_n(12,*),penmax,penmin,pen_old(5,nsn),xfic(3,*)
78 CHARACTER(LEN=NCHARTITLE) :: TITR
82 INTEGER II, I, J, K, L, JJ, NJ, IER,NS,IC,I0,IELIM,NI,ICONN,ip,NS1,
86 . pen, alp,xx(4),yy(4),zz(4),ssc,ttc,dist,dist0,
87 . xi,yi,zi,xc,yc,zc,nn(3),tol,pen0,dpen,
norm,maxpen
94 IF (iresp==1.AND.penmin<=em06) penmin = two*em06
97 IF (iresp==1) alp = two*em05
119 CALL ini_st3(xx,yy,zz,xi,yi,zi,nn,ssc,ttc,ier,alp,
131 . i5=itab(irect(1,l)),
132 . i6=itab(irect(2,l)),
133 . i7=itab(irect(3,l)),
134 . i8=itab(irect(4,l)))
137 ELSE IF(ier==1.AND.(msegtyp(l)/=0.AND.msegtyp(l)<=nrtm))
THEN
146 pen0=nn(1)*(xi-xc)+nn(2)*(yi-yc)+nn(3)*(zi-zc)
148 dist = sqrt((xi-xc)*(xi-xc)+(yi-yc)*(yi-yc)+(zi-zc)*(zi-zc))
155 IF (msegtyp(l)/=0.AND.msegtyp(l)<=nrtm)
THEN
156 pen=gapv(i)-abs(pen0)
157 IF (pen > penmax ) idel = 0
159 IF (pen > zero) dist = abs(gapv(i)-pen0)
161 IF (pen0 < zero .OR. pen > penmax) pen=-abs(pen)-tol
166 IF(ier==1) pen=-abs(pen)-tol
167 IF (pen > zero .OR. abs(pen) < tol)
THEN
169 IF (inacti /= 0) maxpen = penmax
170 CALL i24penmax(pen,maxpen ,mvoisn(1,l),mvoisn(2,l),
171 + ns ,ixs, ixs10, ixs16, ixs20 ,
177 CALL iconnet(irect(1,l),ixs ,knod2els,nod2els,
178 . ixs10 ,ixs16 ,ixs20 ,nn1 ,iconn )
180 .
CALL iconnet(irect(1,l),ixs ,knod2els,nod2els,
181 . ixs10 ,ixs16 ,ixs20 ,nn2 ,iconn )
183 CALL iconnet(irect(1,l),ixs ,knod2els,nod2els,
184 . ixs10 ,ixs16 ,ixs20 ,ns ,iconn )
186 IF ((ielim+iconn) > 0) pen = -abs(pen)-tol
187 IF (pen < zero ) idel = 0
190 IF (inacti/=0.AND.(pen > zero .OR. abs(pen) < tol).AND.ilev/=3)
THEN
191 norm = nn(1)*pen_old(1,ni)+nn(2)*pen_old(2,ni)
192 + +nn(3)*pen_old(3,ni)
193 IF (
norm >= zero)
THEN
202 IF (inacti/=0.AND.(pen > zero .OR. abs(pen) < tol))
THEN
203 IF (ipartns(ni) == mvoisn(3,l))
THEN
209 IF (ipartns(ni) == mvoisn(3,l)) idel = 0
211 IF (gapv(i)>zero.AND.(msegtyp(l)==0.OR.msegtyp(l)>nrtm))idel=0
215 IF(abs(pen) < tol .OR. (pen<zero.AND.idel>0))
THEN
223 IF (dist <abs(pen0))
THEN
227 IF (pen0 > zero)
THEN
235 ELSEIF(pen > penmax)
THEN
240 ELSEIF(pen > zero)
THEN
242 IF (tag(ns)==0) iwpene=iwpene+1
244 IF(inacti ==0 .OR. inacti ==1)
THEN
255 pen_old(1:3,ni) = nn(1:3)
263 pen_old(1:3,ni) = nn(1:3)
266 ELSEIF(inacti ==-1)
THEN
271 dist0 = abs(pmin(i0))
272 IF (dist < dist0)
THEN
279 pen_old(1:3,ni) = nn(1:3)
289 pen_old(1:3,ni) = nn(1:3)
293 ELSEIF(inacti ==3 )
THEN
297 dpen = half*(pen + tol)
310 xfic(1,ns1) = xi + dpen*nn(1)
311 xfic(2,ns1) = yi + dpen*nn(2)
312 xfic(3,ns1) = zi + dpen*nn(3)
314 WRITE(iout,fmt=fmt_i_3f)(itab(numnod)+ns1),xfic(1,ns1),xfic(2,ns1),xfic(3,ns1)
317 x(1,ns) = xi + dpen*nn(1)
318 x(2,ns) = yi + dpen*nn(2)
319 x(3,ns) = zi + dpen*nn(3)
321 WRITE(iout,fmt=fmt_i_3f)itab(ns),x(1,ns),x(2,ns),x(3,ns)
325 ELSEIF(inacti ==5)
THEN
330 dist0 = abs(pmin(i0))
331 IF (dist < dist0)
THEN
338 pen_old(1:3,ni) = nn(1:3)
348 pen_old(1:3,ni) = nn(1:3)
357 1000
FORMAT(2x,
'** INITIAL PENETRATION =',1pg20.13,
358 .
' CHANGE COORDINATES OF SECONDARY NODE TO:')
359 1100
FORMAT(2x,
'** INITIAL PENETRATION =',1pg20.13,
360 .
' CHANGE COORDINATES OF MAIN NODE TO:')
361 1200
FORMAT(2x,
'** TOO HIGH INITIAL PENETRATION=, WILL BE IGNORED',
370 SUBROUTINE ini_st3(XX,YY,ZZ,XI,YI,ZI,NN,SSC,TTC,IER,ALP,
376#include "implicit_f.inc"
382 . XX(4),YY(4),ZZ(4),NN(3), SSC, TTC, ALP,XI,YI,ZI,XC,YC,ZC
387 . H(4), X0, Y0, Z0, XL1, XL2, XL3, XL4, YY1, YY2, YY3, YY4,
388 . zz1, zz2, zz3, zz4, xi1, xi2, xi3, xi4, yi1, yi2, yi3, yi4,
389 . zi1, zi2, zi3, zi4, xn1, yn1, zn1, xn2, yn2, zn2, xn3, yn3,
390 . zn3, xn4, yn4, zn4, an,
area, a12, a23, a34, a41, b12, b23,
391 . b34, b41, ab1, ab2, tp, tm, sp, sm, x1,x2,x3,x4,
392 . y1,y2,y3,y4,z1,z2,z3,z4,n1,n2,n3,la,lb,lc,lbs,lcs,tt1,ss1
407 x0 = fourth*(x1+x2+x3+x4)
408 y0 = fourth*(y1+y2+y3+y4)
409 z0 = fourth*(z1+z2+z3+z4)
437 xn1 = yy1*zz2 - yy2*zz1
438 yn1 = zz1*xl2 - zz2*xl1
439 zn1 = xl1*yy2 - xl2*yy1
444 xn2 = yy2*zz3 - yy3*zz2
445 yn2 = zz2*xl3 - zz3*xl2
446 zn2 = xl2*yy3 - xl3*yy2
451 xn3 = yy3*zz4 - yy4*zz3
452 yn3 = zz3*xl4 - zz4*xl3
453 zn3 = xl3*yy4 - xl4*yy3
458 xn4 = yy4*zz1 - yy1*zz4
459 yn4 = zz4*xl1 - zz1*xl4
460 zn4 = xl4*yy1 - xl1*yy4
465 an=
max(em20,sqrt(n1*n1+n2*n2+n3*n3))
478 a12=(n1*xn1+n2*yn1+n3*zn1)
479 a23=(n1*xn2+n2*yn2+n3*zn2)
480 a34=(n1*xn3+n2*yn3+n3*zn3)
481 a41=(n1*xn4+n2*yn4+n3*zn4)
483 xn1 = yi1*zi2 - yi2*zi1
484 yn1 = zi1*xi2 - zi2*xi1
485 zn1 = xi1*yi2 - xi2*yi1
486 b12=(n1*xn1+n2*yn1+n3*zn1)
488 xn2 = yi2*zi3 - yi3*zi2
489 yn2 = zi2*xi3 - zi3*xi2
490 zn2 = xi2*yi3 - xi3*yi2
491 b23=(n1*xn2+n2*yn2+n3*zn2)
493 xn3 = yi3*zi4 - yi4*zi3
494 yn3 = zi3*xi4 - zi4*xi3
495 zn3 = xi3*yi4 - xi4*yi3
496 b34=(n1*xn3+n2*yn3+n3*zn3)
498 xn4 = yi4*zi1 - yi1*zi4
499 yn4 = zi4*xi1 - zi1*xi4
500 zn4 = xi4*yi1 - xi1*yi4
501 b41=(n1*xn4+n2*yn4+n3*zn4)
506 IF(abs(ab1+ab2)/
area>em10)
THEN
507 ssc=(ab1-ab2)/(ab1+ab2)
511 IF(abs(a34/
area)>em10)
THEN
514 IF(abs(ab1+ab2)/
area>em10)
THEN
515 ttc=(ab1-ab2)/(ab1+ab2)
521 IF(b23<=zero.AND.b41<=zero)
THEN
522 IF(-b23/a12<=alp.AND.-b41/a12<=alp)ssc=zero
523 ELSEIF(b23<=zero)
THEN
524 IF(-b23/a12<=alp)
THEN
529 ELSEIF(b41<=zero)
THEN
530 IF(-b41/a12<=alp)
THEN
538 IF(abs(ssc)>one+alp.OR.abs(ttc)>one+alp)
THEN
541 IF (a34==zero.AND.ttc< one)
THEN
542 lb=fourth*(one - ttc)*(one - ssc)
543 lc=fourth*(one - ttc)*(one + ssc)
548 ELSEIF(lc>lb.AND.lc >= one)
THEN
551 ELSEIF(lb >= one)
THEN
555 lbs = half*(one+lb-lc)
556 lcs = half*(one-lb+lc)
557 lb=
min(one,
max(zero,lbs))
558 lc=
min(one,
max(zero,lcs))
561 ttc= one - two*lb - two*lc
563 IF(abs(ssc)>one)ssc=ssc/abs(ssc)
564 IF(abs(ttc)>one)ttc=ttc/abs(ttc)
567 IF(abs(ssc)>one)ssc=ssc/abs(ssc)
568 IF(abs(ttc)>one)ttc=ttc/abs(ttc)
581 xc =h(1)*x1+h(2)*x2+h(3)*x3+h(4)*x4
582 yc =h(1)*y1+h(2)*y2+h(3)*y3+h(4)*y4
583 zc =h(1)*z1+h(2)*z2+h(3)*z3+h(4)*z4
653 SUBROUTINE iconnet(IRECT ,IXS ,KNOD2ELS,NOD2ELS,
654 . IXS10 ,IXS16 ,IXS20 ,NS ,ICONN )
655 use element_mod ,
only : nixs
659#include "implicit_f.inc"
663#include "com04_c.inc"
668 INTEGER IRECT(4), IXS(NIXS,*), KNOD2ELS(*), NOD2ELS(*),
669 . IXS10(6,*), (8,*), IXS20(12,*),ICONN,NS
674 INTEGER N, JJ, II, , NN, KK, IC, IAD
682 DO 230 iad=knod2els(ns)+1,knod2els(ns+1)
688 IF(ixs(k+1,n)==ii) iconn = 1
691 ELSEIF(n <= numels8+numels10)
THEN
695 IF(ixs(k+1,n)==ii) iconn = 1
698 IF(ixs10(k,n-numels8)==ii) iconn = 1
701 ELSEIF(n <= numels8+numels10+numels20)
THEN
705 IF(ixs(k+1,n)==ii) iconn = 1
708 IF(ixs20(k,n-numels8-numels10)==ii) iconn = 1
711 ELSEIF(n <= numels8+numels10+numels20+numels16)
THEN
715 IF(ixs(k+1,n)==ii) iconn = 1
718 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)