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)
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,*),, 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(*), XFACE(*), STIF(*),
100 . FXI(*), FYI(*), FZI(*), FNI(*), 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
108 INTEGER I, IL, L, J3, J2, J1, IG,
109 . i3, i2, i1,jl,jg,j,nn, pp, ppl,k
112 . NX,NY,NZ,LX,LY,LZ,NX2,CC2,ST,LI2(NSN),
113 . vx(nsn),vy(nsn),vz(nsn),vv(nsn),vn(nsn),
114 . nn1(nsn),nn2(nsn),nn3(nsn),fnni(nsn),nnx,
115 . felast, ftry, deltag, dt1inv, vis2,pen(nsn),ffac,
117 . fnxi(nsn),fnyi(nsn),fnzi(nsn),fnx1(nsn),fny1(nsn),
118 . fnz1(nsn),fnx2(nsn),fny2(nsn),fnz2(nsn),fnx3(nsn),
119 . fny3(nsn),fnz3(nsn),fnx4(nsn),fny4(nsn),fnz4(nsn),
120 . ftxi(nsn),ftyi(nsn),ftzi(nsn),ftx1(nsn),fty1(nsn),
121 . ftz1(nsn),ftx2(nsn),fty2(nsn),ftz2(nsn),ftx3(nsn),
122 . fty3(nsn),ftz3(nsn),ftx4(nsn),fty4(nsn),ftz4(nsn)
136 IF(depth > zero)
THEN
142 pen(i) = (depth - dist(i) + gapn(l))*abs(xface(i))
156 IF(l > 0.AND.pen(i)>zero)
THEN
159 pskids(ninskid,nn) = one
166 IF(nintloadp > 0)
THEN
167 DO k = kloadpinter(nin)+1, kloadpinter(nin+1)
169 ppl = loadp_hyd_inter(pp)
173 IF(l > 0.AND.pen(i)>zero)
THEN
204 i1 = nsvglo(
max(1,nsv2(il)-1))
205 i2 = nsvglo(
min(nsn,nsv2(il)+1))
207 lx = half*(x(1,i2)-x(1,i1))
208 ly = half*(x(2,i2)-x(2,i1))
209 lz = half*(x(3,i2)-x(3,i1))
211 nx = n2(i)*lz - n3(i)*ly
212 ny = n3(i)*lx - n1(i)*lz
213 nz = n1(i)*ly - n2(i)*lx
216 vx(i) = v(1,ix1(i))*h1(i) + v(1,ix2(i))*h2(i)
217 . + v(1,ix3(i))*h3(i) + v(1,ix4(i))*h4(i)
218 vy(i) = v(2,ix1(i))*h1(i) + v(2,ix2
219 . + v(2,ix3(i))*h3(i) + v(2,ix4(i))*h4(i)
220 vz(i) = v(3,ix1(i))*h1(i) + v(3,ix2(i))*h2(i)
221 . + v(3,ix3(i))*h3(i) + v(3,ix4(i))*h4(i)
222 vv(i) = vx(i)*nx + vy(i)*ny + vz(i)*nz
242 . *fourth*( ms(ix1(i))+ms(ix2(i))+ms(ix3(i))+ms(ix4(i)) )
243 nx2 =
max(em20,n1(i)*n1(i)+n2(i)*n2(i)+n3(i)*n3(i))
245 fni(i)= vv(i)*sqrt(cc2/nx2)*abs(xface(i))
246 IF(fric_last/= zero)
THEN
247 ftlim = fmax + (distlin(ig)/distlin(nsn))*(fric_last-fmax)
271 i1 = nsvglo(
max(1,nsv2(il)-1))
272 i2 = nsvglo(
min(nsn,nsv2(il)+1))
274 lx = half*(x(1,i2)-x(1,i1))
275 ly = half*(x(2,i2)-x(2,i1))
276 lz = half*(x(3,i2)-x(3,i1))
278 nx = n2(i)*lz - n3(i)*ly
279 ny = n3(i)*lx - n1(i)*lz
280 nz = n1(i)*ly - n2(i)*lx
283 vx(i) = v(1,ix1(i))*h1(i) + v(1,ix2(i))*h2(i)
284 . + v(1,ix3(i))*h3(i) + v(1,ix4(i))*h4(i)
285 vy(i) = v(2,ix1(i))*h1(i) + v(2,ix2(i))*h2(i)
286 . + v(2,ix3(i))*h3(i) + v(2,ix4(i))*h4(i)
287 vz(i) = v(3,ix1(i))*h1(i) + v(3,ix2(i))*h2(i)
288 . + v(3,ix3(i))*h3(i) + v(3,ix4(i))*h4(i)
290 vv(i) = vx(i)*nx + vy(i)*ny + vz(i)*nz
320 . * fourth*( ms(ix1(i))+ms(ix2(i))+ms(ix3(i))+ms(ix4(i)) )
322 fxi(i)=(ftsavx(ig)+st*vx(i)*dt1)*abs(xface(i))
323 fyi(i)=(ftsavy(ig)+st*vy(i)*dt1)*abs(xface(i))
324 fzi(i)=(ftsavz(ig)+st*vz(i)*dt1)*abs(xface(i))
326 nx2 =
max(em20,n1(i)*n1(i)+n2(i)*n2(i)+n3(i)*n3(i))
329 felast =(fxi(i)*n1(i)+fyi(i)*n2(i)+fzi(i)*n3(i))*nx2
331 ftry =felast+sqrt(cc2*nx2)*vv(i)*abs(xface(i))
333 IF(fric_last/= zero)
THEN
334 ftlim = fmax + (distlin(ig)/distlin(nsn))*(fric_last-fmax)
337 fni(i) =sign(
min(abs(ftry),ftlim),ftry)
341 deltag =(ftry-fni(i))/
max(em20,st+sqrt(cc2)*dt1inv)
342 felast =felast-st*deltag
346 ftsavy(ig)=felast*n2(i)
347 ftsavz(ig)=felast*n3(i)
375 !global secondary index
378 IF(irtl(il) > 0)
THEN
381 IF(fnor_last/= zero)
THEN
382 fnlim = fnor + (distlin(ig)/distlin(nsn))*(fnor_last-fnor)
384 IF(pen(i)>=depth)
THEN
385 fnni(i)= fnlim*sqrt(li2(i))
386 ELSEIF(pen(i)>zero)
THEN
387 fnni(i)= slopen(ig)*pen(i)*sqrt(li2(i))
389 IF(ift0==0 .AND. slopen(ig)<stf(l))
THEN
396 fnxi(i)= - nn1(i)*fnni(i)
397 fnyi(i)= - nn2(i)*fnni(i)
398 fnzi(i)= - nn3(i)*fnni(i)
409 fxi(i)= fxi(i) + fnxi(i)
410 fyi(i)= fyi(i) + fnyi(i)
411 fzi(i)= fzi(i) + fnzi(i)
424 fsav(1)=fsav(1)+fnxi(i)*dt12
425 fsav(2)=fsav(2)+fnyi(i)*dt12
426 fsav(3)=fsav(3)+fnzi(i)*dt12
428 fsav(4)=fsav(4)+ftxi(i)*dt12
429 fsav(5)=fsav(5)+ftyi(i)*dt12
430 fsav(6)=fsav(6)+ftzi(i)*dt12
432 fsav(8)=fsav(8)+abs(fnxi(i))*dt12
433 fsav(9)=fsav(9)+abs(fnyi(i))*dt12
434 fsav(10)=fsav(10)+abs(fnzi(i))*dt12
435 fsav(11)=fsav(11)+fni(i)*dt12
437 fsav(12)=fsav(12)+abs(fxi(i))*dt12
438 fsav(13)=fsav(13)+abs(fyi(i))*dt12
439 fsav(14)=fsav(14)+abs(fzi(i))*dt12
440 fsav(15) = fsav(15) +sqrt(fxi(i)*fxi(i)+fyi(i)*fyi(i)+fzi(i)*fzi(i))*dt12
460 fnx1(i)=fnxi(i)*h1(i)
461 fny1(i)=fnyi(i)*h1(i)
462 fnz1(i)=fnzi(i)*h1(i)
464 fnx2(i)=fnxi(i)*h2(i)
465 fny2(i)=fnyi(i)*h2(i)
466 fnz2(i)=fnzi(i)*h2(i)
468 fnx3(i)=fnxi(i)*h3(i)
469 fny3(i)=fnyi(i)*h3(i)
470 fnz3(i)=fnzi(i)*h3(i)
472 fnx4(i)=fnxi(i)*h4(i)
473 fny4(i)=fnyi(i)*h4(i)
474 fnz4(i)=fnzi(i)*h4(i)
476 ftx1(i)=ftxi(i)*h1(i)
477 fty1(i)=ftyi(i)*h1(i)
478 ftz1(i)=ftzi(i)*h1(i)
480 ftx2(i)=ftxi(i)*h2(i)
481 fty2(i)=ftyi(i)*h2(i)
482 ftz2(i)=ftzi(i)*h2(i)
484 ftx3(i)=ftxi(i)*h3(i)
485 fty3(i)=ftyi(i)*h3(i)
486 ftz3(i)=ftzi(i)*h3(i)
488 ftx4(i)=ftxi(i)*h4(i)
489 fty4(i)=ftyi(i)*h4(i)
490 ftz4(i)=ftzi(i)*h4(i)
546 nisky = nisky + 5 * llt
547#include "lockoff.inc"
552 fskyi(niskyl,1)=fx1(i)
553 fskyi(niskyl,2)=fy1(i)
554 fskyi(niskyl,3)=fz1(i)
556 isky(niskyl) = ix1(i)
558 fskyi(niskyl,1)=fx2(i)
559 fskyi(niskyl,2)=fy2(i)
560 fskyi(niskyl,3)=fz2(i)
562 isky(niskyl) = ix2(i)
564 fskyi(niskyl,1)=fx3(i)
565 fskyi(niskyl,2)=fy3(i)
566 fskyi(niskyl,3)=fz3(i)
568 isky(niskyl) = ix3(i)
570 fskyi(niskyl,1)=fx4(i)
571 fskyi(niskyl,2)=fy4(i)
572 fskyi(niskyl,3)=fz4(i)
574 isky(niskyl) = ix4(i)
576 fskyi(niskyl,1)=-fxi(i)
578 fskyi(niskyl,3)=-fzi(i)
581 isky(niskyl) = nsv(il)
586 fskyi(niskyl,1)=fx1(i)
587 fskyi(niskyl,2)=fy1(i)
588 fskyi(niskyl,3)=fz1(i)
591 isky(niskyl) = ix1(i)
593 fskyi(niskyl,1)=fx2(i)
594 fskyi(niskyl,2)=fy2(i)
595 fskyi(niskyl,3)=fz2(i)
598 isky(niskyl) = ix2(i)
600 fskyi(niskyl,1)=fx3(i)
601 fskyi(niskyl,2)=fy3(i)
602 fskyi(niskyl,3)=fz3(i)
605 isky(niskyl) = ix3(i)
607 fskyi(niskyl,1)=fx4(i)
608 fskyi(niskyl,2)=fy4(i)
609 fskyi(niskyl,3)=fz4(i)
612 isky(niskyl) = ix4(i)
614 fskyi(niskyl,1)=-fxi(i)
615 fskyi(niskyl,2)=-fyi(i)
616 fskyi(niskyl,3)=-fzi(i)
620 isky(niskyl) = nsv(il)
627 IF(xface(i)/=zero)
THEN
628 rcontact(ix1(i))=zero
629 rcontact(ix2(i))=zero
630 rcontact(ix3(i))=zero
631 rcontact(ix4(i))=zero
634#include "lockoff.inc"
637 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT>0.AND.
638 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP).OR.
639 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))
THEN
642 fcont(1,ix1(i)) =fcont(1,ix1(i)) + fx1(i)
643 fcont(2,ix1(i)) =fcont(2,ix1(i)) + fy1(i)
644 fcont(3,ix1(i)) =fcont(3,ix1(i)) + fz1(i)
645 fcont(1,ix2(i)) =fcont(1,ix2(i)) + fx2(i)
646 fcont(2,ix2(i)) =fcont(2,ix2(i)) + fy2(i)
647 fcont(3,ix2(i)) =fcont(3,ix2(i)) + fz2(i)
648 fcont(1,ix3(i)) =fcont(1,ix3(i)) + fx3(i)
649 fcont(2,ix3(i)) =fcont(2,ix3(i)) + fy3(i)
650 fcont(3,ix3(i)) =fcont(3,ix3(i)) + fz3(i)
651 fcont(1,ix4(i)) =fcont(1,ix4(i)) + fx4(i)
652 fcont(2,ix4(i)) =fcont(2,ix4(i)) + fy4(i)
653 fcont(3,ix4(i)) =fcont(3,ix4(i)) + fz4(i)
654 fcont(1,nsv(i+nft))=fcont(1,nsv(i+nft))- fxi(i)
655 fcont(2,nsv(i+nft))=fcont(2,nsv(i+nft))- fyi(i)
656 fcont(3,nsv(i+nft))=fcont(3,nsv(i+nft))- fzi(i)
659#include "lockoff.inc"
661 IF((anim_v(12)+outp_v(12)+h3d_data%N_VECT_PCONT>0.AND.
662 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt
663 . (manim>=4.AND.manim<=15).OR.h3d_data%MH3D/=0))
664 . .OR.h3d_data%N_VECT_PCONT_MAX>0)
THEN
667 fncont(1,ix1(i)) =fncont(1,ix1(i)) + fnx1(i)
668 fncont(2,ix1(i)) =fncont(2,ix1(i)) + fny1(i)
669 fncont(3,ix1(i)) =fncont(3,ix1(i)) + fnz1(i)
670 fncont(1,ix2(i)) =fncont(1,ix2(i)) + fnx2(i)
671 fncont(2,ix2(i)) =fncont(2,ix2(i)) + fny2(i)
672 fncont(3,ix2(i)) =fncont(3,ix2(i)) + fnz2(i)
673 fncont(1,ix3(i)) =fncont(1,ix3(i)) + fnx3(i)
674 fncont(2,ix3(i)) =fncont(2,ix3(i)) + fny3(i)
675 fncont(3,ix3(i)) =fncont(3,ix3(i)) + fnz3(i)
676 fncont(1,ix4(i)) =fncont(1,ix4(i)) + fnx4(i)
677 fncont(2,ix4(i)) =fncont(2,ix4(i)) + fny4(i)
678 fncont(3,ix4(i)) =fncont(3,ix4(i)) + fnz4(i)
680 fncont(1,nsv(i+nft))=fncont(1,nsv(i+nft))- fnxi(i)
681 fncont(2,nsv(i+nft))=fncont(2,nsv(i+nft))- fnyi(i)
682 fncont(3,nsv(i+nft))=fncont(3,nsv(i+nft))- fnzi(i)
684 ftcont(1,ix1(i)) =ftcont(1,ix1(i)) + ftx1(i)
686 ftcont(3,ix1(i)) =ftcont(3,ix1(i)) + ftz1(i)
687 ftcont(1,ix2(i)) =ftcont
688 ftcont(2,ix2(i)) =ftcont(2,ix2(i)) + fty2(i)
689 ftcont(3,ix2(i)) =ftcont(3,ix2(i)) + ftz2(i)
690 ftcont(1,ix3(i)) =ftcont(1,ix3(i)) + ftx3(i)
691 ftcont(2,ix3(i)) =ftcont(2,ix3(i)) + fty3(i)
692 ftcont(3,ix3(i)) =ftcont(3,ix3(i)) + ftz3(i)
693 ftcont(1,ix4(i)) =ftcont(1,ix4(i)) + ftx4(i)
694 ftcont(2,ix4(i)) =ftcont(2,ix4(i)) + fty4(i)
695 ftcont(3,ix4(i)) =ftcont(3,ix4(i)) + ftz4(i)
697 ftcont(1,nsv(i+nft))=ftcont(1,nsv(i+nft))- ftxi(i)
698 ftcont(2,nsv(i+nft))=ftcont(2,nsv(i+nft))- ftyi(i)
699 ftcont(3,nsv(i+nft))=ftcont(3,nsv(i+nft))- ftzi(i)
701#include "lockoff.inc"
706 IF(ibc==0.OR.xface(i)==zero)
GOTO 200
709 CALL ibcoff(ibc,icodt(ig))
subroutine i8for3(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)