32 SUBROUTINE rgwalp(X ,A ,V ,RWL ,NSW ,
33 1 NSN ,ITIED,MSR ,MS ,WEIGHT,
34 2 ICONT,FRWL6,IMP_S,NT_RW,IDDL ,
35 3 IKC ,NDOF ,NODNX_SMS ,WEIGHT_MD,WFEXT,WFEXT_MD)
39#include "implicit_f.inc"
54 INTEGER NSN, ITIED, MSR,ICONT,IMP_S,NT_RW
55 INTEGER NSW(*), WEIGHT(*), IDDL(*),IKC(*),NDOF(*), NODNX_SMS(*), WEIGHT_MD(*)
56 my_real X(*), A(*), V(*), RWL(*), MS(*)
57 DOUBLE PRECISION FRWL6(7,6)
58 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT,WFEXT_MD
62 INTEGER M3, M2, M1, I, N, N3, N2, N1, K, J,JJ,NINDEX, INDEX(NSN)
64 . XWL, YWL, ZWL, VXW, VYW, VZW, TFXTN, FACT,
65 . tfxt, xl1, yl1, zl1, xl2, yl2, zl2, sx12, sy12, sz12, s12,
66 . vx, vy, vz, xc, yc, zc, dp, xcp, ycp, zcp,
67 . sx1m, sy1m, sz1m, ps, sm1, sxm2, sym2, szm2, sm2, dv, da, dvt,
68 . fnxn, fnyn, fnzn, fnxt, fnyt, fnzt, fndfn, ftdft, fric, fric2,
70 . xwl0, ywl0, zwl0, dp0, xc0, yc0, zc0, tol, vn, vnold,
71 . dp0dt, dvx, dvy, dvz, prec, xprec,
72 . f1(nsn), f2(nsn), f3(nsn), f4(nsn), f5(nsn), f6(nsn), f7(nsn),
73 . tfxt2, tfxtn2, wewe2
113 vn =vxw*rwl(1)+vyw*rwl(2)+vzw*rwl(3)
130 s12=sx12**2+sy12**2+sz12**2
133 IF(idtmins==0.AND.idtmins_int==0)
THEN
149 dp0=xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
157 dp=dp0+((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3))*dt2
160 . abs( (vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3) ),
163 xprec=prec*
max(abs(xwl),abs(ywl),abs(zwl),
164 . abs(x(n1)),abs(x(n2)),abs(x(n3)),
165 . abs(x(n1)-xwl),abs(x(n2)-ywl),abs(x(n3)-zwl))
168 IF(dp>zero.OR.dp0<=-tol) cycle
177 ps=sx12*sx1m+sy12*sy1m+sz12*sz1m
181 sm1=sx1m**2+sy1m**2+sz1m**2
188 ps=sx12*sxm2+sy12*sym2+sz12*szm2
192 sm2=sxm2**2+sym2**2+szm2**2
197 IF((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3)>zero
198 . .AND.dp0>zero)cycle
207 IF(nodnx_sms(n)/=0)cycle
220 dp0=xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
228 dp=dp0+((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3))*dt2
231 . abs( (vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3) ),
234 xprec=prec*
max(abs(xwl),abs(ywl),abs(zwl),
235 . abs(x(n1)),abs(x(n2)),abs(x(n3)),
236 . abs(x(n1)-xwl),abs(x(n2)-ywl),abs(x(n3)-zwl))
239 IF(dp>zero.OR.dp0<=-tol)cycle
248 ps=sx12*sx1m+sy12*sy1m+sz12*sz1m
252 sm1=sx1m**2+sy1m**2+sz1m**2
259 ps=sx12*sxm2+sy12*sym2+sz12*szm2
263 sm2=sxm2**2+sym2**2+szm2**2
268 IF((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3)>zero
269 . .AND.dp0>zero)cycle
288 dp0 =xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
289 dp0dt=-
min(dp0,zero)/dt2
294 dv=(v(n1)-vxw)*rwl(1)+(v(n2)-vyw)*rwl(2)+(v(n3)-vzw)*rwl(3)
295 da=a(n1)*rwl(1)+a(n2)*rwl(2)+a(n3)*rwl(3)
297 fnxn=dvt*rwl(1)*ms(n)
298 fnyn=dvt*rwl(2)*ms(n)
299 fnzn=dvt*rwl(3)*ms(n)
300 tfxtn = tfxtn - weight_md(n)*fact*
301 . ((v(n1)-vxw)*fnxn+(v(n2)-vyw)*fnyn+(v(n3)-vzw)*fnzn)
302 wewe2 = (1-weight_md(n))*weight(n)
303 tfxtn2 = tfxtn2 - wewe2*fact*
304 . ((v(n1)-vxw)*fnxn+(v(n2)-vyw)*fnyn+(v(n3)-vzw)*fnzn)
305 f1(j) = fnxn*weight_md(n)
306 f2(j) = fnyn*weight_md(n)*ax
307 f3(j) = fnzn*weight_md(n)*ax
308 f4(j) = ms(n)*weight_md(n)
309 fnxt=((v(n1)-vxw)+a(n1)*dt12-dvx)*ms(n)-fnxn
310 fnyt=((v(n2)-vyw)+a(n2)*dt12-dvy)*ms(n)-fnyn
311 fnzt=((v(n3)-vzw)+a(n3)*dt12-dvz)*ms(n)-fnzn
312 fndfn=fnxn**2+fnyn**2+fnzn**2
313 ftdft=fnxt**2+fnyt**2+fnzt**2
316 IF(ftdft<=fric2*fndfn.OR.itied==1)
THEN
327 IF (ikc(jj)==0)ikc(jj)=3
328 IF (ikc(jj+1)==0)ikc(jj+1)=3
329 IF (ikc(jj+2)==0)ikc(jj+2)=3
334 fcoe=fric*sqrt(fndfn/
max(em20,ftdft))
338 a(n1)=a(n1)-(da*rwl(1)+fnxt/(dt12*ms(n)))
339 a(n2)=a(n2)-(da*rwl(2)+fnyt/(dt12*ms(n)))
340 a(n3)=a(n3)-(da*rwl(3)+fnzt/(dt12*ms(n)))
341 v(n1)=v(n1)-dv*rwl(1)+dvx
342 v(n2)=v(n2)-dv*rwl(2)+dvy
343 v(n3)=v(n3)-dv*rwl(3)+dvz
351 IF (ikc(jj)==0)ikc(jj)=10
355 . ((v(n1)-vxw)*fnxt+(v(n2)-vyw)*fnyt+(v(n3)-vzw)*fnzt)
357 wewe2 = (1-weight_md(n))*weight(n)
359 . ((v(n1)-vxw)*fnxt+(v(n2)-vyw)*fnyt+(v(n3)-vzw)*fnzt)
362 f5(j) = fnxt*weight_md(n)
363 f6(j) = fnyt*weight_md(n)*ax
364 f7(j) = fnzt*weight_md(n)*ax
376 dp0 =xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
377 dp0dt=-
min(dp0,zero)/dt2
381 dv=(v(n1)-vxw)*rwl(1)+(v(n2)-vyw)*rwl(2)+(v(n3)-vzw)*rwl(3)
382 da=a(n1)*rwl(1)+a(n2)*rwl(2)+a(n3)*rwl(3)
384 fnxn=dvt*rwl(1)*ms(n)
385 fnyn=dvt*rwl(2)*ms(n)
386 fnzn=dvt*rwl(3)*ms(n)
387 tfxtn = tfxtn - weight_md(n)*fact*
388 . ((v(n1)-vxw)*fnxn+(v(n2)-vyw)*fnyn+(v(n3)-vzw)*fnzn)
389 wewe2 = (1-weight_md(n))*weight(n)
390 tfxtn2 = tfxtn2 - wewe2*fact*
391 . ((v(n1)-vxw)*fnxn+(v(n2)-vyw)*fnyn+(v(n3)-vzw)*fnzn)
392 f1(j) = fnxn*weight_md(n)
393 f2(j) = fnyn*weight_md(n)*ax
394 f3(j) = fnzn*weight_md(n)*ax
395 f4(j) = ms(n)*weight_md(n)
399 a(n1)=a(n1)-da*rwl(1)
400 a(n2)=a(n2)-da*rwl(2)
401 a(n3)=a(n3)-da*rwl(3)
402 v(n1)=v(n1)-dv*rwl(1)+dvx
403 v(n2)=v(n2)-dv*rwl(2)+dvy
404 v(n3)=v(n3)-dv*rwl(3)+dvz
405 IF(imp_s==1) v(n1) = -dv+dp0dt
410 tfxt=tfxt+half*dt1*tfxtn
411 tfxt2=tfxt2+half*dt1*tfxtn2
414 wfext_md=wfext_md+tfxt2
435 frwl6(1,k) = frwl6(1,k)+frwl6_l(1,k)
436 frwl6(2,k) = frwl6(2,k)+frwl6_l(2,k)
437 frwl6(3,k) = frwl6(3,k)+frwl6_l(3,k)
438 frwl6(4,k) = frwl6(4,k)+frwl6_l(4,k)
439 frwl6(5,k) = frwl6(5,k)+frwl6_l(5,k)
440 frwl6(6,k) = frwl6(6,k)+frwl6_l(6,k)
441 frwl6(7,k) = frwl6(7,k)+frwl6_l(7,k)
443#include "lockoff.inc"
459 IF (ikc(jj)==0)ikc(jj)=10