31 2 KSURF ,IGRSURF ,BUFSF ,KTC ,KSI ,
32 3 IACTIV ,IOLD ,HOLD ,NOLD ,DOLD ,
33 4 XP1 ,XP2 ,XP3 ,XTK ,YTK ,
34 5 ZTK ,NTX ,NTY ,NTZ ,PENET,
35 6 DEPTH ,XI ,YI ,ZI ,NXI ,
36 7 NYI ,NZI ,MS ,DE ,NPC ,
37 8 PLD ,WNF ,WTF ,WNS ,FNORMX,
38 9 FNORMY,FNORMZ,FTANGX,FTANGY,FTANGZ ,
39 A DT2T ,NOINT , NELTST ,ITYPTST ,VFRIC )
47#include "implicit_f.inc"
64 . KSI(4,*),IACTIV(4,*),NPC(*),KTC(*),
65 . NOINT,NELTST,ITYPTST
67 my_real STFAC, BUFSF(*),X(3,*) , IOLD(3,*),
68 . HOLD(3,*) , NOLD(3,*) ,DOLD(3,*),MS(*) , V(3,*),
69 . DE, PLD(*), XTK(*) ,YTK(*) ,ZTK(*) ,
70 . NTX(*) ,NTY(*) ,NTZ(*) ,
72 . xi(*) ,yi(*) ,zi(*) ,nxi(*) ,nyi(*) ,nzi(*) ,
73 . wnf(3,*) ,wtf(3,*) ,wns(*) ,xp1(3,*) ,xp2(3,*) ,xp3(3,*) ,
74 . fnormx,fnormy,fnormz,ftangx,ftangy,ftangz,
76 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
80 INTEGER ADRBUF, I, IL, IN1, IN2, IN3, IN4, NLS
82 . A, B, C, ROT(9), X1, X2, X3, XM, YM, ZM,
83 . V1, V2, V3, VXM, VYM, VZM, VRX, VRY, VRZ,
84 . V1X2, V2X1, V1X3, V3X1, V2X3, V3X2,
85 . deltx, delty, deltz, nd, pn, scale, nv,
86 . vxk, vyk, vzk, dvx, dvy, dvz, xh, yh, zh,
87 . dx1, dy1, dz1, dx2, dy2, dz2, dx3, dy3, dz3,
91 . ftx, fty, ftz, fnx, fny, fnz, ftn, fmax,fn,
94 . fxn(mvsiz),fyn(mvsiz),fzn(mvsiz),stf(mvsiz),
95 . fxt(mvsiz),fyt(mvsiz),fzt(mvsiz),
96 . l1(mvsiz),l2(mvsiz),l3(mvsiz),
97 . vx1(mvsiz),vy1(mvsiz),vz1(mvsiz),
98 . vx2(mvsiz),vy2(mvsiz),vz2(mvsiz),
99 . vx3(mvsiz),vy3(mvsiz),vz3(mvsiz),
100 . vxh(mvsiz),vyh(mvsiz),vzh(mvsiz)
102 adrbuf=igrsurf(ksurf)%IAD_BUFR
107 rot(i)=bufsf(adrbuf+7+i-1)
112 x1=bufsf(adrbuf+16)-bufsf(adrbuf+4)
113 x2=bufsf(adrbuf+17)-bufsf(adrbuf+5)
114 x3=bufsf(adrbuf+18)-bufsf(adrbuf+6)
115 xm=rot(1)*x1+rot(2)*x2+rot(3)*x3
116 ym=rot(4)*x1+rot(5)*x2+rot(6)*x3
117 zm=rot(7)*x1+rot(8)*x2+rot(9)*x3
124 vxm=rot(1)*v1+rot(2)*v2+rot(3)*v3
125 vym=rot(4)*v1+rot(5)*v2+rot(6)*v3
126 vzm=rot(7)*v1+rot(8)*v2+rot(9)*v3
133 vrx=rot(1)*v1+rot(2)*v2+rot(3)*v3
134 vry=rot(4)*v1+rot(5)*v2+rot(6)*v3
135 vrz=rot(7)*v1+rot(8)*v2+rot(9)*v3
140 DO 100 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
142 IF (iactiv(1,il)<=0)
GOTO 100
149 vx1(i)=rot(1)*v1+rot(2)*v2+rot(3)*v3
150 vy1(i)=rot(4)*v1+rot(5)*v2+rot(6)*v3
151 vz1(i)=rot(7)*v1+rot(8)*v2+rot(9)*v3
157 vx2(i)=rot(1)*v1+rot(2)*v2+rot(3)*v3
158 vy2(i)=rot(4)*v1+rot(5)*v2+rot(6)*v3
159 vz2(i)=rot(7)*v1+rot(8)*v2+rot(9)*v3
165 vx3(i)=rot(1)*v1+rot(2)*v2+rot(3)*v3
166 vy3(i)=rot(4)*v1+rot(5)*v2+rot(6)*v3
167 vz3(i)=rot(7)*v1+rot(8)*v2+rot(9)*v3
172 DO 200 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
174 IF (iactiv(1,il)<=0)
GOTO 200
177 stf(i)=stfac*depth(i)**2/
max((depth(i)-penet(i))**2,em20)
178 fxn(i)=stf(i)*penet(i)*nxi(i)
179 fyn(i)=stf(i)*penet(i)*nyi(i)
180 fzn(i)=stf(i)*penet(i)*nzi(i)
185 DO 250 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
187 IF (iactiv(1,il)<=0)
GOTO 250
190 l1(i)=iold(1,4*(il-1)+1)
191 l2(i)=iold(2,4*(il-1)+1)
192 l3(i)=iold(3,4*(il-1)+1)
197#include "vectorize.inc"
198 DO 275 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
200 IF (iactiv(1,il)<=0)
GOTO 275
209 IF (iactiv(1,il)>2)
THEN
210 deltx=dold(1,4*(il-1)+1)
211 delty=dold(2,4*(il-1)+1)
212 deltz=dold(3,4*(il-1)+1)
213 nd =sqrt(deltx*deltx+delty*delty+deltz*deltz)
215 pn=deltx*nxi(i)+delty*nyi(i)+deltz*nzi(i)
216 deltx=deltx-pn*nxi(i)
217 delty=delty-pn*nyi(i)
218 deltz=deltz-pn*nzi(i)
219 scale=nd/sqrt(deltx*deltx+delty*delty+deltz*deltz)
232 xh=hold(1,4*(il-1)+1)
233 yh=hold(2,4*(il-1)+1)
234 zh=hold(3,4*(il-1)+1)
247 IF (iactiv(1,il)>=2)
THEN
248 vxk=l1(i)*vx1(i)+l2(i)*vx2(i)+l3(i)*vx3(i)
249 vyk=l1(i)*vy1(i)+l2(i)*vy2(i)+l3(i)*vy3(i)
250 vzk=l1(i)*vz1(i)+l2(i)*vz2(i)+l3(i)*vz3(i)
254 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
265 dold(1,4*(il-1)+1)=deltx+dvx*dt1
266 dold(2,4*(il-1)+1)=delty+dvy*dt1
267 dold(3,4*(il-1)+1)=deltz+dvz*dt1
268 fxt(i)=stf(i)*dold(1,4*(il-1)+1)
269 fyt(i)=stf(i)*dold(2,4*(il-1)+1)
270 fzt(i)=stf(i)*dold(3,4*(il-1)+1)
276#include "vectorize.inc"
277 DO 625 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
279 IF (iactiv(1,il)<=0)
GOTO 625
288 ftn=sqrt(ftx*ftx+fty*fty+ftz*ftz)
289 fn =sqrt(fnx*fnx+fny*fny+fnz*fnz)
290 fmax=
max(vfric*fn,zero)
299 IF (iactiv(1,il)>1)
THEN
301 deltx=scale*dold(1,4*(il-1)+1)
302 delty=scale*dold(2,4*(il-1)+1)
303 deltz=scale*dold(3,4*(il-1)+1)
305 dold(1,4*(il-1)+1)=deltx
306 dold(2,4*(il-1)+1)=delty
307 dold(3,4*(il-1)+1)=deltz
317 DO 650 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
319 IF (iactiv(1,il)<=0)
GOTO 650
331 s1=half*sqrt(dx*dx+dy*dy+dz*dz)
339 s2=half*sqrt(dx*dx+dy*dy+dz*dz)
344 s3=half*sqrt(dx*dx+dy*dy+dz*dz)
348 iold(1,4*(il-1)+1)=s1*s
349 iold(2,4*(il-1)+1)=s2*s
350 iold(3,4*(il-1)+1)=s3*s
355#include "vectorize.inc"
356 DO 700 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
358 IF (iactiv(1,il)<=0)
GOTO 700
361 hold(1,4*(il-1)+1)=xi(i)
362 hold(2,4*(il-1)+1)=yi(i)
363 hold(3,4*(il-1)+1)=zi(i)
365 nold(1,4*(il-1)+1)=nxi(i)
366 nold(2,4*(il-1)+1)=nyi(i)
367 nold(3,4*(il-1)+1)=nzi(i)
373 DO 600 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
375 IF (iactiv(1,il)<=0)
GOTO 600
382 wns(in1) =wns(in1)+iold(1,4*(il-1)+1)*stf(i)
383 wns(in2) =wns(in2)+iold(2,4*(il-1)+1)*stf(i)
384 wns(in3) =wns(in3)+iold(3,4*(il-1)+1)*stf(i)
389 DO 800 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
391 IF (iactiv(1,il)<=0)
GOTO 800
400 f11=iold(1,4*(il-1)+1)*f1
401 f12=iold(2,4*(il-1)+1)*f1
402 f13=iold(3,4*(il-1)+1)*f1
403 wnf(1,in1)=wnf(1,in1)+f11
404 wnf(1,in2)=wnf(1,in2)+f12
405 wnf(1,in3)=wnf(1,in3)+f13
409 f11=iold(1,4*(il-1)+1)*f1
410 f12=iold(2,4*(il-1)+1)*f1
411 f13=iold(3,4*(il-1)+1)*f1
412 wnf(2,in1)=wnf(2,in1)+f11
413 wnf(2,in2)=wnf(2,in2)+f12
414 wnf(2,in3)=wnf(2,in3)+f13
418 f11=iold(1,4*(il-1)+1)*f1
419 f12=iold(2,4*(il-1)+1)*f1
420 f13=iold(3,4*(il-1)+1)*f1
421 wnf(3,in1)=wnf(3,in1)+f11
422 wnf(3,in2)=wnf(3,in2)+f12
423 wnf(3,in3)=wnf(3,in3)+f13
428 DO 825 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
430 IF (iactiv(1,il)<=0)
GOTO 825
439 f11=iold(1,4*(il-1)+1)*f1
440 f12=iold(2,4*(il-1)+1)*f1
441 f13=iold(3,4*(il-1)+1)*f1
442 wtf(1,in1)=wtf(1,in1)+f11
443 wtf(1,in2)=wtf(1,in2)+f12
444 wtf(1,in3)=wtf(1,in3)+f13
448 f11=iold(1,4*(il-1)+1)*f1
449 f12=iold(2,4*(il-1)+1)*f1
450 f13=iold(3,4*(il-1)+1)*f1
451 wtf(2,in1)=wtf(2,in1)+f11
452 wtf(2,in2)=wtf(2,in2)+f12
453 wtf(2,in3)=wtf(2,in3)+f13
457 f11=iold(1,4*(il-1)+1)*f1
458 f12=iold(2,4*(il-1)+1)*f1
459 f13=iold(3,4*(il-1)+1)*f1
460 wtf(3,in1)=wtf(3,in1)+f11
461 wtf(3,in2)=wtf(3,in2)+f12
462 wtf(3,in3)=wtf(3,in3)+f13
469 DO 900 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
471 IF (iactiv(1,il)<=0)
GOTO 900
476 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
478 h =xp1(1,i)*nxi(i)+xp1(2,i)*nyi(i)+xp1(3,i)*nzi(i)
479 dti=
min(dti,half*h/
max(em20,-pn))
484 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
486 h =xp2(1,i)*nxi(i)+xp2(2,i)*nyi(i)+xp2(3,i)*nzi(i)
487 dti=
min(dti,half*h/
max(em20,-pn))
492 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
494 h =xp3(1,i)*nxi(i)+xp3(2,i)*nyi(i)+xp3(3,i)*nzi(i)
495 dti=
min(dti,half*h/
max(em20,-pn))
507 DO 950 nls=ndeb+1,
min(ndeb+mvsiz,ntc)
509 IF (iactiv(1,il)<=0)
GOTO 950
514 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
516 h =xp1(1,i)*nxi(i)+xp1(2,i)*nyi(i)+xp1(3,i)*nzi(i)
517 dti=
min(dti,half*h/
max(em20,-pn))
522 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
524 h =xp2(1,i)*nxi(i)+xp2(2,i)*nyi(i)+xp2(3,i)*nzi(i)
525 dti=
min(dti,half*h/
max(em20,-pn))
530 pn=dvx*nxi(i)+dvy*nyi(i)+dvz*nzi(i)
532 h =xp3(1,i)*nxi(i)+xp3(2,i)*nyi(i)+xp3(3,i)*nzi(i)
533 dti=
min(dti,half*h/
max(em20,-pn))
540 WRITE(istdo,
'(A,E12.4,A,I8)')
541 .
' **WARNING MINIMUM TIME STEP ',dti,
' IN INTERFACE ',noint
542 WRITE(iout ,
'(A,E12.4,A,I8)')
543 .
' **WARNING MINIMUM TIME STEP ',dti,
' IN INTERFACE ',noint
544 WRITE(iout,'(a,3i8)
') ' element/segment nodes :
',
546#include "lockoff.inc"