36
37
38
39#include "implicit_f.inc"
40#include "comlock.inc"
41
42
43
44#include "com01_c.inc"
45#include "com06_c.inc"
46#include "com08_c.inc"
47#include "scr05_c.inc"
48#include "scr11_c.inc"
49#include "impl1_c.inc"
50#include "sms_c.inc"
51
52
53
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
59
60
61
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,
69 . fcoe,ax,
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
74 DOUBLE PRECISION
75 . FRWL6_L(7,6)
76
77 prec=em07
78 ax = one
79 icont=0
81
82
83
84
85
86 IF(msr==0)THEN
87 xwl=rwl(4)
88 ywl=rwl(5)
89 zwl=rwl(6)
90 vxw=zero
91 vyw=zero
92 vzw=zero
93 xwl0=xwl
94 ywl0=ywl
95 zwl0=zwl
96 vnold=zero
97 vn =zero
98 ELSE
99 m3=3*msr
100 m2=m3-1
101 m1=m2-1
102
103 vxw=v(m1)+a(m1)*dt12
104 vyw=v(m2)+a(m2)*dt12
105 vzw=v(m3)+a(m3)*dt12
106 xwl=x(m1)+vxw*dt2
107 ywl=x(m2)+vyw*dt2
108 zwl=x(m3)+vzw*dt2
109 xwl0=x(m1)
110 ywl0=x(m2)
111 zwl0=x(m3)
112 vnold =rwl(4)
113 vn =vxw*rwl(1)+vyw*rwl(2)+vzw*rwl(3)
114 rwl(4)=vn
115 ENDIF
116 tfxt =zero
117 tfxtn=zero
118 tfxt2 =zero
119 tfxtn2=zero
120
121 xl1=rwl(7)
122 yl1=rwl(8)
123 zl1=rwl(9)
124 xl2=rwl(10)
125 yl2=rwl(11)
126 zl2=rwl(12)
127 sx12=yl1*zl2-zl1*yl2
128 sy12=zl1*xl2-xl1*zl2
129 sz12=xl1*yl2-yl1*xl2
130 s12=sx12**2+sy12**2+sz12**2
131 nindex = 0
132
133 IF(idtmins==0.AND.idtmins_int==0)THEN
134
135 DO i=1,nsn
136 n=nsw(i)
137 n3=3*n
138 n2=n3-1
139 n1=n2-1
140 IF(n2d==1)THEN
141 ax=x(n2)
142 ELSE
143 ax=one
144 ENDIF
145
146 xc0=x(n1)-xwl0
147 yc0=x(n2)-ywl0
148 zc0=x(n3)-zwl0
149 dp0=xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
150
151 vx=v(n1)+a(n1)*dt12
152 vy=v(n2)+a(n2)*dt12
153 vz=v(n3)+a(n3)*dt12
154 xc=xc0+(vx-vxw)*dt2
155 yc=yc0+(vy-vyw)*dt2
156 zc=zc0+(vz-vzw)*dt2
157 dp=dp0+((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3))*dt2
158
160 . abs( (vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3) ),
161 . abs(vn-vnold) )
162 IF(iresp==1)THEN
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))
167 END IF
168 IF(dp>zero.OR.dp0<=-tol) cycle
169
170 xcp=xc-dp*rwl(1)
171 ycp=yc-dp*rwl(2)
172 zcp=zc-dp*rwl(3)
173
174 sx1m=yl1*zcp-zl1*ycp
175 sy1m=zl1*xcp-xl1*zcp
176 sz1m=xl1*ycp-yl1*xcp
177 ps=sx12*sx1m+sy12*sy1m+sz12*sz1m
178
179 IF(ps<zero) cycle
180
181 sm1=sx1m**2+sy1m**2+sz1m**2
182
183 IF(sm1>s12) cycle
184
185 sxm2=ycp*zl2-zcp*yl2
186 sym2=zcp*xl2-xcp*zl2
187 szm2=xcp*yl2-ycp*xl2
188 ps=sx12*sxm2+sy12*sym2+sz12*szm2
189
190 IF(ps<zero) cycle
191
192 sm2=sxm2**2+sym2**2+szm2**2
193
194 IF(sm2>s12) cycle
195
196 icont=1
197 IF((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3)>zero
198 . .AND.dp0>zero)cycle
199 nindex = nindex + 1
200 index(nindex) = i
201 END DO
202
203 ELSE
204
205 DO i=1,nsn
206 n=nsw(i)
207 IF(nodnx_sms(n)/=0)cycle
208 n3=3*n
209 n2=n3-1
210 n1=n2-1
211 IF(n2d==1)THEN
212 ax=x(n2)
213 ELSE
214 ax=one
215 ENDIF
216
217 xc0=x(n1)-xwl0
218 yc0=x(n2)-ywl0
219 zc0=x(n3)-zwl0
220 dp0=xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
221
222 vx=v(n1)+a(n1)*dt12
223 vy=v(n2)+a(n2)*dt12
224 vz=v(n3)+a(n3)*dt12
225 xc=xc0+(vx-vxw)*dt2
226 yc=yc0+(vy-vyw)*dt2
227 zc=zc0+(vz-vzw)*dt2
228 dp=dp0+((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3))*dt2
229
231 . abs( (vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3) ),
232 . abs(vn-vnold) )
233 IF(iresp==1)THEN
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))
238 END IF
239 IF(dp>zero.OR.dp0<=-tol)cycle
240
241 xcp=xc-dp*rwl(1)
242 ycp=yc-dp*rwl(2)
243 zcp=zc-dp*rwl(3)
244
245 sx1m=yl1*zcp-zl1*ycp
246 sy1m=zl1*xcp-xl1*zcp
247 sz1m=xl1*ycp-yl1*xcp
248 ps=sx12*sx1m+sy12*sy1m+sz12*sz1m
249
250 IF(ps<zero) cycle
251
252 sm1=sx1m**2+sy1m**2+sz1m**2
253
254 IF(sm1>s12) cycle
255
256 sxm2=ycp*zl2-zcp*yl2
257 sym2=zcp*xl2-xcp*zl2
258 szm2=xcp*yl2-ycp*xl2
259 ps=sx12*sxm2+sy12*sym2+sz12*szm2
260
261 IF(ps<zero) cycle
262
263 sm2=sxm2**2+sym2**2+szm2**2
264
265 IF(sm2>s12) cycle
266
267 icont=1
268 IF((vx-vxw)*rwl(1)+(vy-vyw)*rwl(2)+(vz-vzw)*rwl(3)>zero
269 . .AND.dp0>zero)cycle
270 nindex = nindex + 1
271 index(nindex) = i
272 END DO
273
274 END IF
275
276 fact=one/dt12
277 IF(itied/=0)THEN
278 DO 40 j = 1, nindex
279 i = index(j)
280 n = nsw(i)
281 n3=3*n
282 n2=n3-1
283 n1=n2-1
284
285 xc0=x(n1)-xwl0
286 yc0=x(n2)-ywl0
287 zc0=x(n3)-zwl0
288 dp0 =xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
289 dp0dt=-
min(dp0,zero)/dt2
290 dvx =dp0dt*rwl(1)
291 dvy =dp0dt*rwl(2)
292 dvz =dp0dt*rwl(3)
293
294 dv=(v(n1)-vxw)*rwl(1)+(v(n2)-vyw)*rwl(2)+(v
295 da=a(n1)*rwl(1)+a(n2)*rwl(2)+a(n3)*rwl(3)
296 dvt=dv+da*dt12-dp0dt
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
314 fric=rwl(13)
315 fric2=fric**2
316 IF(ftdft<=fric2*fndfn.OR.itied==1) THEN
317
318 a(n1)=zero
319 a(n2)=zero
320 a(n3)=zero
321 v(n1)=vxw+dvx
322 v(n2)=vyw+dvy
323 v(n3)=vzw+dvz
324 IF (imp_s==1)THEN
325 IF(ndof(n)>0) THEN
326 jj=iddl(n)+1
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
330 ENDIF
331 ENDIF
332 ELSE
333
334 fcoe=fric*sqrt(fndfn/
max(em20,ftdft))
335 fnxt=fcoe*fnxt
336 fnyt=fcoe*fnyt
337 fnzt=fcoe*fnzt
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
344 IF (imp_s==1)THEN
345 IF (ndof(n)>0) THEN
346 v(n1)=-dv
347 a(n1)=rwl(1)
348 a(n2)=rwl(2)
349 a(n3)=rwl(3)
350 jj=iddl(n)+1
351 IF (ikc(jj)==0)ikc(jj)=10
352 ENDIF
353 ENDIF
354 tfxt=tfxt-
355 . ((v(n1)-vxw)*fnxt+(v(n2)-vyw)*fnyt+(v(n3)-vzw)*fnzt)
356 . *weight_md(n)
357 wewe2 = (1-weight_md(n))*weight(n)
358 tfxt2=tfxt2-
359 . ((v(n1)-vxw)*fnxt+(v(n2)-vyw)*fnyt+(v(n3)-vzw)*fnzt)
360 . *wewe2
361 ENDIF
362 f5(j) = fnxt*weight_md(n)
363 f6(j) = fnyt*weight_md(n)*ax
364 f7(j) = fnzt*weight_md(n)*ax
365 40 CONTINUE
366 ELSE
367 DO 60 j = 1, nindex
368 i = index(j)
369 n = nsw(i)
370 n3=3*n
371 n2=n3-1
372 n1=n2-1
373 xc0=x(n1)-xwl0
374 yc0=x(n2)-ywl0
375 zc0=x(n3)-zwl0
376 dp0 =xc0*rwl(1)+yc0*rwl(2)+zc0*rwl(3)
377 dp0dt=-
min(dp0,zero)/dt2
378 dvx =dp0dt*rwl(1)
379 dvy =dp0dt*rwl(2)
380 dvz =dp0dt*rwl(3)
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)
383 dvt=dv+da*dt12-dp0dt
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)
396 f5(j) = zero
397 f6(j) = zero
398 f7(j) = zero
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
406 60 CONTINUE
407 ENDIF
408
409 IF(imconv==1)THEN
410 tfxt=tfxt+half*dt1*tfxtn
411 tfxt2=tfxt2+half*dt1*tfxtn2
412
413 wfext=wfext+tfxt
414 wfext_md=wfext_md+tfxt2
415
416 DO k = 1, 6
417 frwl6_l(1,k) = zero
418 frwl6_l(2,k) = zero
419 frwl6_l(3,k) = zero
420 frwl6_l(4,k) = zero
421 frwl6_l(5,k) = zero
422 frwl6_l(6,k) = zero
423 frwl6_l(7,k) = zero
424 END DO
432
433#include "lockon.inc"
434 DO k = 1, 6
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)
442 END DO
443#include "lockoff.inc"
444 ENDIF
445
446 IF (imp_s==1) THEN
447 IF(itied==0)THEN
448 DO j=1,nindex
449 i = index(j)
450 n=nsw(i)
451 IF (ndof(n)>0) THEN
452 n3=3*n
453 n2=n3-1
454 n1=n2-1
455 a(n1)=rwl(1)
456 a(n2)=rwl(2)
457 a(n3)=rwl(3)
458 jj=iddl(n)+1
459 IF (ikc(jj)==0)ikc(jj)=10
460 ENDIF
461 ENDDO
462 ENDIF
463 DO j=1,nindex
464 i = index(j)
465 n=nsw(i)
466 IF (ndof(n)>0) THEN
467
468
469 nt_rw = nt_rw + 1
470 END IF
471 ENDDO
472 ENDIF
473
474 RETURN
subroutine sum_6_float(jft, jlt, f, f6, n)