30 SUBROUTINE i15tott1(NOINT ,NDEB ,NTC ,X ,KSURF ,
31 2 IGRSURF ,BUFSF ,KTC ,KSI ,NOLD ,
32 3 XP1 ,XP2 ,XP3 ,XTK ,YTK ,
33 4 ZTK ,NTX ,NTY ,NTZ ,PENET ,
34 5 DEPTH ,XI ,YI ,ZI ,NXI ,
35 6 NYI ,NZI ,ANSMX ,HOLD ,IACTIV,
44#include "implicit_f.inc"
65 . nxi(*) ,nyi(*) ,nzi(*) ,xp1(3,mvsiz), xp2(3,mvsiz),
66 . xp3(3,mvsiz), ansmx, hold(3,*)
67 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
71 INTEGER ADRBUF, I, IL, NLS, IDG,
75 . a, b, c, an, bn, cn, rot(9), dgr, expn,
78 . n1, n2, n3, n, n11,n12,n13,nr1,n21,n22,n23,nr2,
79 . xkn1, ykn1, zkn1, sgnxkn, sgnykn, sgnzkn, xkn, ykn, zkn, eh,
80 . lambda1, lambda2, alp, bet,
81 . xh , yh , zh , mu, xh1, yh1, zh1, mu1, xh2, yh2, zh2, mu2,
82 . dx1, dy1, dz1, dx2, dy2, dz2, dx3, dy3, dz3,
83 . side1, side2, oldnx, oldny, oldnz, out, ps, nr,
86 . x1(mvsiz), y1(mvsiz), z1(mvsiz),
87 . x2(mvsiz), y2(mvsiz), z2(mvsiz),
88 . x3(mvsiz), y3(mvsiz), z3(mvsiz),
89 . x12(mvsiz), y12(mvsiz), z12(mvsiz),
90 . x13(mvsiz), y13(mvsiz), z13(mvsiz),
91 . x23(mvsiz), y23(mvsiz), z23(mvsiz),
92 . xm(mvsiz) , ym(mvsiz) , zm(mvsiz) ,
93 . xtk2(mvsiz) , ytk2(mvsiz) , ztk2(mvsiz) ,
96 adrbuf=igrsurf(ksurf)%IAD_BUFR
100 dgr =bufsf(adrbuf+36)
112 rot(i)=bufsf(adrbuf+7+i-1)
117 DO 75 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
124 xg=x(1,in1)-bufsf(adrbuf+4)
125 yg=x(2,in1)-bufsf(adrbuf+5)
126 zg=x(3,in1)-bufsf(adrbuf+6)
127 xp1(1,i)=rot(1)*xg+rot(2)*yg+rot(3)*zg
128 xp1(2,i)=rot(4)*xg+rot(5)*yg+rot(6)*zg
129 xp1(3,i)=rot(7)*xg+rot(8)*yg+rot(9)*zg
130 xg=x(1,in2)-bufsf(adrbuf+4)
131 yg=x(2,in2)-bufsf(adrbuf+5)
132 zg=x(3,in2)-bufsf(adrbuf+6)
133 xp2(1,i)=rot(1)*xg+rot(2)*yg+rot(3)*zg
134 xp2(2,i)=rot(4)*xg+rot(5)*yg+rot(6)*zg
135 xp2(3,i)=rot(7)*xg+rot(8)*yg+rot(9)*zg
136 xg=x(1,in3)-bufsf(adrbuf+4)
137 yg=x(2,in3)-bufsf(adrbuf+5)
138 zg=x(3,in3)-bufsf(adrbuf+6)
139 xp3(1,i)=rot(1)*xg+rot(2)*yg+rot(3)*zg
140 xp3(2,i)=rot(4)*xg+rot(5)*yg+rot(6)*zg
141 xp3(3,i)=rot(7)*xg+rot(8)*yg+rot(9)*zg
144 DO 100 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
163 n1=y12(i)*z13(i)-z12(i)*y13(i)
164 n2=z12(i)*x13(i)-x12(i)*z13(i)
165 n3=x12(i)*y13(i)-y12(i)*x13(i)
166 ntn=one/
max(em20,sqrt(n1*n1+n2*n2+n3*n3))
170 d(i) =-ntx(i)*x1(i)-nty(i)*y1(i)-ntz(i)*z1(i)
179 DO 125 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
183 eh =(abs(ntx(i)/(dgr*an))**expn)*an
184 . +(abs(nty(i)/(dgr*bn))**expn)*bn
185 . +(abs(ntz(i)/(dgr*cn))**expn)*cn
188 lambda1=(
max(em20,eh))**(-one/expn)
189 xh1 =abs(lambda1*ntx(i)/(dgr*an))**(one/(dgr-one))
190 IF (ntx(i)<zero) xh1=-xh1
191 yh1 =abs(lambda1*nty(i)/(dgr*bn))**(one/(dgr-one))
192 IF (nty(i)<zero) yh1=-yh1
193 zh1 =abs(lambda1*ntz(i)/(dgr*cn))**(one/(dgr-one))
194 IF (ntz(i)<zero) zh1=-zh1
195 mu1 =-ntx(i)*xh1-nty(i)*yh1-ntz(i)*zh1-d(i)
202 xtk(i) =xh1+mu1*ntx(i)
203 ytk(i) =yh1+mu1*nty(i)
204 ztk(i) =zh1+mu1*ntz(i)
205 xtk2(i)=xh2+mu2*ntx(i)
206 ytk2(i)=yh2+mu2*nty(i)
207 ztk2(i)=zh2+mu2*ntz(i)
213 DO 150 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
223 out = (dy1*dz2-dy2*dz1)*ntx(i)
224 . +(dz1*dx2-dz2*dx1)*nty(i)
225 . +(dx1*dy2-dy1*dx2)*ntz(i)
228 ps =dx1*x12(i)+dy1*y12(i)+dz1*z12(i)
229 nr =x12(i)*x12(i)+y12(i)*y12(i)+z12(i)*z12(i)
234 xtk(i)=alp*x1(i)+bet*x2(i)
235 ytk(i)=alp*y1(i)+bet*y2(i)
236 ztk(i)=alp*z1(i)+bet*z2(i)
241 out = (dy2*dz3-dy3*dz2)*ntx(i)
242 . +(dz2*dx3-dz3*dx2)*nty(i)
243 . +(dx2*dy3-dy2*dx3)*ntz(i)
246 ps =dx2*x23(i)+dy2*y23(i)+dz2*z23(i)
247 nr =x23(i)*x23(i)+y23(i)*y23(i)+z23(i)*z23(i)
252 xtk(i)=alp*x2(i)+bet*x3(i)
253 ytk(i)=alp*y2(i)+bet*y3(i)
254 ztk(i)=alp*z2(i)+bet*z3(i)
256 out = (dy3*dz1-dy1*dz3)*ntx(i)
257 . +(dz3*dx1-dz1*dx3)*nty(i)
258 . +(dx3*dy1-dy3*dx1)*ntz(i)
261 ps =-dx3*x13(i)-dy3*y13(i)-dz3*z13(i)
262 nr =x13(i)*x13(i)+y13(i)*y13(i)+z13(i)*z13(i)
267 xtk(i)=alp*x3(i)+bet*x1(i)
268 ytk(i)=alp*y3(i)+bet*y1(i)
269 ztk(i)=alp*z3(i)+bet*z1(i)
278 out = (dy1*dz2-dy2*dz1)*ntx(i)
279 . +(dz1*dx2-dz2*dx1)*nty(i)
280 . +(dx1*dy2-dy1*dx2)*ntz(i)
283 ps =dx1*x12(i)+dy1*y12(i)+dz1*z12(i)
284 nr =x12(i)*x12(i)+y12(i)*y12(i)+z12(i)*z12(i)
289 xtk2(i)=alp*x1(i)+bet*x2(i)
290 ytk2(i)=alp*y1(i)+bet*y2(i)
291 ztk2(i)=alp*z1(i)+bet*z2(i)
296 out = (dy2*dz3-dy3*dz2)*ntx(i)
297 . +(dz2*dx3-dz3*dx2)*nty(i)
298 . +(dx2*dy3-dy2*dx3)*ntz(i)
301 ps =dx2*x23(i)+dy2*y23(i)+dz2*z23(i)
302 nr =x23(i)*x23(i)+y23(i)*y23(i)+z23(i)*z23(i)
307 xtk2(i)=alp*x2(i)+bet*x3(i)
308 ytk2(i)=alp*y2(i)+bet*y3(i)
309 ztk2(i)=alp*z2(i)+bet*z3(i)
311 out = (dy3*dz1-dy1*dz3)*ntx(i)
312 . +(dz3*dx1-dz1*dx3)*nty(i)
313 . +(dx3*dy1-dy3*dx1)*ntz(i)
317 nr =x13(i)*x13(i)+y13(i)*y13(i)+z13(i)*z13(i)
322 xtk2(i)=alp*x3(i)+bet*x1(i)
323 ytk2(i)=alp*y3(i)+bet*y1(i)
324 ztk2(i)=alp*z3(i)+bet*z1(i)
331 DO 175 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
334 IF (iactiv(1,il)==-1)
GOTO 175
341 IF (xkn1*xh>=zero) sgnxkn=one
344 IF (ykn1*yh>=zero) sgnykn=one
347 IF (zkn1*zh>=zero) sgnzkn=one
351 nr1 =n11*n11+n12*n12+n13*n13
353 em =n11*xtk(i)+n12*ytk(i)+n13*ztk
355 lambda1=(em-exp((dgr-one)*log(
max(em,em20))/dgr))
356 . /
max(exp((dgr-one)*log(em20)/dgr),nr1)
367 IF (xkn1*xh>=zero) sgnxkn=one
370 IF (ykn1*yh>=zero) sgnykn=one
373 IF (zkn1*zh>=zero) sgnzkn=one
377 nr2 =n21*n21+n22*n22+n23*n23
379 em =n21*xtk2(i)+n22*ytk2(i)+n23*ztk2(i)
381 lambda2=(em-exp((dgr-one)*log(
max(em,em20))/dgr))
382 . /
max(exp((dgr-one)*log(em20)/dgr),nr2)
388 IF (inside1==0.AND.inside2==0)
THEN
392 IF (iactiv(1,il)==0)
THEN
393 IF (inside1/=0.AND.inside2/=0)
THEN
394 IF (abs(lambda1)>=abs(lambda2))
THEN
395 xm(i)=xtk(i)-lambda1*n11/
max(em20,nr1)
396 ym(i)=ytk(i)-lambda1*n12/
max(em20,nr1)
397 zm(i)=ztk(i)-lambda1*n13/
max(em20,nr1)
399 xm(i)=xtk2(i)-lambda2*n21/
max(em20,nr2)
400 ym(i)=ytk2(i)-lambda2*n22/
max(em20,nr2)
401 zm(i)=ztk2(i)-lambda2*n23/
max(em20,nr2)
406 ELSEIF(inside1/=0)
THEN
407 xm(i)=xtk(i)-lambda1*n11/
max
408 ym(i)=ytk(i)-lambda1*n12/
max(em20,nr1)
409 zm(i)=ztk(i)-lambda1*n13/
max(em20,nr1)
410 ELSEIF(inside2/=0)
THEN
411 xm(i)=xtk2(i)-lambda2*n21/
max(em20,nr2)
412 ym(i)=ytk2(i)-lambda2
413 zm(i)=ztk2(i)-lambda2*n23/
max(em20,nr2)
420 xh=hold(1,4*(il-1)+1)
421 yh=hold(2,4*(il-1)+1)
422 zh=hold(3,4*(il-1)+1)
423 n1=nold(1,4*(il-1)+1)
424 n2=nold(2,4*(il-1)+1)
425 n3=nold(3,4*(il-1)+1)
426 lambda1=(xh-xtk(i))*n1
429 lambda2=(xh-xtk2(i))*n1
432 IF (inside1/=0.AND.inside2/=0)
THEN
433 IF (abs(lambda1)>=abs(lambda2))
THEN
434 xm(i)=xtk(i)+lambda1*n1
435 ym(i)=ytk(i)+lambda1*n2
436 zm(i)=ztk(i)+lambda1*n3
438 xm(i)=xtk2(i)+lambda2*n1
439 ym(i)=ytk2(i)+lambda2*n2
440 zm(i)=ztk2(i)+lambda2*n3
445 ELSEIF(inside1/=0)
THEN
446 xm(i)=xtk(i)+lambda1*n1
447 ym(i)=ytk(i)+lambda1*n2
448 zm(i)=ztk(i)+lambda1*n3
449 ELSEIF(inside2/=0)
THEN
450 xm(i)=xtk2(i)+lambda2*n1
451 ym(i)=ytk2(i)+lambda2*n2
452 zm(i)=ztk2(i)+lambda2*n3
460 IF (xkn1*xm(i)>=zero) sgnxkn=one
463 IF (ykn1*ym(i)>=zero) sgnykn=one
466 IF (zkn1*zm(i)>=zero) sgnzkn=one
470 em=n1*xm(i)+n2*ym(i)+n3*zm(i)
471 xm(i)=xm(i)/
max(em20,em**(one/dgr))
472 ym(i)=ym(i)/
max(em20,em**(one/dgr))
473 zm(i)=zm(i)/
max(em20,em**(one/dgr))
476 IF (xkn1*xm(i)>=zero) sgnxkn=one
479 IF (ykn1*ym(i)>=zero) sgnykn=one
482 IF (zkn1*zm(i)>=zero) sgnzkn=one
486 nr =n1*n1+n2*n2+n3*n3
487 nr =one/
max(em20,sqrt(nr))
491 lambda1=(xm(i)-xtk(i))*n1
494 xm(i)=xtk(i)+lambda1*n1
495 ym(i)=ytk(i)+lambda1*n2
496 zm(i)=ztk(i)+lambda1*n3
498 iactiv(1,il)=iactiv(1,il)+1
502#include "vectorize.inc"
503 DO 200 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
507 IF (iactiv(1,il)<=0)
GOTO 200
512 IF (xkn1*xm(i)>=zero) sgnxkn=one
515 IF (ykn1*ym(i)>=zero) sgnykn=one
518 IF (zkn1*zm(i)>=zero) sgnzkn=one
522 em=n1*xm(i)+n2*ym(i)+n3*zm(i)
524 xm(i)=xm(i)/
max(em20,em**(one/dgr))
525 ym(i)=ym(i)/
max(em20,em**(one/dgr
526 zm(i)=zm(i)/
max(em20,em**(one/dgr))
531 IF (xkn1*xm(i)>=zero) sgnxkn=one
534 IF (ykn1*ym(i)>=zero) sgnykn=one
537 IF (zkn1*zm(i)>=zero) sgnzkn=one
541 nr =n1*n1+n2*n2+n3*n3
542 nr =one/
max(em20,sqrt(nr))
550 depth(i)=xm(i)*nxi(i)+ym(i)*nyi(i)+zm(i)*nzi(i)
552 penet(i)=(xtk(i)-xm(i))*nxi(i)
553 . +(ytk(i)-ym(i))*nyi(i)
554 . +(ztk(i)-zm(i))*nzi(i)
556 penet(i)=
max(zero,penet(i))
557 IF (depth(i)-penet(i)<em10*depth(i))
THEN
561 ansmx=
max(ansmx,penet(i))
566 DO 210 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
570 IF (iactiv(1,il)==-2)
THEN
575 WRITE(istdo,
'(A,I8)')
' WARNING INTERFACE ',noint
576 WRITE(istdo,
'(A,A,A,3I8)')
' ELEMENT/SEGMENT',
577 .
' DE-ACTIVATED FROM INTERFACE;',
578 . ' element/segment nodes:
',
580 WRITE(IOUT ,'(a,i8)
')' warning
INTERFACE ',NOINT
581 WRITE(IOUT,'(a,a,a,3i8)
')' element/segment
',
582 . ' de-activated from
',
583 . ' element/segment nodes:
',
585#include "lockoff.inc"