38
39
40
42 use element_mod , only : nixc,nixtg
43
44
45
46#include "implicit_f.inc"
47#include "comlock.inc"
48
49
50
51#include "scr17_c.inc"
52#include "com04_c.inc"
53#include "param_c.inc"
54#include "remesh_c.inc"
55#include "scr02_c.inc"
56#include "scr18_c.inc"
57#include "task_c.inc"
58
59
60
61 INTEGER IXC(NIXC,*), IPARTC(*), IXTG(NIXTG,*), IPARTTG(*),
62 . IPART(LIPART1,*), ITASK, NODFT, NODLT,SH4TREE(KSH4TREE,*),
63 . SH3TREE(KSH3TREE,*), ITAB(*)
65 . a(3,*),v(3,*),
66 . ar(3,*),vr(3,*), ms(*), in(*), x(3,*),
67 . stifn(*), stifr(*), mscnd(*), incnd(*)
68
69
70
71 INTEGER SH4FT, SH4LT, SH3FT, SH3LT
72 INTEGER N, NN, LEVEL, IP, NLEV, LL, IERR
73 INTEGER SON,M1,M2,M3,M4,MC,N1,N2,N3,N4,J,NA,NB
75 . vv, ax(3,numnod), arx(3,numnod), fac,
76 . dt2p, mas, iner, dtn
77
78
79
81
82
83 ax(1:3,nodft:nodlt)=acnd(1:3,nodft:nodlt)
84 arx(1:3,nodft:nodlt)=arcnd(1:3,nodft:nodlt)
85
87
89 sh4ft = 1+itask*ll/ nthread
90 sh4lt = (itask+1)*ll/nthread
91
92 DO nn=sh4ft,sh4lt
94
95 n1=ixc(2,n)
96 n2=ixc(3,n)
97 n3=ixc(4,n)
98 n4=ixc(5,n)
99
102 DO j=1,3
103 acnd(j,n1) =a(j,n1)
104 END DO
105 DO j=1,3
106 arcnd(j,n1) =ar(j,n1)
107 END DO
108 END IF
109
112 DO j=1,3
113 acnd(j,n2) =a(j,n2)
114 END DO
115 DO j=1,3
116 arcnd(j,n2) =ar(j,n2)
117 END DO
118 END IF
119
122 DO j=1,3
123 acnd(j,n3) =a(j,n3)
124 END DO
125 DO j=1,3
126 arcnd(j,n3) =ar(j,n3)
127 END DO
128 END IF
129
132 DO j=1,3
133 acnd(j,n4) =a(j,n4)
134 END DO
135 DO j=1,3
136 arcnd(j,n4) =ar(j,n4)
137 END DO
138 END IF
139
140 END DO
141
143 sh3ft = 1+itask*ll/ nthread
144 sh3lt = (itask+1)*ll/nthread
145
146 DO nn=sh3ft,sh3lt
148
149 n1=ixtg(2,n)
150 n2=ixtg(3,n)
151 n3=ixtg(4,n)
152
155 DO j=1,3
156 acnd(j,n1) =a(j,n1)
157 END DO
158 DO j=1,3
159 arcnd(j,n1) =ar(j,n1)
160 END DO
161 END IF
162
165 DO j=1,3
166 acnd(j,n2) =a(j,n2)
167 END DO
168 DO j=1,3
169 arcnd(j,n2) =ar(j,n2)
170 END DO
171 END IF
172
175 DO j=1,3
176 acnd(j,n3) =a(j,n3)
177 END DO
178 DO j=1,3
179 arcnd(j,n3) =ar(j,n3)
180 END DO
181 END IF
182
183 END DO
184
186
188
190
191
192
193 DO level=0,levelmax-1
194
196 sh4ft =
psh4upl(level)+ 1+itask*ll/ nthread
197 sh4lt =
psh4upl(level)+ (itask+1)*ll/nthread
198
199 DO nn=sh4ft,sh4lt
201
202 n1=ixc(2,n)
203 n2=ixc(3,n)
204 n3=ixc(4,n)
205 n4=ixc(5,n)
206
207 son=sh4tree(2,n)
208
209 mc=ixc(3,son+3)
210
212
214 DO j=1,3
215 vv =
216 . fourth*(acnd(j,n1)+acnd(j,n2)+acnd(j,n3)+acnd(j,n4))
217 acnd(j,mc) =vv
218 END DO
219
220 DO j=1,3
221 vv =
222 . fourth*(arcnd(j,n1)+arcnd(j,n2)+arcnd(j,n3)+arcnd(j,n4))
223 arcnd(j,mc)=vv
224 END DO
225
226 END IF
227
228 m1=ixc(3,son )
229 m2=ixc(4,son+1)
230 m3=ixc(5,son+2)
231 m4=ixc(2,son+3)
232
237
238 DO j=1,3
239 vv = half*(acnd(j,na)+acnd(j,nb))
240 acnd(j,m1) =vv
241 END DO
242
243 DO j=1,3
244 vv = half*(arcnd(j,na)+arcnd(j,nb))
245 arcnd(j,m1)=vv
246 END DO
247
248 END IF
249
254
255 DO j=1,3
256 vv = half*(acnd(j,na)+acnd(j,nb))
257 acnd(j,m2) =vv
258 END DO
259
260 DO j=1,3
261 vv = half*(arcnd(j,na)+arcnd(j,nb))
262 arcnd(j,m2)=vv
263 END DO
264
265 END IF
266
271
272 DO j=1,3
273 vv = half*(acnd(j,na)+acnd(j,nb))
274 acnd(j,m3) =vv
275 END DO
276
277 DO j=1,3
278 vv = half*(arcnd(j,na)+arcnd(j,nb))
279 arcnd(j,m3)=vv
280 END DO
281
282 END IF
283
288
289 DO j=1,3
290 vv = half*(acnd(j,na)+acnd(j,nb))
291 acnd(j,m4) =vv
292 END DO
293
294 DO j=1,3
295 vv = half*(arcnd(j,na)+arcnd(j,nb))
296 arcnd(j,m4)=vv
297 END DO
298
299 END IF
300
301 END DO
302
304 sh3ft =
psh3upl(level)+ 1+itask*ll/ nthread
305 sh3lt =
psh3upl(level)+ (itask+1)*ll/nthread
306
307 DO nn=sh3ft,sh3lt
309
310 n1=ixtg(2,n)
311 n2=ixtg(3,n)
312 n3=ixtg(4,n)
313
314 son=sh3tree(2,n)
315
316 m1=ixtg(4,son+3)
317 m2=ixtg(2,son+3)
318 m3=ixtg(3,son+3)
319
324
325 DO j=1,3
326 vv = half*(acnd(j,na)+acnd(j,nb))
327 acnd(j,m1) =vv
328 END DO
329 DO j=1,3
330 vv = half*(arcnd(j,na)+arcnd(j,nb))
331 arcnd(j,m1)=vv
332 END DO
333
334 END IF
335
340 DO j=1,3
341 vv = half*(acnd(j,na)+acnd(j,nb))
342 acnd(j,m2) =vv
343 END DO
344 DO j=1,3
345 vv = half*(arcnd(j,na)+arcnd(j,nb))
346 arcnd(j,m2)=vv
347 END DO
348
349 END IF
350
355 DO j=1,3
356 vv = half*(acnd(j,na)+acnd(j,nb))
357 acnd(j,m3) =vv
358 END DO
359 DO j=1,3
360 vv = half*(arcnd(j,na)+arcnd(j,nb))
361 arcnd(j,m3)=vv
362 END DO
363
364 END IF
365
366 END DO
367
369
370
371 END DO
372
373
374 IF(nodadt /= 0.OR.i7kglo/=0.AND.(idtmin(11)==3.OR.idtmin(11)==8))THEN
375 dt2p = dtmin1(11)/dtfac1(11)
376 DO n=nodft,nodlt
378 mas = half * stifn(n) * dt2p * dt2p * onep00001
379 mscnd(n)=
max(mscnd(n),mas)
380 END IF
381 END DO
382 END IF
383 IF(nodadt /= 0.AND.(idtmin(11)==3.OR.idtmin(11)==8))THEN
384 dt2p = dtmin1(11)/dtfac1(11)
385 DO n=nodft,nodlt
387 iner = half * stifr(n) * dt2p * dt2p * onep00001
388 incnd(n)=
max(incnd(n),iner)
389 END IF
390 END DO
391 END IF
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423 DO n=nodft,nodlt
425
426 fac=one/
max(mscnd(n),em20)
427 a(1,n) = ax(1,n)*fac+acnd(1,n)
428 a(2,n) = ax(2,n)*fac+acnd(2,n)
429 a(3,n) = ax(3,n)*fac+acnd(3,n)
430
431 fac=one/
max(incnd(n),em20)
432 ar(1,n) = arx(1,n)*fac+arcnd(1,n)
433 ar(2,n) = arx(2,n)*fac+arcnd(2,n)
434 ar(3,n) = arx(3,n)*fac+arcnd(3,n)
435
436 END IF
437 END DO
438
439 RETURN
integer, dimension(:), allocatable lsh4upl
integer, dimension(:), allocatable lsh3upl
integer, dimension(:), allocatable psh3upl
integer, dimension(:), allocatable psh4upl
integer, dimension(:), allocatable tagnod