33 SUBROUTINE i8for3(OUTPUT,LFT ,LLT ,NFT ,
34 2 E ,MSR ,NSV ,IRTL ,STF ,
36 3 STFN ,IBC ,ICODT ,FSAV ,IGIMP ,
37 4 X ,V ,MS ,FMAX ,NSN ,
38 5 FSKYI ,ISKY ,FCONT ,RCONTACT,IFORM,
39 6 FTSAVX,FTSAVY,FTSAVZ,VISC ,FNOR ,
40 7 DEPTH ,DIST ,GAPN ,SLOPEN,STIFN ,
41 8 FNCONT,FTCONT,ITAB ,IFT0,
53 K THK ,H3D_DATA,NINSKID,
54 L NINTERSKID,PSKIDS,IRECT,NIN,
55 M TAGNCONT ,KLOADPINTER,LOADPINTER ,LOADP_HYD_INTER,
56 O IFLINEAR ,FRIC_LAST,FNOR_LAST,DISTLIN)
61 USE output_mod,
ONLY: output_
65#include "implicit_f.inc"
78#include "remesh_c.inc"
82 INTEGER IBC, IGIMP, NSN,LFT, LLT, NFT, IFORM,IFT0,NINSKID ,NINTERSKID,NIN
83 INTEGER MSR(*), NSV(*), IRTL(*), ICODT(*), ISKY(*),ITAB(*)
84 INTEGER NSVGLO(*),NSV2(*),ILOC(*),IRECT(4,*)
86 INTEGER IX1(*), IX2(*), IX3(*), IX4(*),
87 . TAGNCONT(NLOADP_HYD_INTER,NUMNOD),
88 . KLOADPINTER(NINTER+1),LOADPINTER(NINTER*NLOADP_HYD),
89 . LOADP_HYD_INTER(NLOADP_HYD)
90 INTEGER ,
INTENT(IN) :: IFLINEAR
92 . E(*), STF(*), STFN(*), FSAV(*), X(3,*),V(3,*),MS(*),
93 . FSKYI(LSKYI,NFSKYI),FCONT(3,*),FMAX, RCONTACT(*),
94 . FTSAVX(*), FTSAVY(*), FTSAVZ(*), VISC,SLOPEN(*),
95 . FNOR,DEPTH,DIST(*),GAPN(*),STIFN(*),FNCONT(3,*),FTCONT(3,*),
96 . PSKIDS(NINTERSKID,*)
98 . XI(*), YI(*), ZI(*), N1(*), N2(*), N3(*), ANS(*), SSC(*),
99 . TTC(*), THK(*), H1(*), H2(*), H3(*), H4(*), (*), STIF(*),
100 . FXI(*), FYI(*), FZI(*), (*), FX1(*), FX2(*), FX3(*), FX4(*),
101 . FY1(*), FY2(*), FY3(*), FY4(*), FZ1(*), FZ2(*), FZ3(*), FZ4(*)
102 my_real ,
INTENT(IN) :: FRIC_LAST,FNOR_LAST,DISTLIN(NSN)
103 TYPE(H3D_DATABASE) :: H3D_DATA
104 TYPE(OUTPUT_),
INTENT(inout) :: OUTPUT
109 INTEGER I, IL, L, J3, J2, J1, IG,
110 . I3, I2, I1,J,NN, PP, PPL,K
113 . nx,ny,nz,lx,ly,lz,nx2,cc2,st,li2(nsn),
114 . vx(nsn),vy(nsn),vz(nsn),vv(nsn),
115 . nn1(nsn),nn2(nsn),nn3(nsn),fnni(nsn),
116 . felast, ftry, deltag, dt1inv, vis2,pen(nsn),ffac,
118 . fnxi(nsn),fnyi(nsn),fnzi(nsn),fnx1(nsn),fny1(nsn),
119 . fnz1(nsn),fnx2(nsn),fny2(nsn),fnz2(nsn),fnx3(nsn),
120 . fny3(nsn),fnz3(nsn),fnx4(nsn),fny4(nsn),fnz4(nsn),
121 . ftxi(nsn),ftyi(nsn),ftzi(nsn),ftx1(nsn),fty1(nsn),
122 . ftz1(nsn),ftx2(nsn),fty2(nsn),ftz2(nsn),ftx3(nsn),
123 . fty3(nsn),ftz3(nsn),ftx4(nsn),fty4(nsn),ftz4(nsn)
137 IF(depth > zero)
THEN
143 pen(i) = (depth - dist(i) + gapn(l))*abs(xface(i))
157 IF(l > 0.AND.pen(i)>zero)
THEN
160 pskids(ninskid,nn) = one
167 IF(nintloadp > 0)
THEN
168 DO k = kloadpinter(nin)+1, kloadpinter(nin+1)
170 ppl = loadp_hyd_inter(pp)
174 IF(l > 0.AND.pen(i)>zero)
THEN
205 i1 = nsvglo(
max(1,nsv2(il)-1))
206 i2 = nsvglo(
min(nsn,nsv2(il)+1))
208 lx = half*(x(1,i2)-x(1,i1))
209 ly = half*(x(2,i2)-x(2,i1))
210 lz = half*(x(3,i2)-x(3,i1))
212 nx = n2(i)*lz - n3(i)*ly
213 ny = n3(i)*lx - n1(i)*lz
214 nz = n1(i)*ly - n2(i)*lx
217 vx(i) = v(1,ix1(i))*h1(i) + v(1,ix2(i))*h2(i)
218 . + v(1,ix3(i))*h3(i) + v(1,ix4(i))*h4(i)
219 vy(i) = v(2,ix1(i))*h1(i) + v(2,ix2(i))*h2(i)
220 . + v(2,ix3(i))*h3(i) + v(2,ix4(i))*h4(i)
221 vz(i) = v(3,ix1(i))*h1(i) + v(3,ix2(i))*h2(i)
222 . + v(3,ix3(i))*h3(i) + v(3,ix4(i))*h4(i)
223 vv(i) = vx(i)*nx + vy(i)*ny + vz(i)*nz
243 . *fourth*( ms(ix1(i))+ms(ix2(i))+ms(ix3(i))+ms(ix4(i)) )
244 nx2 =
max(em20,n1(i)*n1(i)+n2(i)*n2(i)+n3(i)*n3(i))
246 fni(i)= vv(i)*sqrt(cc2/nx2)*abs(xface(i))
247 IF(fric_last/= zero)
THEN
248 ftlim = fmax + (distlin(ig)/distlin(nsn))*(fric_last-fmax)
272 i1 = nsvglo(
max(1,nsv2(il)-1))
273 i2 = nsvglo(
min(nsn,nsv2(il)+1))
275 lx = half*(x(1,i2)-x(1,i1))
276 ly = half*(x(2,i2)-x(2,i1))
277 lz = half*(x(3,i2)-x(3,i1))
279 nx = n2(i)*lz - n3(i)*ly
280 ny = n3(i)*lx - n1(i)*lz
281 nz = n1(i)*ly - n2(i)*lx
284 vx(i) = v(1,ix1(i))*h1(i) + v(1,ix2(i))*h2(i)
285 . + v(1,ix3(i))*h3(i) + v(1,ix4(i))*h4(i)
286 vy(i) = v(2,ix1(i))*h1(i) + v(2,ix2(i))*h2(i)
287 . + v(2,ix3(i))*h3(i) + v(2,ix4(i))*h4(i)
288 vz(i) = v(3,ix1(i))*h1(i) + v(3,ix2(i))*h2(i)
289 . + v(3,ix3(i))*h3(i) + v(3,ix4(i))*h4(i)
291 vv(i) = vx(i)*nx + vy(i)*ny + vz(i)*nz
321 . * fourth*( ms(ix1(i))+ms(ix2(i))+ms(ix3(i))+ms(ix4(i)) )
323 fxi(i)=(ftsavx(ig)+st*vx(i)*dt1)*abs(xface(i))
324 fyi(i)=(ftsavy(ig)+st*vy(i)*dt1)*abs(xface(i))
325 fzi(i)=(ftsavz(ig)+st*vz(i)*dt1)*abs(xface(i))
327 nx2 =
max(em20,n1(i)*n1(i)+n2(i)*n2(i)+n3(i)*n3(i))
330 felast =(fxi(i)*n1(i)+fyi(i)*n2(i)+fzi(i)*n3(i))*nx2
332 ftry =felast+sqrt(cc2*nx2)*vv(i)*abs(xface(i))
334 IF(fric_last/= zero)
THEN
335 ftlim = fmax + (distlin(ig)/distlin(nsn))*(fric_last-fmax)
338 fni(i) =sign(
min(abs(ftry),ftlim),ftry)
342 deltag =(ftry-fni(i))/
max(em20,st+sqrt(cc2)*dt1inv)
343 felast =felast-st*deltag
346 ftsavx(ig)=felast*n1(i)
347 ftsavy(ig)=felast*n2(i)
348 ftsavz(ig)=felast*n3(i)
379 IF(irtl(il) > 0)
THEN
382 IF(fnor_last/= zero)
THEN
383 fnlim = fnor + (distlin(ig)/distlin(nsn))*(fnor_last-fnor)
385 IF(pen(i)>=depth)
THEN
386 fnni(i)= fnlim*sqrt(li2(i))
387 ELSEIF(pen(i)>zero)
THEN
388 fnni(i)= slopen(ig)*pen(i)*sqrt(li2(i))
390 IF(ift0==0 .AND. slopen(ig)<stf(l))
THEN
397 fnxi(i)= - nn1(i)*fnni(i)
398 fnyi(i)= - nn2(i)*fnni(i)
399 fnzi(i)= - nn3(i)*fnni(i)
410 fxi(i)= fxi(i) + fnxi(i)
411 fyi(i)= fyi(i) + fnyi(i)
412 fzi(i)= fzi(i) + fnzi(i)
425 fsav(1)=fsav(1)+fnxi(i)*dt12
426 fsav(2)=fsav(2)+fnyi(i)*dt12
427 fsav(3)=fsav(3)+fnzi(i)*dt12
429 fsav(4)=fsav(4)+ftxi(i)*dt12
430 fsav(5)=fsav(5)+ftyi(i)*dt12
431 fsav(6)=fsav(6)+ftzi(i)*dt12
433 fsav(8)=fsav(8)+abs(fnxi(i))*dt12
434 fsav(9)=fsav(9)+abs(fnyi(i))*dt12
435 fsav(10)=fsav(10)+abs(fnzi(i))*dt12
436 fsav(11)=fsav(11)+fni(i)*dt12
438 fsav(12)=fsav(12)+abs(fxi(i))*dt12
439 fsav(13)=fsav(13)+abs(fyi(i))*dt12
440 fsav(14)=fsav(14)+abs(fzi(i))*dt12
441 fsav(15) = fsav(15) +sqrt(fxi(i)*fxi(i)+fyi(i)*fyi(i)+fzi(i)*fzi(i))*dt12
461 fnx1(i)=fnxi(i)*h1(i)
462 fny1(i)=fnyi(i)*h1(i)
463 fnz1(i)=fnzi(i)*h1(i)
465 fnx2(i)=fnxi(i)*h2(i)
466 fny2(i)=fnyi(i)*h2(i)
467 fnz2(i)=fnzi(i)*h2(i)
469 fnx3(i)=fnxi(i)*h3(i)
470 fny3(i)=fnyi(i)*h3(i)
471 fnz3(i)=fnzi(i)*h3(i)
473 fnx4(i)=fnxi(i)*h4(i)
474 fny4(i)=fnyi(i)*h4(i)
475 fnz4(i)=fnzi(i)*h4(i)
477 ftx1(i)=ftxi(i)*h1(i)
478 fty1(i)=ftyi(i)*h1(i)
479 ftz1(i)=ftzi(i)*h1(i)
481 ftx2(i)=ftxi(i)*h2(i)
482 fty2(i)=ftyi(i)*h2(i)
483 ftz2(i)=ftzi(i)*h2(i)
485 ftx3(i)=ftxi(i)*h3(i)
486 fty3(i)=ftyi(i)*h3(i)
487 ftz3(i)=ftzi(i)*h3(i)
489 ftx4(i)=ftxi(i)*h4(i)
490 fty4(i)=ftyi(i)*h4(i)
491 ftz4(i)=ftzi(i)*h4(i)
547 nisky = nisky + 5 * llt
548#include "lockoff.inc"
553 fskyi(niskyl,1)=fx1(i)
554 fskyi(niskyl,2)=fy1(i)
555 fskyi(niskyl,3)=fz1(i)
557 isky(niskyl) = ix1(i)
559 fskyi(niskyl,1)=fx2(i)
560 fskyi(niskyl,2)=fy2(i)
561 fskyi(niskyl,3)=fz2(i)
563 isky(niskyl) = ix2(i)
565 fskyi(niskyl,1)=fx3(i)
566 fskyi(niskyl,2)=fy3(i)
567 fskyi(niskyl,3)=fz3(i)
569 isky(niskyl) = ix3(i)
571 fskyi(niskyl,1)=fx4(i)
572 fskyi(niskyl,2)=fy4(i)
573 fskyi(niskyl,3)=fz4(i)
575 isky(niskyl) = ix4(i)
577 fskyi(niskyl,1)=-fxi(i)
578 fskyi(niskyl,2)=-fyi(i)
579 fskyi(niskyl,3)=-fzi(i)
582 isky(niskyl) = nsv(il)
587 fskyi(niskyl,1)=fx1(i)
588 fskyi(niskyl,2)=fy1(i)
589 fskyi(niskyl,3)=fz1(i)
592 isky(niskyl) = ix1(i)
594 fskyi(niskyl,1)=fx2(i)
595 fskyi(niskyl,2)=fy2(i)
596 fskyi(niskyl,3)=fz2(i)
599 isky(niskyl) = ix2(i)
601 fskyi(niskyl,1)=fx3(i)
602 fskyi(niskyl,2)=fy3(i)
603 fskyi(niskyl,3)=fz3(i)
606 isky(niskyl) = ix3(i)
608 fskyi(niskyl,1)=fx4(i)
609 fskyi(niskyl,2)=fy4(i)
610 fskyi(niskyl,3)=fz4(i)
613 isky(niskyl) = ix4(i)
615 fskyi(niskyl,1)=-fxi(i)
616 fskyi(niskyl,2)=-fyi(i)
617 fskyi(niskyl,3)=-fzi(i)
621 isky(niskyl) = nsv(il)
628 IF(xface(i)/=zero)
THEN
629 rcontact(ix1(i))=zero
630 rcontact(ix2(i))=zero
631 rcontact(ix3(i))=zero
632 rcontact(ix4(i))=zero
635#include "lockoff.inc"
638 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT>0.AND.
639 . ((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP).OR.
640 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))
THEN
643 fcont(1,ix1(i)) =fcont(1,ix1(i)) + fx1(i)
644 fcont(2,ix1(i)) =fcont(2,ix1(i)) + fy1(i)
645 fcont(3,ix1(i)) =fcont(3,ix1(i)) + fz1(i)
646 fcont(1,ix2(i)) =fcont(1,ix2(i)) + fx2(i)
647 fcont(2,ix2(i)) =fcont(2,ix2(i)) + fy2(i)
648 fcont(3,ix2(i)) =fcont(3,ix2(i)) + fz2(i)
649 fcont(1,ix3(i)) =fcont(1,ix3(i)) + fx3(i)
650 fcont(2,ix3(i)) =fcont(2,ix3(i)) + fy3(i)
651 fcont(3,ix3(i)) =fcont(3,ix3(i)) + fz3(i)
652 fcont(1,ix4(i)) =fcont(1,ix4(i)) + fx4(i)
653 fcont(2,ix4(i)) =fcont(2,ix4(i)) + fy4(i)
654 fcont(3,ix4(i)) =fcont(3,ix4(i)) + fz4(i)
655 fcont(1,nsv(i+nft))=fcont(1,nsv(i+nft))- fxi(i)
656 fcont(2,nsv(i+nft))=fcont(2,nsv(i+nft))- fyi(i)
657 fcont(3,nsv(i+nft))=fcont(3,nsv(i+nft))- fzi(i)
660#include "lockoff.inc"
662 IF((anim_v(12)+outp_v(12)+h3d_data%N_VECT_PCONT>0.AND.
663 . ((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP
664 . (manim>=4.AND.manim<=15).OR.h3d_data%MH3D/=0))
665 . .OR.h3d_data%N_VECT_PCONT_MAX>0)
THEN
668 fncont(1,ix1(i)) =fncont(1,ix1(i)) + fnx1(i)
669 fncont(2,ix1(i)) =fncont(2,ix1(i)) + fny1(i)
670 fncont(3,ix1(i)) =fncont(3,ix1(i)) + fnz1(i)
671 fncont(1,ix2(i)) =fncont(1,ix2(i)) + fnx2(i)
672 fncont(2,ix2(i)) =fncont(2,ix2(i)) + fny2(i)
673 fncont(3,ix2(i)) =fncont(3,ix2(i)) + fnz2(i)
674 fncont(1,ix3(i)) =fncont(1,ix3(i)) + fnx3(i)
675 fncont(2,ix3(i)) =fncont(2,ix3(i)) + fny3(i)
676 fncont(3,ix3(i)) =fncont(3,ix3(i)) + fnz3(i)
677 fncont(1,ix4(i)) =fncont(1,ix4(i)) + fnx4(i)
678 fncont(2,ix4(i)) =fncont(2,ix4(i)) + fny4(i)
679 fncont(3,ix4(i)) =fncont(3,ix4(i)) + fnz4(i)
681 fncont(1,nsv(i+nft))=fncont(1,nsv(i+nft))- fnxi(i)
682 fncont(2,nsv(i+nft))=fncont(2,nsv(i+nft))- fnyi(i)
683 fncont(3,nsv(i+nft))=fncont(3,nsv(i+nft))- fnzi(i)
685 ftcont(1,ix1(i)) =ftcont(1,ix1(i)) + ftx1(i)
686 ftcont(2,ix1(i)) =ftcont(2,ix1(i)) + fty1(i)
687 ftcont(3,ix1(i)) =ftcont(3,ix1(i)) + ftz1(i)
688 ftcont(1,ix2(i)) =ftcont(1,ix2(i)) + ftx2(i)
689 ftcont(2,ix2(i)) =ftcont(2,ix2(i)) + fty2(i)
690 ftcont(3,ix2(i)) =ftcont(3,ix2(i)) + ftz2(i)
691 ftcont(1,ix3(i)) =ftcont(1,ix3(i)) + ftx3(i)
692 ftcont(2,ix3(i)) =ftcont(2,ix3(i)) + fty3(i)
693 ftcont(3,ix3(i)) =ftcont(3,ix3(i)) + ftz3(i)
694 ftcont(1,ix4(i)) =ftcont(1,ix4(i)) + ftx4(i)
695 ftcont(2,ix4(i)) =ftcont(2,ix4(i)) + fty4(i)
696 ftcont(3,ix4(i)) =ftcont(3,ix4(i)) + ftz4(i)
698 ftcont(1,nsv(i+nft))=ftcont(1,nsv(i+nft))- ftxi(i)
699 ftcont(2,nsv(i+nft))=ftcont(2,nsv(i+nft))- ftyi(i)
700 ftcont(3,nsv(i+nft))=ftcont(3,nsv(i+nft))- ftzi(i)
702#include "lockoff.inc"
707 IF(ibc==0.OR.xface(i)==zero)
GOTO 200
710 CALL ibcoff(ibc,icodt(ig))
subroutine i8for3(output, lft, llt, nft, e, msr, nsv, irtl, stf, nsvglo, nsv2, iloc, stfn, ibc, icodt, fsav, igimp, x, v, ms, fmax, nsn, fskyi, isky, fcont, rcontact, iform, ftsavx, ftsavy, ftsavz, visc, fnor, depth, dist, gapn, slopen, stifn, fncont, ftcont, itab, ift0, ix1, ix2, ix3, ix4, xi, yi, zi, n1, n2, n3, ans, ssc, ttc, h1, h2, h3, h4, xface, stif, fni, fxi, fyi, fzi, fx1, fy1, fz1, fx2, fy2, fz2, fx3, fy3, fz3, fx4, fy4, fz4, thk, h3d_data, ninskid, ninterskid, pskids, irect, nin, tagncont, kloadpinter, loadpinter, loadp_hyd_inter, iflinear, fric_last, fnor_last, distlin)