35 SUBROUTINE i14frt(OUTPUT,AF ,X ,V ,KSURF ,IGRSURF,
36 2 BUFSF ,NSC ,KSC ,NSP ,KSP ,
37 3 KSI ,IMPACT ,CIMP ,NIMP ,FRIC ,
38 4 NFRIC ,NPC ,PLD ,GAPMIN ,STF ,
39 5 WF ,WST ,DE ,MS ,STIFN ,
40 6 FS ,FCONT ,FSKYI ,ISKY ,H3D_DATA)
51#include "implicit_f.inc"
72 TYPE(output_) ,
INTENT(INOUT) :: OUTPUT
73 INTEGER NSC,NSP, KSURF, KSI(*), IMPACT(*),
74 . NFRIC, NPC(*),ISKY(*)
77 . af(*), x(3,*), v(3,*) , bufsf(*), ksp(*),
78 . ksc(*), fric, cimp(3,*),nimp(3,*), ms(*),
79 . stifn(*), fs(nthvki),fcont(3,*),fskyi(lskyi,nfskyi), pld(*),
80 . wf(*), wst(*),gapmin , stf , de
82 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
86 INTEGER ADRBUF, I, IL, J3, J2, J1, IN, I3, I2, I1
93 . x1, x2, x3, n1, n2, n3, n,
94 . xpvn1, ypvn1, zpvn1, sgnxn, sgnyn, sgnzn,
96 . fxn, fyn, fzn, fxt, fyt, fzt, ftp, ftpa, fmax, fn, tn,
97 . cost, dist, psca, e, fx, fy, fz,
98 . fn1, fn2, fn3, ft1, ft2, ft3, am1, am2, am3,
101 . xpv(3,mvsiz),nv(3,mvsiz) ,tv(3,mvsiz),
102 . fnpv(mvsiz) ,kfric(mvsiz),xq(3,mvsiz),
103 . fv(3,mvsiz) ,st(mvsiz)
105 adrbuf=igrsurf(ksurf)%IAD_BUFR
118 rot(i)=bufsf(adrbuf+7+i-1)
130 nisky = nisky + nsc + nsp
131#include "lockoff.inc"
142 DO i=1,
min(mvsiz,nrest)
145 fxn=wf(in)*nimp(1,il)
146 fyn=wf(in)*nimp(2,il)
147 fzn=wf(in)*nimp(3,il)
151 fn1 =rot(1)*fxn+rot(4)*fyn+rot(7)*fzn
152 fn2 =rot(2)*fxn+rot(5)*fyn+rot(8)*fzn
153 fn3 =rot(3)*fxn+rot(6)*fyn+rot(9)*fzn
167 DO i=1,
min(mvsiz,nrest)
171 st(i)=stf+two*wst(in)*dt1inv
177 DO i=1,
min(mvsiz,nrest)
181 st(i)=stf+wst(in)*dt1inv
188 DO i=1,
min(mvsiz,nrest)
196 x1=x(1,in)-bufsf(adrbuf+16)
197 x2=x(2,in)-bufsf(adrbuf+17)
198 x3=x(3,in)-bufsf(adrbuf+18)
199 am1=x2*fv(3,i)-x3*fv(2,i)
200 am2=x3*fv(1,i)-x1*fv(3,i)
201 am3=x1*fv(2,i)-x2*fv(1,i)
206 bufsf(adrbuf+25)=bufsf(adrbuf+25)-fv(1,i)
207 bufsf(adrbuf+26)=bufsf(adrbuf+26)-fv(2,i)
208 bufsf(adrbuf+27)=bufsf(adrbuf+27)-fv(3,i)
209 bufsf(adrbuf+28)=bufsf(adrbuf+28)-am1
210 bufsf(adrbuf+29)=bufsf(adrbuf+29)-am2
211 bufsf(adrbuf+30)=bufsf(adrbuf+30)-am3
212 bufsf(adrbuf+31)=bufsf(adrbuf+31)+st(i)
215 dd = x1**2+x2**2+x3**2
216 bufsf(adrbuf+32)=bufsf(adrbuf+32)+dd*st(i)
221 DO i=1,
min(mvsiz,nrest)
236#include "vectorize.inc"
237 DO i=1,
min(mvsiz,nrest)
243 af(i1)=af(i1)+fv(1,i)
244 af(i2)=af(i2)+fv(2,i)
245 af(i3)=af(i3)+fv(3,i)
247 stifn(in)=stifn(in)+st(i)
252 DO i=1,
min(mvsiz,nrest)
256 fskyi(niskyl,1)=fv(1,i)
257 fskyi(niskyl,2)=fv(2,i)
258 fskyi(niskyl,3)=fv(3,i)
260 fskyi(niskyl,4)=st(i)
264 DO i=1,
min(mvsiz,nrest)
268 fskyi(niskyl,1)=fv(1,i)
269 fskyi(niskyl,2)=fv(2,i)
270 fskyi(niskyl,3)=fv(3,i)
272 fskyi(niskyl,4)=st(i)
273 fskyi(niskyl,5)=wst(in)
283 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT >0.AND.
284 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP) .OR.
285 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))
THEN
287#include "vectorize.inc"
288 DO i=1,
min(mvsiz,nrest)
291 fcont(1,in) =fcont(1,in) + fv(1,i)
292 fcont(2,in) =fcont(2,in) + fv(2,i)
293 fcont(3,in) =fcont(3,in) + fv(3,i)
295#include "lockoff.inc"
302 DO i=1,
min(mvsiz,nrest)
305 de=de+fv(1,i)*v(1,in)+fv(2,i)*v(2,in)+fv(3,i)*v(3,in)
310 IF (nrest-mvsiz>0)
THEN
324 DO i=1,
min(mvsiz,nrest)
327 x1=x(1,in)-bufsf(adrbuf+4)
328 x2=x(2,in)-bufsf(adrbuf+5)
329 x3=x(3,in)-bufsf(adrbuf+6)
330 xpv(1,i)=rot(1)*x1+rot(2)*x2+rot(3)*x3
331 xpv(2,i)=rot(4)*x1+rot(5)*x2+rot(6)*x3
332 xpv(3,i)=rot(7)*x1+rot(8)*x2+rot(9)*x3
337 DO i=1,
min(mvsiz,nrest)
350 DO i=1,
min(mvsiz,nrest)
354 CALL ninterp(nfric,npc,pld,
min(mvsiz,nrest),fnpv,kfric)
355 DO i=1,
min(mvsiz,nrest)
356 kfric(i)=fric*kfric(i)
362 DO i=1,
min(mvsiz,nrest)
374 fmax=
max(kfric(i)*fnpv(i),zero)
376 fxt=(xi-xpv(1,i))*stf
377 fyt=(yi-xpv(2,i))*stf
378 fzt=(zi-xpv(3,i))*stf
379 ftp=sqrt(fxt*fxt+fyt*fyt+fzt*fzt)
385 fn=fxt*nv(1,i)+fyt*nv(2,i)+fzt*nv(3,i)
386 tv(1,i)=fxt-nv(1,i)*fn
387 tv(2,i)=fyt-nv(2,i)*fn
388 tv(3,i)=fzt-nv(3,i)*fn
389 tn=sqrt(tv(1,i)*tv(1,i)+tv(2,i)*tv(2,i)+tv(3,i)*tv(3,i))
402 cost =(xpv(1,i)-xi)*tv(1,i)
403 . +(xpv(2,i)-yi)*tv(2,i)
404 . +(xpv(3,i)-zi)*tv(3,i)
405 xq(1,i) =xi+cost*tv(1,i)
406 xq(2,i) =yi+cost*tv(2,i)
407 xq(3,i) =zi+cost*tv(3,i)
410 xq(1,i) =xq(1,i)+ftpa*tv(1,i)/
max(em20,stf)
411 xq(2,i) =xq(2,i)+ftpa*tv(2,i)/
max(em20,stf)
412 xq(3,i) =xq(3,i)+ftpa*tv(3,i)/
max(em20,stf)
422#include "vectorize.inc"
423 DO i=1,
min(mvsiz,nrest)
429 xpvn1 =xq(1,i)**(dgr-1)
431 IF (xpvn1*xq(1,i)>=zero) sgnxn=one
432 ypvn1 =xq(2,i)**(dgr-1)
434 IF (ypvn1*xq(2,i)>=zero) sgnyn=one
435 zpvn1 =xq(3,i)**(dgr-1)
437 IF (zpvn1*xq(3,i)>=zero) sgnzn=one
448 e =n1*xq(1,i)+n2*xq(2,i)+n3*xq(3,i)
449 dist =(e-exp((dgr-1)*log(
max(e,em20))/dgr))
450 . /
max(exp((dgr-1)*log(em20)/dgr),n)
454 cimp(1,il)=xq(1,i)-dist*n1
455 cimp(2,il)=xq(2,i)-dist*n2
456 cimp(3,il)=xq(3,i)-dist*n3
469 xi=cimp(1,il)+gapmin*nimp(1,il)
470 yi=cimp(2,il)+gapmin*nimp(2,il)
471 zi=cimp(3,il)+gapmin*nimp(3,il)
472 psca = (xi-xpv(1,i))*fx
475 dist = (xi-xpv(1,i))**2
478 fx=psca/dist*(xi-xpv(1,i))
479 fy=psca/dist*(yi-xpv(2,i))
480 fz=psca/dist*(zi-xpv(3,i))
482 psca=fx*nv(1,i)+fy*nv(2,i)+fz*nv(3,i)
493 fn1 =rot(1)*fxn+rot(4)*fyn+rot(7)*fzn
494 fn2 =rot(2)*fxn+rot(5)*fyn+rot(8)*fzn
495 fn3 =rot(3)*fxn+rot(6)*fyn+rot(9)*fzn
496 ft1 =rot(1)*fxt+rot(4)*fyt+rot(7)*fzt
497 ft2 =rot(2)*fxt+rot(5)*fyt+rot(8)*fzt
498 ft3 =rot(3)*fxt+rot(6)*fyt+rot(9)*fzt
515 DO i=1,
min(mvsiz,nrest)
518 st(i)=stf+two*wst(in)*dt1inv
521 DO i=1,
min(mvsiz,nrest)
524 st(i)=stf+wst(in)*dt1inv
528 DO i=1,
min(mvsiz,nrest)
536 x1=x(1,in)-bufsf(adrbuf+16)
537 x2=x(2,in)-bufsf(adrbuf+17)
538 x3=x(3,in)-bufsf(adrbuf+18)
539 am1=x2*fv(3,i)-x3*fv(2,i)
540 am2=x3*fv(1,i)-x1*fv(3,i)
541 am3=x1*fv(2,i)-x2*fv(1,i)
546 bufsf(adrbuf+25)=bufsf(adrbuf+25)-fv(1,i)
547 bufsf(adrbuf+26)=bufsf(adrbuf+26)-fv(2,i)
548 bufsf(adrbuf+27)=bufsf(adrbuf+27)-fv(3,i)
549 bufsf(adrbuf+28)=bufsf(adrbuf+28)-am1
550 bufsf(adrbuf+29)=bufsf(adrbuf+29)-am2
551 bufsf(adrbuf+30)=bufsf(adrbuf+30)-am3
552 bufsf(adrbuf+31)=bufsf(adrbuf+31)+st(i)
555 dd = x1**2+x2**2+x3**2
556 bufsf(adrbuf+32)=bufsf(adrbuf+32)+dd*st(i)
564#include "vectorize.inc"
565 DO i=1,
min(mvsiz,nrest)
571 af(i1)=af(i1)+fv(1,i)
572 af(i2)=af(i2)+fv(2,i)
573 af(i3)=af(i3)+fv(3,i)
575 stifn(in)=stifn(in)+st(i)
580 DO i=1,
min(mvsiz,nrest)
584 fskyi(niskyl,1)=fv(1,i)
585 fskyi(niskyl,2)=fv(2,i)
586 fskyi(niskyl,3)=fv(3,i)
588 fskyi(niskyl,4)=st(i)
592 DO i=1,
min(mvsiz,nrest)
596 fskyi(niskyl,1)=fv(1,i)
597 fskyi(niskyl,2)=fv(2,i)
598 fskyi(niskyl,3)=fv(3,i)
601 fskyi(niskyl,5)=wst(in)
611 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT>0.AND.
612 . (tt>=tanim .AND. tt<=tanim_stop.OR.tt>=toutp.OR.
613 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))
THEN
615#include "vectorize.inc"
616 DO i=1,
min(mvsiz,nrest)
619 fcont(1,in) =fcont(1,in) + fv(1,i)
620 fcont(2,in) =fcont(2,in) + fv(2,i)
621 fcont(3,in) =fcont(3,in) + fv(3,i)
623#include "lockoff.inc"
630 DO i=1,
min(mvsiz,nrest)
633 de=de+fv(1,i)*v(1,in)+fv(2,i)*v(2,in)+fv(3,i)*v(3,in)
638 IF (nrest-mvsiz>0)
THEN
646 fs(7)=fs(7)+de*dt1*half
647 IF (igrsurf(ksurf)%TYPE==100)
THEN
650 output%TH%WFEXT=output%TH%WFEXT+de*dt1*half