45
46
47
50 USE elbufdef_mod
51 USE my_alloc_mod
52 use element_mod , only : nixc,nixtg
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "vect01_c.inc"
61#include "mvsiz_p.inc"
62#include "com01_c.inc"
63#include "com04_c.inc"
64#include "com_xfem1.inc"
65#include "param_c.inc"
66#include "task_c.inc"
67
68
69
70 INTEGER IFUNC,NBF,LEN,NBF_L, NBPART,NBF_CRKXFEMG
71 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),EL2FA(*),
72 . IADP(*),IADG(NSPMD,*),IPM(NPROPMI,*),INDX_CRK(*),
73 . IGEO(NPROPGI,*),EL2FA0(*),(*)
74
76 . mass(*),geo(npropg,*),
77 . ehour(*),anim(*),pm(npropm,*),thke(*),
78 . err_thk_sh4(*), err_thk_sh3(*)
79 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
80 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP,NXEL), TARGET :: XFEM_TAB
81 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
82
83
84
85
86 REAL,DIMENSION(:),ALLOCATABLE:: WAL
87 INTEGER,DIMENSION(:),ALLOCATABLE::MATLY
89 . evar(mvsiz),func(len),
90 . off, p, vonm2, vonm, s1, s2, s12, s3, VALUE,
91 . a1,b1,b2,b3,yeq,f1,m1,m2,m3, fac, dam1(mvsiz),dam2(mvsiz),
92 . wpla(mvsiz), dmax(mvsiz),wpmax(mvsiz),
93 . fail(mvsiz),thk0,thke0(mvsiz)
94 INTEGER I, NG, NEL, N, MLW, NUVAR,
95 . ISTRAIN,NN,K1,K2,MT,IMID,IPID,
96 . NN1,NN2,NN3,NN4,NN5,NN6,NF,
97 . OFFSET,K,II,KK,IHBE,I1,MPT,IPT,BUF,NUVARR,
98 . IPMAT,PID(MVSIZ),MAT(MVSIZ),
99 . IEXPAN,NEL_CRK,NLEVXF,NI,JTURB,
100 . NLAY,NPTT,IXEL,ILAY,IL,IUS,JJ(5)
101 INTEGER IXFEM, CRKS, ICRK, ILAYCRK, ELCRK, NPT0
102 INTEGER NELCRK(NCRKPART),IE(NCRKPART)
103 REAL R4
104
105
106 TYPE(G_BUFEL_) ,POINTER :: GBUF
107 TYPE(L_BUFEL_) ,POINTER :: LBUF
108
109 TYPE(G_BUFEL_) ,POINTER :: XGBUF
110 TYPE(L_BUFEL_) ,POINTER :: XLBUF
111
112 CALL my_alloc(wal,nbf_l)
113 CALL my_alloc(matly,mvsiz*100)
114 nel_crk = 0
115 func(1:len) = zero
116
117 DO crks = 1,ncrkpart
118 icrk = indx_crk(crks)
119 nelcrk(crks) = nel_crk
120 nel_crk = nel_crk +
crkshell(icrk)%CRKNUMSHELL
121 ie(icrk) = 0
122 ENDDO
123
124 nn1 = 1
125 nn3 = 1
126 nn4 = nn3 + numelq
127 nn5 = nn4 + numelc
128 nn6 = nn5 + numeltg
129
130 DO ng=1,ngroup
131
132 ixfem = iparg(54,ng)
133 IF (ixfem /= 1 .AND. ixfem /= 2) cycle
134
136 2 mlw ,nel ,nft ,iad ,ity ,
137 3 npt ,jale ,ismstr ,jeul ,jturb ,
138 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
139 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
140 6 irep ,iint ,igtyp ,israt ,isrot ,
141 7 icsen ,isorth ,isorthg ,ifailure,jsms)
142
143 IF (ity /= 3 .AND. ity /= 7) cycle
144 IF (mlw /= 13) THEN
145 DO offset = 0,nel-1,nvsiz
146 nft =iparg(3,ng) + offset
147 lft=1
148 llt=
min(nvsiz,nel-offset)
149 npt = iparg(6,ng)
150 ihbe = iparg(23,ng)
151 IF (ihbe == 11) cycle
152 nuvar = 0
153
154 DO i=1,5
155 jj(i) = nel*(i-1)
156 ENDDO
157
158
159
160
161 mpt = iabs(npt)
162 npt0 = npt
163
164
165 IF (ixfem == 1) npt = 1
166
167
168 gbuf => elbuf_tab(ng)%GBUF
169
170 IF (ity == 3) THEN
171 ni = nft
172 ELSE
173 ni = nft + numelc
174 ENDIF
175
176
177
178
179
180 DO ixel=1,nxel
181 xgbuf => xfem_tab(ng,ixel)%GBUF
182 nlay = xfem_tab(ng,ixel)%NLAY
183 DO ilay=1,nlay
184
185 icrk = nxel*(ilay-1) + ixel
186
187 IF (nlay > 1) THEN
188 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
189 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
190 ELSE
191 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ilay)
192 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
193 ENDIF
194 xgbuf => xfem_tab(ng,ixel)%GBUF
195
196
197
198 nuvar = 0
199
200 DO i=lft,llt
201 evar(i) = zero
202 ENDDO
203
204
205 IF (mlw == 0 .OR. mlw == 13) THEN
206 CONTINUE
207
208 ELSE IF (ifunc == 1) THEN
209 IF (nlay > 1) THEN
210
211 ipt = ilay
212 IF (elbuf_tab(ng)%BUFLY(ipt)%L_PLA > 0) THEN
213 lbuf => elbuf_tab(ng)%BUFLY(ipt)%LBUF(1,1,1)
214 xlbuf => xfem_tab(ng,ixel)%BUFLY(ipt)%LBUF(1,1,1)
215 DO i=lft,llt
216 n = i + ni
217 elcrk = iel_crk(n)
218 IF (elcrk > 0) THEN
219 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
220 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
221 evar(i) = abs(lbuf%PLA(i))
222 ELSE
223 evar(i) = abs(xlbuf%PLA(i))
224 ENDIF
225 ENDIF
226 ENDDO
227 ENDIF
228 ELSEIF (gbuf%G_PLA > 0 ) THEN
229 ipt =
max(1,int((1+npt)/2))
230 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ipt)
231 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ipt)
232 DO i=lft,llt
233 n = i + ni
234 elcrk = iel_crk(n)
235 IF (elcrk > 0) THEN
236 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
237 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
238 evar(i) = abs(lbuf%PLA(i))
239 ELSE
240 evar(i) = abs(xlbuf%PLA(i))
241 ENDIF
242 ENDIF
243 ENDDO
244 ENDIF
245 ELSEIF (ifunc == 3) THEN
246 IF (nlay > 1) THEN
247 DO i=lft,llt
248 n = i + ni
249 elcrk = iel_crk(n)
250 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
251 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
252 evar(i) = gbuf%EINT(i) + gbuf%EINT(i+llt)
253 ELSE
254 evar(i) = xlbuf%EINT(i) + xlbuf%EINT(i+llt)
255 ENDIF
256 ENDDO
257 ELSE
258 DO i=lft,llt
259 n = i + ni
260 elcrk = iel_crk(n)
261 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
262 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
263 evar(i) = gbuf%EINT(i) + gbuf%EINT(i+llt)
264 ELSE
265 evar(i) = xgbuf%EINT(i) + xgbuf%EINT(i+llt)
266 ENDIF
267 ENDDO
268 ENDIF
269 ELSEIF (ifunc == 5) THEN
270 IF (nlay > 1) THEN
271 DO i=lft,llt
272 evar(i) = xlbuf%THK(i)
273 ENDDO
274 ELSE
275 DO i=lft,llt
276 evar(i) = xgbuf%THK(i)
277 ENDDO
278 ENDIF
279 ELSEIF (ifunc == 7) THEN
280 IF (nlay > 1) THEN
281 DO i=lft,llt
282 n = i + ni
283 elcrk = iel_crk(n)
284 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
285 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
286 s1 = gbuf%FOR(jj(1)+i)
287 s2 = gbuf%FOR(jj(2)+i)
288 s12= gbuf%FOR(jj(3)+i)
289 ELSE
290 s1 = xlbuf%FOR(jj(1)+i)
291 s2 = xlbuf%FOR(jj(2)+i)
292 s12= xlbuf%FOR(jj(3)+i)
293 ENDIF
294 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
295 evar(i) = sqrt(vonm2)
296 ENDDO
297 ELSE
298 DO i=lft,llt
299 n = i + ni
300 elcrk = iel_crk(n)
301 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
302 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
303 s1 = gbuf%FOR(jj(1)+i)
304 s2 = gbuf%FOR(jj(2)+i)
305 s12= gbuf%FOR(jj(3)+i)
306 ELSE
307 s1 = xgbuf%FOR(jj(1)+i)
308 s2 = xgbuf%FOR(jj(2)+i)
309 s12= xgbuf%FOR(jj(3)+i)
310 ENDIF
311 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
312 evar(i) = sqrt(vonm2)
313 ENDDO
314 ENDIF
315
316 ELSEIF (ifunc >= 14 .AND. ifunc <= 15) THEN
317
318 ius = ifunc-13
319 IF (nlay > 1) THEN
320 DO i=lft,llt
321 n = i + ni
322 elcrk = iel_crk(n)
323 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
324 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
325 evar(i) = gbuf%FOR(jj(ius)+i)
326 ELSE
327 evar(i) = xlbuf%FOR(jj(ius)+i)
328 ENDIF
329 ENDDO
330 ELSE
331 DO i=lft,llt
332 n = i + ni
333 elcrk = iel_crk(n)
334 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
335 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
336 evar(i) = gbuf%FOR(jj(ius)+i)
337 ELSE
338 evar(i) = xgbuf%FOR(jj(ius)+i)
339 ENDIF
340 ENDDO
341 ENDIF
342
343 ELSEIF (ifunc >= 17 .AND. ifunc <= 19) THEN
344
345 ius = ifunc-14
346 IF (nlay > 1) THEN
347 DO i=lft,llt
348 n = i + ni
349 elcrk = iel_crk(n)
350 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
351 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
352 evar(i) = gbuf%FOR(jj(ius)+i)
353 ELSE
354 evar(i) = xgbuf%FOR(jj(ius)+i)
355 ENDIF
356 ENDDO
357 ELSE
358 DO i=lft,llt
359 n = i + ni
360 elcrk = iel_crk(n)
361 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
362 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
363 evar(i) = gbuf%FOR(jj(ius)+i)
364 ELSE
365 evar(i) = xgbuf%FOR(jj(ius)+i)
366 ENDIF
367 ENDDO
368 ENDIF
369
370 ELSEIF (ifunc == 26 .and. gbuf%G_EPSD > 0) THEN
371 IF (nlay > 1) THEN
372 DO i=lft,llt
373 n = i + ni
374 elcrk = iel_crk(n)
375 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
376 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
377 evar(i) = gbuf%EPSD(i)
378 ELSE
379 evar(i) = xlbuf%EPSD(i)
380 ENDIF
381 ENDDO
382 ELSE
383 DO i=lft,llt
384 n = i + ni
385 elcrk = iel_crk(n)
386 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
387 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
388 evar(i) = gbuf%EPSD(i)
389 ELSE
390 evar(i) = xgbuf%EPSD(i)
391 ENDIF
392 ENDDO
393 ENDIF
394
395 ELSEIF (ifunc == 2155) THEN
396
397 IF (ity == 3) THEN
398 DO i=lft,llt
399 pid(i) = ixc(6,nft+1)
400 ENDDO
401 ELSEIF (ity == 7) THEN
402 DO i=lft,llt
403 pid(i) = ixtg(5,nft+1)
404 ENDDO
405 ENDIF
406
407 DO i=lft,llt
408 n = i + ni
409 thke0(i) = thke(n) * geo(300+ilay,pid(i))
410 ENDDO
411
412 IF (nlay > 1) THEN
413 DO i=lft,llt
414 n = i + ni
415 elcrk = iel_crk(n)
416 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
417 thk0 = thke0(i)
418 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
419
420 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
421 ELSE
422 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
423 ENDIF
424 ENDDO
425 ELSE
426 DO i=lft,llt
427 n = i + ni
428 elcrk = iel_crk(n)
429 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
430 thk0 = thke(n)
431 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
432 evar(i) = hundred *(thk0 - gbuf%THK(i))/thk0
433 ELSE
434 evar(i) = hundred *(thk0 - xgbuf%THK(i))/thk0
435 ENDIF
436 ENDDO
437 ENDIF
438
439 ELSEIF (ifunc == 2040) THEN
440 IF (nlay > 1) THEN
442 ipt = 1
443 ELSE
444 il = 1
446 ENDIF
447
448 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0) THEN
449 IF (nlay > 1) THEN
450 DO i=lft,llt
451 n = i + ni
452 elcrk = iel_crk(n)
453 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
454 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
455 evar(i) = abs(
456 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
457 ELSE
458 evar(i) = abs(
459 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i)
460 ENDIF
461 ENDDO
462 ELSE
463 DO i=lft,llt
464 n = i + ni
465 elcrk = iel_crk(n)
466 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
467 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
468 evar(i) = abs(
469 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
470 ELSE
471 evar(i) = abs(
472 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
473 ENDIF
474 ENDDO
475 ENDIF
476 ELSE
477 DO i=lft,llt
478 evar(i) = zero
479 ENDDO
480 ENDIF
481
482 ELSEIF (ifunc == 2041) THEN
483
484 IF (nlay > 1) THEN
486 ipt = 1
487 ELSE
488 il = 1
490 ENDIF
491 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0) THEN
492 il = 1
493 IF (nlay > 1) il = ilay
494 DO i=lft,llt
495 n = i + ni
496 elcrk = iel_crk(n)
497 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
498 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
499 evar(i) = abs(
500 . elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)%PLA(i))
501 ELSE
502 evar(i) = abs(
503 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,1)%PLA(i))
504 ENDIF
505 ENDDO
506 ELSE
507 DO i=lft,llt
508 evar(i) = zero
509 ENDDO
510 ENDIF
511
512 ELSEIF (ifunc >= 2042 .AND. ifunc <= 2141) THEN
513
514 IF (npt == 0) THEN
515 il = 1
516 ipt = 1
517 ELSEIF (nlay > 1) THEN
518 il = mod((ifunc - 2041), 100)
519 ipt = 1
520 IF (il == 0) il = 100
521 ELSE
522 il = 1
523 ipt = mod((ifunc - 2041), 100)
524 IF (ipt == 0) ipt = 100
525 ENDIF
526 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0) THEN
527 IF (nlay > 1) THEN
528 DO i=lft,llt
529 n = i + ni
530 elcrk = iel_crk(n)
531 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
532 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
533 evar(i) = abs(
534 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
535 ELSE
536 evar(i) = abs(
537 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i))
538 ENDIF
539 ENDDO
540 ELSE
541 DO i=lft,llt
542 n = i + ni
543 elcrk = iel_crk(n)
544 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
545 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
546 evar(i) = abs(
547 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
548 ELSE
549 evar(i) = abs(
550 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
551 ENDIF
552 ENDDO
553 ENDIF
554 ELSE
555 DO i=lft,llt
556 evar(i) = zero
557 ENDDO
558 ENDIF
559 ENDIF
560
561 IF(mlw == 0 .OR. mlw == 13)THEN
562 DO i=lft,llt
563 n = i + ni
564 IF(iel_crk(n) > 0) THEN
565 ie(icrk) = ie(icrk) + 1
566 func(el2fa(nelcrk(icrk) + ie(icrk))) = zero
567 ENDIF
568 ENDDO
569
570 ELSEIF (ifunc == 3) THEN
571
572
573 IF (ity == 3) THEN
574 DO i=lft,llt
575 n = i + ni
576 IF (iel_crk(n) > 0) THEN
577 ie(icrk) = ie(icrk) + 1
578 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)/
579 .
max(em30,mass(el2fa0(nn4+i+nft)))
580 ENDIF
581 ENDDO
582 ELSEIF (ity == 7) THEN
583 DO i=lft,llt
584 n = i + ni
585 IF (iel_crk(n) > 0) THEN
586 ie(icrk) = ie(icrk) + 1
587 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)/
588 .
max(em30,mass(el2fa0(nn5+i+nft)))
589 ENDIF
590 ENDDO
591 ENDIF
592
593 ELSEIF (ifunc == 25 .AND. ity == 3) THEN
594
595
596 DO i=lft,llt
597 n = i + nft
598 IF (iel_crk(n) > 0) THEN
599 ie(icrk) = ie(icrk) + 1
600 func(el2fa(nelcrk(icrk) + ie(icrk))) = ehour(n+numels)/
601 .
max(em30,mass(el2fa0(nn4+n)))
602 ENDIF
603 ENDDO
604
605 ELSE
606
607
608 DO i=lft,llt
609 n = i + ni
610 IF (iel_crk(n) > 0) THEN
611 ie(icrk) = ie(icrk) + 1
612 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)
613 ENDIF
614 ENDDO
615 ENDIF
616
617
618
619 ENDDO
620 ENDDO
621 ENDDO
622 ENDIF
623 ENDDO
624
625 DO crks = 1,ncrkpart
626 icrk = indx_crk(crks)
627
628 nel_crk = nelcrk(icrk)
629
630 IF (nspmd == 1) THEN
631 DO i=1,ie(icrk)
632 n = el2fa(nel_crk + i)
633 r4 = func(n)
635 ENDDO
636 ELSE
637 DO i=1,ie(icrk)
638 n = el2fa(nel_crk + i)
639 wal(i+nel_crk) = func(n)
640 ENDDO
641 ENDIF
642 ENDDO
643
644 IF (nspmd > 1 ) THEN
645 IF (ispmd == 0) THEN
646 buf = nbf_crkxfemg
647 ELSE
648 buf=1
649 ENDIF
651 ENDIF
652
653 DEALLOCATE(matly)
654 DEALLOCATE(wal)
655 RETURN
type(xfem_shell_), dimension(:), allocatable crkshell
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine spmd_r4get_partn(size, nbf_l, nbpart, iadg, wal, buf)
void write_r_c(float *w, int *len)