41
42
43
45 USE elbufdef_mod
46 use element_mod , only : nixc,nixtg
47
48
49
50#include "implicit_f.inc"
51#include "comlock.inc"
52
53
54
55#include "com01_c.inc"
56#include "param_c.inc"
57#include "remesh_c.inc"
58#include "vect01_c.inc"
59#include "scr17_c.inc"
60
61
62
63
64 INTEGER
65 . IXC(NIXC,*), IXTG(NIXTG,*), IPARG(NPARG,*),
66 . IPART(LIPART1,*), IPARTC(*), IPARTTG(*),
67 . IAD_ELEM(2,*), FR_ELEM(*), WEIGHT(*),
68 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*)
70 . x(3,*), area_sh4(*), area_sh3(*), area_nod(*),
71 . thick_sh4(*), thick_sh3(*), thick_nod(*),
72 . err_thk_sh4(*), err_thk_sh3(*)
73 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
74
75
76
77 INTEGER N1,N2,N3,N4,
78 . I,N,NG,NEL,LENR,
79 . NN,LEVEL,MY_LEVEL,M,SON,LL,M1,,M3,M4,MC
80
83 . x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,
84 . x31,y31,z31,x42,y42,z42,x32,y32,z32,e3x,e3y,e3z
86 . tn1,tn2,tn3,tn4,tpg1,tpg2,tpg3,tpg4,unt
87 TYPE(G_BUFEL_) ,POINTER :: GBUF
88
89
90
91 DO level=0,levelmax-1
92
94
96
97 IF(sh4tree(3,n)>=0)THEN
98
99 ng =sh4tree(4,n)
100 nel =iparg(2,ng)
101 nft =iparg(3,ng)
102 lft=1
104 gbuf => elbuf_tab(ng)%GBUF
105
106 i=n-nft
107 IF (gbuf%OFF(i) == zero) THEN
108 thk=zero
109 ELSE
110 thk = gbuf%THK(i)
111 END IF
112 thick_sh4(n)=thk
113
114 END IF
115
116 thk = thick_sh4(n)
117 son = sh4tree(2,n)
118 thick_sh4(son) =thk
119 thick_sh4(son+1)=thk
120 thick_sh4(son+2)=thk
121 thick_sh4(son+3)=thk
122 END DO
123
124 END DO
125
126 level=levelmax
128
130
131 IF(sh4tree(3,n)>=0)THEN
132
133 ng =sh4tree(4,n)
134 nel =iparg(2,ng)
135 nft =iparg(3,ng)
136 lft=1
138 gbuf => elbuf_tab(ng)%GBUF
139 i=n-nft
140
141 IF (gbuf%OFF(i) == zero) THEN
142 thk=zero
143 ELSE
144 thk=gbuf%THK(i)
145 END IF
146 thick_sh4(n)=thk
147
148 END IF
149
150 END DO
151
152 DO level=0,levelmax-1
153
155
157
158 IF(sh3tree(3,n)>=0)THEN
159
160 ng =sh3tree(4,n)
161 nel =iparg(2,ng)
162 nft =iparg(3,ng)
163 lft=1
165 gbuf => elbuf_tab(ng)%GBUF
166 i=n-nft
167
168 IF (gbuf%OFF(i) == zero) THEN
169 thk=zero
170 ELSE
171 thk=gbuf%THK(i)
172 END IF
173 thick_sh3(n)=thk
174
175 END IF
176
177 thk = thick_sh3(n)
178 son = sh3tree(2,n)
179 thick_sh3(son) =thk
180 thick_sh3(son+1)=thk
181 thick_sh3(son+2)=thk
182 thick_sh3(son+3)=thk
183 END DO
184 END DO
185
186 level=levelmax
188
190
191 IF(sh3tree(3,n)>=0)THEN
192
193 ng =sh3tree(4,n)
194 nel =iparg(2,ng)
195 nft =iparg(3,ng)
196 lft=1
198 gbuf => elbuf_tab(ng)%GBUF
199
200 i=n-nft
201 IF (gbuf%OFF(i) == zero) THEN
202 thk=zero
203 ELSE
204 thk=gbuf%THK(i)
205 END IF
206 thick_sh3(n)=thk
207
208 END IF
209
210 END DO
211
212
213
214 level=levelmax
216
218
219 ng =sh4tree(4,n)
220 nel =iparg(2,ng)
221 nft =iparg(3,ng)
222 lft=1
224 gbuf => elbuf_tab(ng)%GBUF
225
226 i=n-nft
227 IF (gbuf%OFF(i) == zero) cycle
228
229 n1=ixc(2,n)
230 n2=ixc(3,n)
231 n3=ixc(4,n)
232 n4=ixc(5,n)
233
234 x1=x(1,n1)
235 y1=x(2,n1)
236 z1=x(3,n1)
237 x2=x(1,n2)
238 y2=x(2,n2)
239 z2=x(3,n2)
240 x3=x(1,n3)
241 y3=x(2,n3)
242 z3=x(3,n3)
243 x4=x(1,n4)
244 y4=x(2,n4)
245 z4=x(3,n4)
246
247 x31=x3-x1
248 y31=y3-y1
249 z31=z3-z1
250 x42=x4-x2
251 y42=y4-y2
252 z42=z4-z2
253
254 e3x=y31*z42-z31*y42
255 e3y=z31*x42-x31*z42
256 e3z=x31*y42-y31*x42
257
258 e3x=one_over_8*e3x
259 e3y=one_over_8*e3y
260 e3z=one_over_8*e3z
261
262 area=sqrt(e3x*e3x+e3y*e3y+e3z*e3z)
264 at =
area * thick_sh4(n)
265
266 area_nod(n1)=area_nod(n1)+
area
267 area_nod(n2)=area_nod(n2)+
area
268 area_nod(n3)=area_nod(n3)+
area
269 area_nod(n4)=area_nod(n4)+
area
270 thick_nod(n1)=thick_nod(n1)+at
271 thick_nod(n2)=thick_nod(n2)+at
272 thick_nod(n3)=thick_nod(n3)+at
273 thick_nod(n4)=thick_nod(n4)+at
274
275 END DO
276
277 level=levelmax
279
281
282 ng =sh3tree(4,n)
283 nel =iparg(2,ng)
284 nft =iparg(3,ng)
285 lft=1
287 gbuf => elbuf_tab(ng)%GBUF
288
289 i=n-nft
290 IF (gbuf%OFF(i) == zero) cycle
291
292 n1=ixtg(2,n)
293 n2=ixtg(3,n)
294 n3=ixtg(4,n)
295 x1=x(1,n1)
296 y1=x(2,n1)
297 z1=x(3,n1)
298 x2=x(1,n2)
299 y2=x(2,n2)
300 z2=x(3,n2)
301 x3=x(1,n3)
302 y3=x(2,n3)
303 z3=x(3,n3)
304 x31=x3-x1
305 y31=y3-y1
306 z31=z3-z1
307 x32=x3-x2
308 y32=y3-y2
309 z32=z3-z2
310
311 e3x=y31*z32-z31*y32
312 e3y=z31*x32-x31*z32
313 e3z=x31*y32-y31*x32
314 e3x=one_over_6*e3x
315 e3y=one_over_6*e3y
316 e3z=one_over_6*e3z
317
318 area=sqrt(e3x*e3x+e3y*e3y+e3z*e3z)
320 at=
area * thick_sh3(n)
321
322 area_nod(n1)=area_nod(n1)+
area
323 area_nod(n2)=area_nod(n2)+
area
324 area_nod(n3)=area_nod(n3)+
area
325 thick_nod(n1)=thick_nod(n1)+at
326 thick_nod(n2)=thick_nod(n2)+at
327 thick_nod(n3)=thick_nod(n3)+at
328
329 END DO
330
331
332
334
336
337 IF(sh4tree(3,n) >= 0)THEN
338
339 n1=ixc(2,n)
340 n2=ixc(3,n)
341 n3=ixc(4,n)
342 n4=ixc(5,n)
343
344 unt=one/thick_sh4(n)
345 tn1=abs(thick_nod(n1)/
max(em30,area_nod(n1))*unt-one)
346 tn2=abs(thick_nod(n2)/
max(em30,area_nod(n2))*unt-one)
347 tn3=abs(thick_nod(n3)/
max(em30,area_nod(n3))*unt-one)
348 tn4=abs(thick_nod(n4)/
max(em30,area_nod(n4))*unt-one)
349 err_thk_sh4(n)=fourth*(tn1+tn2+tn3+tn4)
350 END IF
351
352 END DO
353
355
357
358 IF(sh3tree(3,n) >= 0)THEN
359
360 n1=ixtg(2,n)
361 n2=ixtg(3,n)
362 n3=ixtg(4,n)
363
364 unt=one/thick_sh3(n)
365 tn1=abs(thick_nod(n1)/
max(em30,area_nod(n1))*unt-one)
366 tn2=abs(thick_nod(n2)/
max(em30,area_nod(n2))*unt-one)
367 tn3=abs(thick_nod(n3)/
max(em30,area_nod(n3))*unt-one)
368 err_thk_sh3(n)=third*(tn1+tn2+tn3)
369 END IF
370
371 END DO
372
373
374
376 DO level=levelmax-1,0,-1
377
380
381 son=sh4tree(2,n)
382
383 n1=ixc(2,n)
384 n2=ixc(3,n)
385 n3=ixc(4,n)
386 n4=ixc(5,n)
387
388 mc=ixc(4,son)
389
390 area=fourth*area_nod(mc)
391 at =fourth*thick_nod(mc)
392
393 area_nod(n1) =area_nod(n1)+
area
394 area_nod(n2) =area_nod(n2)+
area
395 area_nod(n3) =area_nod(n3)+
area
396 area_nod(n4) =area_nod(n4)+
area
397 thick_nod(n1)=thick_nod(n1)+at
398 thick_nod(n2)=thick_nod(n2)+at
399 thick_nod(n3)=thick_nod(n3)+at
400 thick_nod(n4)=thick_nod(n4)+at
401
403
404
405 m1=ixc(3,son )
407
409
410 area=half*area_nod(m1)
411 at =half*thick_nod(m1)
412
413 area_nod(n1) =area_nod(n1)+
area
414 area_nod(n2) =area_nod(n2)+
area
415 thick_nod(n1)=thick_nod(n1)+at
416 thick_nod(n2)=thick_nod(n2)+at
417
418 END IF
419
420 m2=ixc(4,son+1)
422
424
425 area=half*area_nod(m2)
426 at =half*thick_nod(m2)
427
428 area_nod(n2) =area_nod(n2)+
area
429 area_nod(n3) =area_nod(n3)+
area
430 thick_nod(n2)=thick_nod(n2)+at
431 thick_nod(n3)=thick_nod(n3)+at
432
433 END IF
434
435 m3=ixc(5,son+2)
437
439
440 area=half*area_nod(m3)
441 at =half*thick_nod(m3)
442
443 area_nod(n3) =area_nod(n3)+
area
444 area_nod(n4) =area_nod(n4)+
area
445 thick_nod(n3)=thick_nod(n3)+at
446 thick_nod(n4)=thick_nod(n4)+at
447
448 END IF
449
450 m4=ixc(2,son+3)
452
454
455 area=half*area_nod(m4)
456 at =half*thick_nod(m4)
457
458 area_nod(n4) =area_nod(n4)+
area
459 area_nod(n1) =area_nod(n1)+
area
460 thick_nod(n4)=thick_nod(n4)+at
461 thick_nod(n1)=thick_nod(n1)+at
462
463 END IF
464
465 END DO
466
469
470 son=sh3tree(2,n)
471
472 n1=ixtg(2,n)
473 n2=ixtg(3,n)
474 n3=ixtg(4,n)
475
476 m1=ixtg(4,son+3)
478
480
481 area=half*area_nod(m1)
482 at =half*thick_nod(m1)
483
484 area_nod(n1) =area_nod(n1)+
area
485 area_nod(n2) =area_nod(n2)+
area
486 thick_nod(n1)=thick_nod(n1)+at
487 thick_nod(n2)=thick_nod(n2)+at
488
489 END IF
490
491 m2=ixtg(2,son+3)
494
495 area=half*area_nod(m2)
496 at =half*thick_nod(m2)
497
498 area_nod(n2) =area_nod(n2)+
area
499 area_nod(n3) =area_nod(n3)+
area
500 thick_nod(n2)=thick_nod(n2)+at
501 thick_nod(n3)=thick_nod(n3)+at
502
503 END IF
504
505 m3=ixtg(3,son+3)
508
509 area=half*area_nod(m3)
510 at =half*thick_nod(m3)
511
512 area_nod(n3) =area_nod(n3)+
area
513 area_nod(n1) =area_nod(n1)+
area
514 thick_nod(n3)=thick_nod(n3)+at
515 thick_nod(n1)=thick_nod(n1)+at
516
517 END IF
518
519 END DO
520
523
524 IF(sh4tree(3,n) >= 0)THEN
525
526 n1=ixc(2,n)
527 n2=ixc(3,n)
528 n3=ixc(4,n)
529 n4=ixc(5,n)
530
531 unt=one/thick_sh4(n)
532 tn1=abs(thick_nod(n1)/
max(em30,area_nod(n1))*unt-one)
533 tn2=abs(thick_nod(n2)/
max(em30,area_nod(n2))*unt-one)
534 tn3=abs(thick_nod(n3)/
max(em30,area_nod(n3))*unt-one)
535 tn4=abs(thick_nod(n4)/
max(em30,area_nod(n4))*unt-one)
536 err_thk_sh4(n)=fourth*(tn1+tn2+tn3+tn4)
537 END IF
538 END DO
539
542
543 IF(sh3tree(3,n) >= 0)THEN
544
545 n1=ixtg(2,n)
546 n2=ixtg(3,n)
547 n3=ixtg(4,n)
548
549 unt=one/thick_sh3(n)
550 tn1=abs(thick_nod(n1)/
max(em30,area_nod(n1))*unt-one)
551 tn2=abs(thick_nod(n2)/
max(em30,area_nod(n2))*unt-one)
552 tn3=abs(thick_nod(n3)/
max(em30,area_nod(n3))*unt-one)
553 err_thk_sh3(n)=third*(tn1+tn2+tn3)
554 END IF
555 END DO
556
557 END DO
558
559 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
562
563 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
integer, dimension(:), allocatable lsh4kin
integer, dimension(:), allocatable lsh3kin
integer, dimension(:), allocatable psh4kin
integer, dimension(:), allocatable psh3kin
integer, dimension(:), allocatable tagnod
subroutine spmd_exch_nodarea(nodarea, iad_elem, fr_elem, lenr, weight)