44
45
46
48
49
50
51#include "implicit_f.inc"
52#include "comlock.inc"
53
54
55
56#include "mvsiz_p.inc"
57
58
59
60 INTEGER NSN,PENFLAG,IROT, NOINT,NELTST,ITYPTST
61 INTEGER IRECT(4,*),NSV(*),IRTL(*),WEIGHT(*),
62 . NODNX_SMS(*),IVISC
63
65 . visc,dt2t
67 . x(3,*),vr(3,*),v(3,*),a(3,*),ar(3,*),xini(3,*),skew(9,*),
68 . dx(3,*),fini(3,*),ms(*),stifn(*),stifr(*),stfn(*),stfr(*),
69 . crst(2,*),fsav(*),fncont(3,*),fncontp(3,*) ,ftcontp(3,*),
70 . dmint2(4,*),sav_for_pena(4,*),ms_pena(*)
71 TYPE (H3D_DATABASE) :: H3D_DATA
72
73
74
75#include "com06_c.inc"
76#include "com08_c.inc"
77#include "scr11_c.inc"
78#include "scr14_c.inc"
79#include "sms_c.inc"
80#include "task_c.inc"
81
82
83
84 INTEGER NIR,I,J,II,L,W,KK,K,LLT,
85 . IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
86 . NSVG(MVSIZ)
87
89 . s,t,sp,sm,tp,tm,econtt,econvt,e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,
90 . flx,fly,flz,fs(3),xsm,ysm,zsm,xm,ym,zm,
91 . x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4,x0,y0,z0,xs,ys,zs,stf,
92 . vx1,vx2,vx3,vx4,vy1,vy2,vy3,vy4,vz1,vz2,vz3,vz4,dlx,dly,dlz,
93 . vx0,vy0,vz0,vsx,vsy,vsz,vmx,vmy,vmz,v1,v2,v3,dtinv,
94 . fxv,fyv,fzv,stbrk,dti, dxt
96 . h(4,mvsiz),fx(4),fy(4),fz(4),fmx(4),fmy(4),fmz(4),
97 . rx(4),ry(4),rz(4),rm(3),rs(3),vs(3),vm(3),
98 . stif(mvsiz), vis(mvsiz), stifm(mvsiz),hl(4)
100 . mharm,dkm,va(3),vb(3),vc(3),vd(3),viscl
101
102
103 i7kglo = 1
104 econtt = zero
105 econvt = zero
106
107 DO kk=1,nsn,mvsiz
108
109 llt=
min(nsn-kk+1,mvsiz)
110 DO k=1,llt
111
112 ii= kk+k-1
113 i = nsv(ii)
114
115 IF (i > 0) THEN
116 nsvg(k) = i
117 w = weight(i)
118 s = crst(1,ii)
119 t = crst(2,ii)
120 l = irtl(ii)
121
122 ix1(k) = irect(1,l)
123 ix2(k) = irect(2,l)
124 ix3(k) = irect(3,l)
125 ix4(k) = irect(4,l)
126 nir= 4
127 sp = one + s
128 sm = one - s
129 tp = fourth*(one + t)
130 tm = fourth*(one - t)
131 h(1,k)=tm*sm
132 h(2,k)=tm*sp
133 h(3,k)=tp*sp
134 h(4,k)=tp*sm
135 IF (ix3(k) == ix4(k)) THEN
136 nir = 3
137 h(3,k) = h(3,k) + h(4,k)
138 h(4,k) = zero
139 ENDIF
140
141
142
143 x1 = x(1,ix1(k))
144 y1 = x(2,ix1(k))
145 z1 = x(3,ix1(k))
146 x2 = x(1,ix2(k))
147 y2 = x(2,ix2(k))
148 z2 = x(3,ix2(k))
149 x3 = x(1,ix3(k))
150 y3 = x(2,ix3(k))
151 z3 = x(3,ix3(k))
152 x4 = x(1,ix4(k))
153 y4 = x(2,ix4(k))
154 z4 = x(3,ix4(k))
155 xs = x(1,i)
156 ys = x(2,i)
157 zs = x(3,i)
158 vsx = v(1,i)
159 vsy = v(2,i)
160 vsz = v(3,i)
161 vx1 = v(1,ix1(k))
162 vy1 = v(2,ix1(k))
163 vz1 = v(3,ix1(k))
164 vx2 = v(1,ix2(k))
165 vy2 = v(2,ix2(k))
166 vz2 = v(3,ix2(k))
167 vx3 = v(1,ix3(k))
168 vy3 = v(2,ix3(k))
169 vz3 = v(3,ix3(k))
170 vx4 = v(1,ix4(k))
171 vy4 = v(2,ix4(k))
172 vz4 = v(3,ix4(k))
173
174 CALL i2rep(x1 ,x2 ,x3 ,x4 ,
175 . y1 ,y2 ,y3 ,y4 ,
176 . z1 ,z2 ,z3 ,z4 ,
177 . e1x ,e1y ,e1z ,
178 . e2x ,e2y ,e2z ,
179 . e3x ,e3y ,e3z ,nir )
180
181 IF (nir == 4) THEN
182 xm = x1*h(1,k) + x2*h(2,k) + x3*h(3,k) + x4*h(4,k)
183 ym = y1*h(1,k) + y2*h(2,k) + y3*h(3,k) + y4*h(4,k)
184 zm = z1*h(1,k) + z2*h(2,k) + z3*h(3,k) + z4*h(4,k)
185 x0 = (x1 + x2 + x3 + x4)/nir
186 y0 = (y1 + y2 + y3 + y4)/nir
187 z0 = (z1 + z2 + z3 + z4)/nir
188
189 xm = xm - x0
190 ym = ym - y0
191 zm = zm - z0
192 xs = xs - x0
193 ys = ys - y0
194 zs = zs - z0
195 xsm = xs - xm
196 ysm = ys - ym
197 zsm = zs - zm
198
199 vx0 = (vx1 + vx2 + vx3 + vx4)/nir
200 vy0 = (vy1 + vy2 + vy3 + vy4)/nir
201 vz0 = (vz1 + vz2 + vz3 + vz4)/nir
202 vmx = vx1*h(1,k) + vx2*h(2,k) + vx3*h(3,k) + vx4*h(4,k) - vx0
203 vmy = vy1*h(1,k) + vy2*h(2,k) + vy3*h(3,k) + vy4*h(4,k) - vy0
204 vmz = vz1*h(1,k) + vz2*h(2,k) + vz3*h(3,k) + vz4*h(4,k) - vz0
205 ELSE
206 x0 = (x1 + x2 + x3)/nir
207 y0 = (y1 + y2 + y3)/nir
208 z0 = (z1 + z2 + z3)/nir
209
210 xm = x1*h(1,k) + x2*h(2,k) + x3*h(3,k)
211 ym = y1*h(1,k) + y2*h(2,k) + y3*h(3,k)
212 zm = z1*h(1,k) + z2*h(2,k) + z3*h(3,k)
213
214 xm = xm - x0
215 ym = ym - y0
216 zm = zm - z0
217 xs = xs - x0
218 ys = ys - y0
219 zs = zs - z0
220 xsm = xs - xm
221 ysm = ys - ym
222 zsm = zs - zm
223
224 vx0 = (vx1 + vx2 + vx3)/nir
225 vy0 = (vy1 + vy2 + vy3)/nir
226 vz0 = (vz1 + vz2 + vz3)/nir
227 vmx = vx1*h(1,k) + vx2*h(2,k) + vx3*h(3,k) - vx0
228 vmy = vy1*h(1,k) + vy2*h(2,k) + vy3*h(3,k) - vy0
229 vmz = vz1*h(1,k) + vz2*h(2,k) + vz3*h(3,k) - vz0
230 ENDIF
231 x1 = x1 - x0
232 y1 = y1 - y0
233 z1 = z1 - z0
234 x2 = x2 - x0
235 y2 = y2 - y0
236 z2 = z2 - z0
237 x3 = x3 - x0
238 y3 = y3 - y0
239 z3 = z3 - z0
240 x4 = x4 - x0
241 y4 = y4 - y0
242 z4 = z4 - z0
243 vsx = vsx - vx0
244 vsy = vsy - vy0
245 vsz = vsz - vz0
246
247
248
249 rs(1) = xs*e1x + ys*e1y + zs*e1z
250 rs(2) = xs*e2x + ys*e2y + zs*e2z
251 rs(3) = xs*e3x + ys*e3y + zs*e3z
252 rm(1) = xm*e1x + ym*e1y + zm*e1z
253 rm(2) = xm*e2x + ym*e2y + zm*e2z
254 rm(3) = xm*e3x + ym*e3y + zm*e3z
255
256 rx(1) = e1x*x1 + e1y*y1 + e1z*z1
257 ry(1) = e2x*x1 + e2y*y1 + e2z*z1
258 rz(1) = e3x*x1 + e3y*y1 + e3z*z1
259 rx(2) = e1x*x2 + e1y*y2 + e1z*z2
260 ry(2) = e2x*x2 + e2y*y2 + e2z*z2
261 rz(2) = e3x*x2 + e3y*y2 + e3z*z2
262 rx(3) = e1x*x3 + e1y*y3 + e1z*z3
263 ry(3) = e2x*x3 + e2y*y3 + e2z*z3
264 rz(3) = e3x*x3 + e3y*y3 + e3z*z3
265 rx(4) = e1x*x4 + e1y*y4 + e1z*z4
266 ry(4) = e2x*x4 + e2y*y4 + e2z*z4
267 rz(4) = e3x*x4 + e3y*y4 + e3z*z4
268
269 IF(nir==3)THEN
270 rx(4)=zero
271 ry(4)=zero
272 rz(4)=zero
273 END IF
274
275 vs(1) = vsx*e1x + vsy*e1y + vsz*e1z
276 vs(2) = vsx*e2x + vsy*e2y + vsz*e2z
277 vs(3) = vsx*e3x + vsy*e3y + vsz*e3z
278 vm(1) = vmx*e1x + vmy*e1y + vmz*e1z
279 vm(2) = vmx*e2x + vmy*e2y + vmz*e2z
280 vm(3) = vmx*e3x + vmy*e3y + vmz*e3z
281
282 va(1) = vx1*e1x + vy1*e1y + vz1*e1z
283 va(2) = vx1*e2x + vy1*e2y + vz1*e2z
284 va(3) = vx1*e3x + vy1*e3y + vz1*e3z
285
286 vb(1) = vx2*e1x + vy2*e1y + vz2*e1z
287 vb(2) = vx2*e2x + vy2*e2y + vz2*e2z
288 vb(3) = vx2*e3x + vy2*e3y + vz2*e3z
289
290 vc(1) = vx3*e1x + vy3*e1y + vz3*e1z
291 vc(2) = vx3*e2x + vy3*e2y + vz3*e2z
292 vc(3) = vx3*e3x + vy3*e3y + vz3*e3z
293
294 vd(1) = vx4*e1x + vy4*e1y + vz4*e1z
295 vd(2) = vx4*e2x + vy4*e2y + vz4*e2z
296 vd(3) = vx4*e3x + vy4*e3y + vz4*e3z
297
298 v1 = vs(1) - vm(1)
299 v2 = vs(2) - vm(2)
300 v3 = vs(3) - vm(3)
301
302
303 IF (tt == zero) THEN
304 dx(1,ii) = zero
305 dx(2,ii) = zero
306 dx(3,ii) = zero
307 fini(1,ii) = zero
308 fini(2,ii) = zero
309 fini(3,ii) = zero
310 ENDIF
311
312 CALL i2pen_rot(skew(1,ii) ,tt ,dt1 ,stbrk,
313 . rs ,rm ,v1 ,v2 ,v3 ,
314 . rx ,ry ,rz ,va ,vb ,
315 . vc ,vd)
316
317 dlx = v1*dt1
318 dly = v2*dt1
319 dlz = v3*dt1
320
321 dx(1,ii) = dx(1,ii) + dlx
322 dx(2,ii) = dx(2,ii) + dly
323 dx(3,ii) = dx(3,ii) + dlz
324
325
326
327 flx = dx(1,ii) * stfn(ii)
328 fly = dx(2,ii) * stfn(ii)
329 flz = dx(3,ii) * stfn(ii)
330 viscl = visc
331
332 IF (ivisc==1) THEN
333
334 mharm = ms_pena(i)
335 ELSEIF(ms_pena(i)==zero.OR.ms_pena(ix1(k))==zero.OR.
336 . ms_pena(ix2(k))==zero.OR.
337 . ms_pena(ix3(k))==zero.OR.
338 . ms_pena(ix4(k))==zero)THEN
339 mharm = zero
340 viscl = zero
341 ELSEIF(nir==4)THEN
342 mharm = one/ms_pena(i) +
343 . one/ms_pena(ix1(k)) + one/ms_pena(ix2(k)) + one/ms_pena(ix3(k)) + one/ms_pena(ix4(k))
344 mharm = one/mharm
345 ELSE
346 mharm = one/ms_pena(i) +
347 . one/ms_pena(ix1(k)) + one/ms_pena(ix2(k)) + one/ms_pena(ix3(k))
348 mharm = one/mharm
349 END IF
350 dkm = two*stfn(ii)*mharm
351 vis(k) = visc*sqrt(dkm)
352
353 fxv = vis(k) * v1
354 fyv = vis(k) * v2
355 fzv = vis(k) * v3
356
357 dxt = dx(1,ii)*dx(1,ii) + dx(2,ii)*dx(2,ii) + dx(3,ii)*dx(3,ii)
358 econtt = econtt + half*stfn(ii)*dxt*w
359
360 econvt = econvt + (fxv*v1 + fyv*v2 + fzv*v3)*dt1*w
361
362 flx = flx + fxv
363 fly = fly + fyv
364 flz = flz + fzv
365
366 DO j=1,4
367 fmx(j) = h(j,k)*flx
368 fmy(j) = h(j,k)*fly
369 fmz(j) = h(j,k)*flz
370 ENDDO
371
372
373 CALL i2loceq( nir ,rs ,rx ,ry ,rz ,
374 . fmx ,fmy ,fmz ,h(1,k) ,stifm(k))
375
376
377
378 DO j=1,4
379 fx(j) = e1x*fmx(j) + e2x*fmy(j) + e3x*fmz(j)
380 fy(j) = e1y*fmx(j) + e2y*fmy(j) + e3y*fmz(j)
381 fz(j) = e1z*fmx(j) + e2z*fmy(j) + e3z*fmz(j)
382 ENDDO
383 fs(1) = zero
384 fs(2) = zero
385 fs(3) = zero
386 DO j=1,nir
387 fs(1) = fs(1) + fx(j)
388 fs(2) = fs(2) + fy(j)
389 fs(3) = fs(3) + fz(j)
390 ENDDO
391
392
393
394 sav_for_pena(1,i)= sav_for_pena(1,i)-fs(1)
395 sav_for_pena(2,i)= sav_for_pena(2,i)-fs(2)
396 sav_for_pena(3,i)= sav_for_pena(3,i)-fs(3)
397
398 IF (ivisc==1) THEN
399
400 dtinv = zero
401 IF (dt1 > zero) dtinv=one/dt1
402 stf = (one+stbrk)*stfn(ii) + two*vis(k)*dtinv
403 ELSE
404 stf = stfn(ii)*(viscl + sqrt(viscl**2 + (one+stbrk)))**2
405 ENDIF
406
407 sav_for_pena(4,i)= sav_for_pena(4,i)+stf
408 stif(k) = (one+stbrk)*stfn(ii)
409
410
411
412 IF (w == 1) THEN
413 a(1,ix1(k)) = a(1,ix1(k)) + fx(1)
414 a(2,ix1(k)) = a(2,ix1(k)) + fy(1)
415 a(3,ix1(k)) = a(3,ix1(k)) + fz(1)
416 stifn(ix1(k)) = stifn(ix1(k))+abs(stf*h(1,k))+stifm(k)*stf
417
418 a(1,ix2(k)) = a(1,ix2(k)) + fx(2)
419 a(2,ix2(k)) = a(2,ix2(k)) + fy(2)
420 a(3,ix2(k)) = a(3,ix2(k)) + fz(2)
421 stifn(ix2(k)) = stifn(ix2(k))+abs(stf*h(2,k))+stifm(k)*stf
422
423 a(1,ix3(k)) = a(1,ix3(k)) + fx(3)
424 a(2,ix3(k)) = a(2,ix3(k)) + fy(3)
425 a(3,ix3(k)) = a(3,ix3(k)) + fz(3)
426 stifn(ix3(k)) = stifn(ix3(k))+abs(stf*h(3,k))+stifm(k)*stf
427
428 a(1,ix4(k)) = a(1,ix4(k)) + fx(4)
429 a(2,ix4(k)) = a(2,ix4(k)) + fy(4)
430 a(3,ix4(k)) = a(3,ix4(k)) + fz(4)
431 stifn(ix4(k)) = stifn(ix4(k))+abs(stf*h(4,k))
432 . +stifm(k)*stf*sign(one,abs(h(4,k)))
433 ENDIF
434
435
436 fini(1,ii) = flx
437 fini(2,ii) = fly
438 fini(3,ii) = flz
439
440
441
442 hl(1:4) = h(1:4,k)
444 . irect(1,l),nir ,fsav ,fncont ,fncontp,
445 . ftcontp ,weight ,h3d_data,i ,hl)
446
447
448 ELSE
449 nsvg(k)= -i
450 l = irtl(ii)
451
452 ix1(k) = irect(1,l)
453 ix2(k) = irect(2,l)
454 ix3(k) = irect(3,l)
455 ix4(k) = irect(4,l)
456 stif(k)= zero
457 vis(k) = zero
458 ENDIF
459 ENDDO
460 IF(idtmins==2.OR.idtmins_int/=0)THEN
461 dti=dt2t
462 CALL i2sms25(llt ,ix1 ,ix2 ,ix3 ,ix4 ,
463 2 nsvg ,h ,stif ,noint,dmint2(1,kk),
464 3 nodnx_sms ,vis ,stifm ,dti)
465 IF(dti<dt2t)THEN
466 dt2t = dti
467 neltst = noint
468 ityptst = 10
469 ENDIF
470 END IF
471 ENDDO
472
473#include "lockon.inc"
474 econt = econt + econtt
475 econtd = econtd + econvt
476 fsav(26) = fsav(26) + econtt
477 fsav(28) = fsav(28) + econvt
478#include "lockoff.inc"
479
480 RETURN
subroutine i2forces(x, fs, fx, fy, fz, irect, nir, fsav, fncont, fncontp, ftcontp, weight, h3d_data, nsl, h)
subroutine i2loceq(nir, rs, rx, ry, rz, fmx, fmy, fmz, h, stifm)
subroutine i2pen_rot(skew, tt, dt1, stif, rs, rm, v1, v2, v3, rx, ry, rz, va, vb, vc, vd)
subroutine i2rep(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, nir)
subroutine i2sms25(jlt, ix1, ix2, ix3, ix4, nsvg, h, stif, noint, dmint2, nodnx_sms, vis, stifm, dti)