37
38
39
41
42
43
44#include "implicit_f.inc"
45#include "comlock.inc"
46
47
48
49#include "scr17_c.inc"
50#include "com04_c.inc"
51#include "param_c.inc"
52#include "remesh_c.inc"
53#include "scr02_c.inc"
54#include "scr18_c.inc"
55#include "task_c.inc"
56
57
58
59 INTEGER IXC(NIXC,*), IPARTC(*), IXTG(NIXTG,*), IPARTTG(*),
60 . IPART(LIPART1,*), ITASK, NODFT, NODLT,SH4TREE(KSH4TREE,*),
61 . SH3TREE(KSH3TREE,*), ITAB(*)
63 . a(3,*),v(3,*),
64 . ar(3,*),vr(3,*), ms(*), in(*), x(3,*),
65 . stifn(*), stifr(*), mscnd(*), incnd(*)
66
67
68
69 INTEGER SH4FT, SH4LT, SH3FT, SH3LT
70 INTEGER N, NN, LEVEL, IP, NLEV, LL, IERR
71 INTEGER SON,M1,M2,M3,M4,MC,N1,N2,N3,N4,J,NA,NB
73 . vv, ax(3,numnod), arx(3,numnod), fac,
74 . dt2p, mas, iner, dtn
75
76
77
79
80
81 ax(1:3,nodft:nodlt)=acnd(1:3,nodft:nodlt)
82 arx(1:3,nodft:nodlt)=arcnd(1:3,nodft:nodlt)
83
85
87 sh4ft = 1+itask*ll/ nthread
88 sh4lt = (itask+1)*ll/nthread
89
90 DO nn=sh4ft,sh4lt
92
93 n1=ixc(2,n)
94 n2=ixc(3,n)
95 n3=ixc(4,n)
96 n4=ixc(5,n)
97
100 DO j=1,3
101 acnd(j,n1) =a(j,n1)
102 END DO
103 DO j=1,3
104 arcnd(j,n1) =ar(j,n1)
105 END DO
106 END IF
107
110 DO j=1,3
111 acnd(j,n2) =a(j,n2)
112 END DO
113 DO j=1,3
114 arcnd(j,n2) =ar(j,n2)
115 END DO
116 END IF
117
120 DO j=1,3
121 acnd(j,n3) =a(j,n3)
122 END DO
123 DO j=1,3
124 arcnd(j,n3) =ar(j,n3)
125 END DO
126 END IF
127
130 DO j=1,3
131 acnd(j,n4) =a(j,n4)
132 END DO
133 DO j=1,3
134 arcnd(j,n4) =ar(j,n4)
135 END DO
136 END IF
137
138 END DO
139
141 sh3ft = 1+itask*ll/ nthread
142 sh3lt = (itask+1)*ll/nthread
143
144 DO nn=sh3ft,sh3lt
146
147 n1=ixtg(2,n)
148 n2=ixtg(3,n)
149 n3=ixtg(4,n)
150
153 DO j=1,3
154 acnd(j,n1) =a(j,n1)
155 END DO
156 DO j=1,3
157 arcnd(j,n1) =ar(j,n1)
158 END DO
159 END IF
160
163 DO j=1,3
164 acnd(j,n2) =a(j,n2)
165 END DO
166 DO j=1,3
167 arcnd(j,n2) =ar(j,n2)
168 END DO
169 END IF
170
173 DO j=1,3
174 acnd(j,n3) =a(j,n3)
175 END DO
176 DO j=1,3
177 arcnd(j,n3) =ar(j,n3)
178 END DO
179 END IF
180
181 END DO
182
184
186
188
189
190
191 DO level=0,levelmax-1
192
194 sh4ft =
psh4upl(level)+ 1+itask*ll/ nthread
195 sh4lt =
psh4upl(level)+ (itask+1)*ll/nthread
196
197 DO nn=sh4ft,sh4lt
199
200 n1=ixc(2,n)
201 n2=ixc(3,n)
202 n3=ixc(4,n)
203 n4=ixc(5,n)
204
205 son=sh4tree(2,n)
206
207 mc=ixc(3,son+3)
208
210
212 DO j=1,3
213 vv =
214 . fourth*(acnd(j,n1)+acnd(j,n2)+acnd(j,n3)+acnd(j,n4))
215 acnd(j,mc) =vv
216 END DO
217
218 DO j=1,3
219 vv =
220 . fourth*(arcnd(j,n1)+arcnd(j,n2)+arcnd(j,n3)+arcnd(j,n4))
221 arcnd(j,mc)=vv
222 END DO
223
224 END IF
225
226 m1=ixc(3,son )
227 m2=ixc(4,son+1)
228 m3=ixc(5,son+2)
229 m4=ixc(2,son+3)
230
235
236 DO j=1,3
237 vv = half*(acnd(j,na)+acnd(j,nb))
238 acnd(j,m1) =vv
239 END DO
240
241 DO j=1,3
242 vv = half*(arcnd(j,na)+arcnd(j,nb))
243 arcnd(j,m1)=vv
244 END DO
245
246 END IF
247
252
253 DO j=1,3
254 vv = half*(acnd(j,na)+acnd(j,nb))
255 acnd(j,m2) =vv
256 END DO
257
258 DO j=1,3
259 vv = half*(arcnd(j,na)+arcnd(j,nb))
260 arcnd(j,m2)=vv
261 END DO
262
263 END IF
264
269
270 DO j=1,3
271 vv = half*(acnd(j,na)+acnd(j,nb))
272 acnd(j,m3) =vv
273 END DO
274
275 DO j=1,3
276 vv = half*(arcnd(j,na)+arcnd(j,nb))
277 arcnd(j,m3)=vv
278 END DO
279
280 END IF
281
286
287 DO j=1,3
288 vv = half*(acnd(j,na)+acnd(j,nb))
289 acnd(j,m4) =vv
290 END DO
291
292 DO j=1,3
293 vv = half*(arcnd(j,na)+arcnd(j,nb))
294 arcnd(j,m4)=vv
295 END DO
296
297 END IF
298
299 END DO
300
302 sh3ft =
psh3upl(level)+ 1+itask*ll/ nthread
303 sh3lt =
psh3upl(level)+ (itask+1)*ll/nthread
304
305 DO nn=sh3ft,sh3lt
307
308 n1=ixtg(2,n)
309 n2=ixtg(3,n)
310 n3=ixtg(4,n)
311
312 son=sh3tree(2,n)
313
314 m1=ixtg(4,son+3)
315 m2=ixtg(2,son+3)
316 m3=ixtg(3,son+3)
317
322
323 DO j=1,3
324 vv = half*(acnd(j,na)+acnd(j,nb))
325 acnd(j,m1) =vv
326 END DO
327 DO j=1,3
328 vv = half*(arcnd(j,na)+arcnd(j,nb))
329 arcnd(j,m1)=vv
330 END DO
331
332 END IF
333
338 DO j=1,3
339 vv = half*(acnd(j,na)+acnd(j,nb))
340 acnd(j,m2) =vv
341 END DO
342 DO j=1,3
343 vv = half*(arcnd(j,na)+arcnd(j,nb))
344 arcnd(j,m2)=vv
345 END DO
346
347 END IF
348
353 DO j=1,3
354 vv = half*(acnd(j,na)+acnd(j,nb))
355 acnd(j,m3) =vv
356 END DO
357 DO j=1,3
358 vv = half*(arcnd(j,na)+arcnd(j,nb))
359 arcnd(j,m3)=vv
360 END DO
361
362 END IF
363
364 END DO
365
367
368
369 END DO
370
371
372 IF(nodadt /= 0.OR.i7kglo/=0.AND.(idtmin(11)==3.OR.idtmin(11)==8))THEN
373 dt2p = dtmin1(11)/dtfac1(11)
374 DO n=nodft,nodlt
376 mas = half * stifn(n) * dt2p * dt2p * onep00001
377 mscnd(n)=
max(mscnd(n),mas)
378 END IF
379 END DO
380 END IF
381 IF(nodadt /= 0.AND.(idtmin(11)==3.OR.idtmin(11)==8))THEN
382 dt2p = dtmin1(11)/dtfac1(11)
383 DO n=nodft,nodlt
385 iner = half * stifr(n) * dt2p * dt2p * onep00001
386 incnd(n)=
max(incnd(n),iner)
387 END IF
388 END DO
389 END IF
390
391
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 DO n=nodft,nodlt
423
424 fac=one/
max(mscnd(n),em20)
425 a(1,n) = ax(1,n)*fac+acnd(1,n)
426 a(2,n) = ax(2,n)*fac+acnd(2,n)
427 a(3,n) = ax(3,n)*fac+acnd(3,n)
428
429 fac=one/
max(incnd(n),em20)
430 ar(1,n) = arx(1,n)*fac+arcnd(1,n)
431 ar(2,n) = arx(2,n)*fac+arcnd(2,n)
432 ar(3,n) = arx(3,n)*fac+arcnd(3,n)
433
434 END IF
435 END DO
436
437 RETURN
integer, dimension(:), allocatable lsh4upl
integer, dimension(:), allocatable lsh3upl
integer, dimension(:), allocatable psh3upl
integer, dimension(:), allocatable psh4upl
integer, dimension(:), allocatable tagnod