37 . MS ,STIFN ,STIFR ,WEIGHT ,IRECT ,
38 . NSV ,IRTL ,DR ,DL ,FINI ,
39 . FSAV ,FNCONT ,NSN ,STFN ,STFR ,
40 . VISC ,NOINT ,NODNX_SMS,DMINT2 ,SAV_FOR_PENA,
41 . MS_PENA ,IN ,DT2T ,NELTST ,ITYPTST ,
42 . MINER ,H3D_DATA,FNCONTP ,FTCONTP)
50#include "implicit_f.inc"
59 INTEGER NSN, , NELTST,ITYPTST
60 INTEGER IRECT(4,*),NSV(*),IRTL(*),WEIGHT(*),NODNX_SMS(*)
65 . X(3,*),V(3,*),A(3,*),VR(3,*),AR(3,*),MS(*),IN(*),FINI(6,4,*),
66 . dl(3,4,*),dr(3,4,*),stifn(*),stifr(*),stfn(*),stfr(*),
68 . miner(*),fncontp(3,*) ,ftcontp(3,*)
69 TYPE (H3D_DATABASE) :: H3D_DATA
83 INTEGER NIR,I,J,IR,II,JJ,L,W,KK,K,LLT,NM,
84 . IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),NSVG(MVSIZ)
87 . ECONTT,ECONVT,E1X,E1Y,E1Z,E2X,E2Y,E2Z,E3X,E3Y,E3Z,XSM,YSM,ZSM,
88 . X1,X2,X3,X4,Y1,Y2,Y3,Y4,Z1,Z2,Z3,Z4,MLX,MLY,MLZ,DTI,STIFMS,
89 . DRX,DRY,DRZ,VRX,VRY,VRZ,DLX,DLY,DLZ,LEN2,DKM,DIN,
90 . dvx,dvy,dvz,vxx,vyy,vzz,vlx,vly,vlz,wx,wy,wz,dwx,dwy,dwz, dxt
92 . stif(mvsiz),vis(4,mvsiz),visr(4,mvsiz
93 . fx(4),fy(4),fz(4),mx(4),my(4),mz(4),mrx(4),mry(4),mrz(4),
94 . flocx(4),flocy(4),flocz(4),flocxv(4),flocyv(4),floczv(4),
95 . mlocx(4),mlocy(4),mlocz(4),mlocxv(4),mlocyv(4),mloczv(4),ms_harm,
96 . fnorm,fn(3),ft(3),stbrk,va(3),vb(3),vc(3),vd(3),rx(4),ry(4),rz(4),
97 . vx1,vy1,vz1,vx2,vy2,vz2,vx3,vy3,vz3,vx4,vy4,vz4,rs(3),
98 . x0,y0,z0,xs,ys,zs,dwdu,h(4),stifm(mvsiz),stmax,wlx,wly,wlz,in_harm
106 llt =
min(nsn-kk+1,mvsiz)
121 IF (ix3(k) == ix4(k))
THEN
166 CALL i2rep(x1 ,x2 ,x3 ,x4 ,
171 . e3x ,e3y ,e3z ,nir )
174 x0 = (x1 + x2 + x3 + x4)/nir
175 y0 = (y1 + y2 + y3 + y4)/nir
176 z0 = (z1 + z2 + z3 + z4)/nir
178 x0 = (x1 + x2 + x3)/nir
179 y0 = (y1 + y2 + y3)/nir
180 z0 = (z1 + z2 + z3)/nir
201 rs(1) = xs*e1x + ys*e1y + zs*e1z
202 rs(2) = xs*e2x + ys*e2y + zs*e2z
203 rs(3) = xs*e3x + ys*e3y + zs*e3z
205 rx(1) = e1x*x1 + e1y*y1 + e1z*z1
206 ry(1) = e2x*x1 + e2y*y1 + e2z*z1
207 rz(1) = e3x*x1 + e3y*y1 + e3z*z1
208 rx(2) = e1x*x2 + e1y*y2 + e1z*z2
209 ry(2) = e2x*x2 + e2y*y2 + e2z*z2
210 rz(2) = e3x*x2 + e3y*y2 + e3z*z2
211 rx(3) = e1x*x3 + e1y*y3 + e1z*z3
212 ry(3) = e2x*x3 + e2y*y3 + e2z*z3
213 rz(3) = e3x*x3 + e3y*y3 + e3z*z3
214 rx(4) = e1x*x4 + e1y*y4 + e1z*z4
215 ry(4) = e2x*x4 + e2y*y4 + e2z*z4
216 rz(4) = e3x*x4 + e3y*y4 + e3z*z4
230 IF (iroddl == 0 .OR. (miner(i) <= em20))
THEN
232 va(1) = vx1*e1x + vy1*e1y + vz1*e1z
233 va(2) = vx1*e2x + vy1*e2y + vz1*e2z
234 va(3) = vx1*e3x + vy1*e3y + vz1*e3z
235 vb(1) = vx2*e1x + vy2*e1y + vz2*e1z
236 vb(2) = vx2*e2x + vy2*e2y + vz2*e2z
237 vb(3) = vx2*e3x + vy2*e3y + vz2*e3z
238 vc(1) = vx3*e1x + vy3*e1y + vz3*e1z
239 vc(2) = vx3*e2x + vy3*e2y + vz3*e2z
240 vc(3) = vx3*e3x + vy3*e3y + vz3*e3z
241 vd(1) = vx4*e1x + vy4*e1y + vz4*e1z
242 vd(2) = vx4*e2x + vy4*e2y + vz4*e2z
243 vd(3) = vx4*e3x + vy4*e3y + vz4*e3z
247 . rx ,ry ,rz ,va ,vb ,
258 IF (iroddl == 1 .and. miner(i) > em20)
THEN
259 wx = (vr(1,i) + vr(1,nm)) * half
260 wy = (vr(2,i) + vr(2,nm)) * half
261 wz = (vr(3,i) + vr(3,nm)) * half
262 wlx = wx*e1x + wy*e1y + wz*e1z
263 wly = wx*e2x + wy*e2y + wz*e2z
264 wlz = wx*e3x + wy*e3y + wz*e3z
265 dwx = vr(1,i) - vr(1,nm)
266 dwy = vr(2,i) - vr(2,nm)
267 dwz = vr(3,i) - vr(3,nm)
273 stbrk = sqrt(xsm*xsm+ysm*ysm+zsm*zsm)*dwdu
276 dvx = v(1,i) - v(1,nm)
277 dvy = v(2,i) - v(2,nm)
278 dvz = v(3,i) - v(3,nm)
283 len2 = xsm*xsm + ysm*ysm + zsm*zsm
291 vlx = vxx*e1x + vyy*e1y + vzz*e1z + ysm*wlz - zsm*wly
292 vly = vxx*e2x + vyy*e2y + vzz*e2z + zsm*wlx - xsm*wlz
293 vlz = vxx*e3x + vyy*e3y + vzz*e3z + xsm*wly - ysm*wlx
295 vrx = dwx*e1x + dwy*e1y + dwz*e1z
296 vry = dwx*e2x + dwy*e2y + dwz*e2z
297 vrz = dwx*e3x + dwy*e3y + dwz*e3z
307 dl(1,ir,ii) = dl(1,ir,ii) + dlx
308 dl(2,ir,ii) = dl(2,ir,ii) + dly
309 dl(3,ir,ii) = dl(3,ir,ii) + dlz
311 dr(1,ir,ii) = dr(1,ir,ii) + drx
312 dr(2,ir,ii) = dr(2,ir,ii) + dry
313 dr(3,ir,ii) = dr(3,ir,ii) + drz
317 IF (visc /= zero)
THEN
318 ms_harm = (ms_pena(i)*ms_pena(nm))/(ms_pena(i)+ms_pena(nm
319 dkm = two*stfn(ii)*ms_harm
320 vis(ir,k) = visc*sqrt(dkm)
321 stf(ir,k) = (vis(ir,k) + sqrt(vis(ir,k)**2 + (one+stbrk)*dkm))**2/(two*ms_harm)
323 stf(ir,k) = (one+stbrk)*stfn(ii)
325 IF (iroddl == 1 .and. miner(i) > em20)
THEN
326 in_harm = (in(i)*in(nm))/(in(i)+in(nm))
327 stfr(ii) = stfn(ii)*len2
328 dkm = two*stfr(ii)*in_harm
329 visr(ir,k)= visc*sqrt(dkm)
330 str(ir,k) = (visr(ir,k) + sqrt
339 flocx(ir) = stfn(ii) * dl(1,ir,ii)
340 flocy(ir) = stfn(ii) * dl(2,ir,ii)
341 flocz(ir) = stfn(ii) * dl(3,ir,ii)
343 flocxv(ir) = vis(ir,k) * vlx
344 flocyv(ir) = vis(ir,k) * vly
345 floczv(ir) = vis(ir,k) * vlz
347 dxt = dl(1,ir,ii)**2 + dl(2,ir,ii)**2+ dl(3,ir,ii)**2
348 econtt = econtt + half*stfn(ii)*dxt
350 econvt = econvt + (flocxv(ir)*vlx
352 . + floczv(ir)*vlz)*dt1
354 flocx(ir) = flocx(ir) + flocxv(ir)
355 flocy(ir) = flocy(ir) + flocyv(ir)
356 flocz(ir) = flocz(ir) + floczv(ir)
358 mlocx(ir) = stfr(ii) * dr(1,ir,ii)
359 mlocy(ir) = stfr(ii) * dr(2,ir,ii)
360 mlocz(ir) = stfr(ii) * dr(3,ir,ii)
362 mlocxv(ir) = visr(ir,k) * vrx
363 mlocyv(ir) = visr(ir,k) * vry
364 mloczv(ir) = visr(ir,k) * vrz
366 IF (iroddl == 1 .and. miner(i) > em20)
THEN
368 dxt = dr(1,ir,ii)**2 + dr(2,ir,ii)**2 + dr(3,ir,ii)**2
369 econtt = econtt + half*stfr(ii)*dxt
371 econvt = econvt + (mlocxv(ir)*vrx
373 . + mloczv(ir)*vrz)*dt1
376 mlocx(ir) = mlocx(ir) + mlocxv(ir)
377 mlocy(ir) = mlocy(ir) + mlocyv(ir)
378 mlocz(ir) = mlocz(ir) + mloczv(ir)
382 stmax =
max(stf(1,k),stf(2,k),stf(3,k),stf(4,k))
383 IF (iroddl == 1 .and. miner(i) > em20)
THEN
389 CALL i2loceq( nir ,rs ,rx ,ry ,rz ,
390 . flocx ,flocy ,flocz ,h ,stifm(k))
396 xsm = x(1,i) - x(1,nm)
397 ysm = x(2,i) - x(2,nm)
398 zsm = x(3,i) - x(3,nm)
402 fx(ir) = e1x*flocx(ir) + e2x*flocy(ir) + e3x*flocz(ir)
403 fy(ir) = e1y*flocx(ir) + e2y*flocy(ir) + e3y*flocz(ir)
404 fz(ir) = e1z*flocx(ir) + e2z*flocy(ir) + e3z*flocz(ir)
406 mx(ir) = e1x*mlocx(ir) + e2x*mlocy(ir) + e3x*mlocz(ir)
407 my(ir) = e1y*mlocx(ir) + e2y*mlocy(ir) + e3y*mlocz(ir)
408 mz(ir) = e1z*mlocx(ir) + e2z*mlocy(ir) + e3z*mlocz(ir)
410 mrx(ir) = half*(ysm*fz(ir) - zsm*fy(ir))
411 mry(ir) = half*(zsm*fx(ir) - xsm*fz(ir))
412 mrz(ir) = half*(xsm*fy(ir) - ysm*fx(ir))
416 sav_for_pena(1,i) = sav_for_pena(1,i) - fx(ir)
417 sav_for_pena(2,i) = sav_for_pena(2,i) - fy(ir)
418 sav_for_pena(3,i) = sav_for_pena(3,i) - fz(ir)
419 sav_for_pena(4,i) = sav_for_pena(4,i) + stf(ir,k)
421 IF (iroddl == 1 .and. miner(i) > em20)
THEN
422 sav_for_pena(5,i) = sav_for_pena(5,i) - mx(ir) + mrx(ir)
423 sav_for_pena(6,i) = sav_for_pena(6,i) - my(ir) + mry(ir)
424 sav_for_pena(7,i) = sav_for_pena(7,i) - mz(ir) + mrz(ir)
425 sav_for_pena(8,i) = sav_for_pena(8,i) + str(ir,k)
433 fini(1,ir,ii) = flocx(ir)
434 fini(2,ir,ii) = flocy(ir)
435 fini(3,ir,ii) = flocz(ir)
436 IF (iroddl == 1 .and. miner(i) > em20)
THEN
437 fini(4,ir,ii) = mlocx(ir)
438 fini(5,ir,ii) = mlocy(ir)
445 fnorm = e3x*flocx(ir) + e3y*flocy(ir) + e3z*flocz(ir)
450 ft(1) = flocx(ir) - fn(1)
451 ft(2) = flocy(ir) - fn(2)
452 ft(3) = flocz(ir) - fn(3)
454 fsav(1) = fsav(1) + fn(1)*dt1*w
455 fsav(2) = fsav(2) + fn(2)*dt1*w
456 fsav(3) = fsav(3) + fn(3)*dt1*w
457 fsav(4) = fsav(4) + ft(1)*dt1*w
458 fsav(5) = fsav(5) + ft(2)*dt1*w
459 fsav(6) = fsav(6) + ft(3)*dt1*w
461 IF (anim_v(13)+h3d_data%N_VECT_CONT2 > 0)
THEN
462 fncont(1,i) = fncont(1,i) - fx(ir) * w
463 fncont(2,i) = fncont(2,i) - fy(ir) * w
464 fncont(3,i) = fncont(3,i) - fz(ir) * w
465 fncont(1,irect(ir,l)) = fncont(1,irect(ir,l)) + fx(ir)*w
466 fncont(2,irect(ir,l)) = fncont(2,irect(ir,l)) + fy(ir)*w
467 fncont(3,irect(ir,l)) = fncont(3,irect(ir,l)) + fz(ir)*w
470 IF(anim_v(27)+h3d_data%N_VECT_PCONT2>0)
THEN
471 fncontp(1,i) = fncontp(1,i) - fn(1) * w
472 fncontp(2,i) = fncontp(2,i) - fn(2) * w
473 fncontp(3,i) = fncontp(3,i) - fn(3) * w
475 fncontp(1,irect(ir,l)) = fncontp(1,irect(ir,l)) + fn(1)*w
477 fncontp(3,irect(ir,l)) = fncontp
480 ftcontp(2,i) = ftcontp(2,i) - ft(2) * w
481 ftcontp(3,i) = ftcontp(3,i) - ft(3) * w
483 ftcontp(1,irect(ir,l)) = ftcontp(1,irect(ir,l)) + ft(1)*w
484 ftcontp(2,irect(ir,l)) = ftcontp(2,irect(ir,l)) + ft(2)*w
485 ftcontp(3,irect(ir,l)) = ftcontp(3,irect(ir,l)) + ft(3)*w
496 a(1,nm) = a(1,nm) + fx(ir)
497 a(2,nm) = a(2,nm) + fy(ir)
498 a(3,nm) = a(3,nm) + fz(ir)
499 stifn(nm) = stifn(nm) + stf(ir,k) + stifm(k)*stmax
501 IF (iroddl == 1 .and. miner(i) > em20)
THEN
502 ar(1,nm) = ar(1,nm) + mx(ir) + mrx(ir)
503 ar(2,nm) = ar(2,nm) + my(ir) + mry(ir)
504 ar(3,nm) = ar(3,nm) + mz(ir) + mrz(ir)
505 stifr(nm) = stifr(nm) + str(ir,k)
524 IF (idtmins==2 .or. idtmins_int/=0)
THEN
526 CALL i2sms26(llt ,ix1 ,ix2 ,ix3 ,ix4 ,
527 . nsvg ,stf ,noint,dmint2(1,kk
528 . nodnx_sms,vis,dti )
539 econt = econt + econtt
540 econtd = econtd + econvt
541 fsav(26) = fsav(26) + econtt
542 fsav(28) = fsav(28) + econvt
543#include "lockoff.inc"