39 . ELBUF_TAB ,LEN , IFUNC ,IPARG ,GEO ,
40 . IXC ,IXTG , MASS ,PM ,EL2FA ,
41 . NBF ,IADP , NBF_L ,EHOUR ,ANIM ,
42 . NBPART ,IADG , IPM ,IGEO ,THKE ,
43 . ERR_THK_SH4 ,ERR_THK_SH3,XFEM_TAB,IEL_CRK,INDX_CRK,
44 . NBF_CRKXFEMG,EL2FA0 ,CRKEDGE )
52 use element_mod ,
only : nixc,nixtg
56#include "implicit_f.inc"
60#include "vect01_c.inc"
64#include "com_xfem1.inc"
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(*),IEL_CRK(*)
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
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,,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)
106 TYPE(G_BUFEL_) ,
POINTER :: GBUF
107 TYPE(l_bufel_) ,
POINTER :: LBUF
109 TYPE(g_bufel_) ,
POINTER :: XGBUF
110 TYPE(L_BUFEL_) ,
POINTER :: XLBUF
112 CALL my_alloc(wal,nbf_l)
113 CALL my_alloc(matly,mvsiz*100)
118 icrk = indx_crk(crks)
119 nelcrk(crks) = nel_crk
120 nel_crk = nel_crk +
crkshell(icrk)%CRKNUMSHELL
133 IF (ixfem /= 1 .AND. ixfem /= 2) cycle
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)
143 IF (ity /= 3 .AND. ity /= 7) cycle
145 DO offset = 0,nel-1,nvsiz
146 nft =iparg(3,ng) + offset
148 llt=
min(nvsiz,nel-offset)
151 IF (ihbe == 11) cycle
165 IF (ixfem == 1) npt = 1
168 gbuf => elbuf_tab(ng)%GBUF
181 xgbuf => xfem_tab(ng,ixel)%GBUF
182 nlay = xfem_tab(ng,ixel)%NLAY
185 icrk = nxel*(ilay-1) + ixel
188 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
189 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
191 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ilay)
192 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
194 xgbuf => xfem_tab(ng,ixel)%GBUF
205 IF (mlw == 0 .OR. mlw == 13)
THEN
208 ELSE IF (ifunc == 1)
THEN
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)
219 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
220 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
221 evar(i) = abs(lbuf%PLA(i))
223 evar(i) = abs(xlbuf%PLA(i))
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)
236 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
237 IF (ilaycrk == 0 .OR. abs
THEN
238 evar(i) = abs(lbuf%PLA(i))
240 evar(i) = abs(xlbuf%PLA(i))
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)
254 evar(i) = xlbuf%EINT(i) + xlbuf%EINT(i+llt)
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)
265 evar(i) = xgbuf%EINT(i) + xgbuf%EINT(i+llt)
269 ELSEIF (ifunc == 5)
THEN
272 evar(i) = xlbuf%THK(i)
276 evar(i) = xgbuf%THK(i)
279 ELSEIF (ifunc == 7)
THEN
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)
290 s1 = xlbuf%FOR(jj(1)+i)
291 s2 = xlbuf%FOR(jj(2)+i)
292 s12= xlbuf%FOR(jj(3)+i)
294 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
295 evar(i) = sqrt(vonm2)
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)
307 s1 = xgbuf%FOR(jj(1)+i)
308 s2 = xgbuf%FOR(jj(2)+i)
309 s12= xgbuf%FOR(jj(3)+i)
311 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
312 evar(i) = sqrt(vonm2)
316 ELSEIF (ifunc >= 14 .AND. ifunc <= 15)
THEN
323 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
324 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
325 evar(i) = gbuf%FOR(jj(ius)+i)
327 evar(i) = xlbuf%FOR(jj(ius)+i)
334 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
335 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
336 evar(i) = gbuf%FOR(jj(ius)+i)
338 evar(i) = xgbuf%FOR(jj(ius)+i)
343 ELSEIF (ifunc >= 17 .AND. ifunc <= 19)
THEN
350 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
351 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
352 evar(i) = gbuf%FOR(jj(ius)+i)
354 evar(i) = xgbuf%FOR(jj(ius)+i)
361 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
362 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
363 evar(i) = gbuf%FOR(jj(ius)+i)
365 evar(i) = xgbuf%FOR(jj(ius)+i)
370 ELSEIF (ifunc == 26 .and. gbuf%G_EPSD > 0)
THEN
371 IF (nlay > 1)
THEN ! multi
376 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
377 evar(i) = gbuf%EPSD(i)
379 evar(i) = xlbuf%EPSD(i)
386 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
387 IF (ilaycrk == 0 .OR. abs
THEN
388 evar(i) = gbuf%EPSD(i)
390 evar(i) = xgbuf%EPSD(i)
395 ELSEIF (ifunc == 2155)
THEN
399 pid(i) = ixc(6,nft+1)
401 ELSEIF (ity == 7)
THEN
403 pid(i) = ixtg(5,nft+1)
409 thke0(i) = thke(n) * geo(300+ilay,pid(i))
418 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
420 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
422 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
429 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
431 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
432 evar(i) = hundred *(thk0 - gbuf%THK(i))/thk0
434 evar(i) = hundred *(thk0 - xgbuf%THK(i))/thk0
439 ELSEIF (ifunc == 2040)
THEN
448 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0)
THEN
453 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
454 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
456 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
459 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i))
466 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
467 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
469 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
472 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
482 ELSEIF (ifunc == 2041)
THEN
491 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0)
THEN
493 IF (nlay > 1) il = ilay
497 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
498 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
500 . elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)%PLA(i))
503 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,1)%PLA(i))
512 ELSEIF (ifunc >= 2042 .AND. ifunc <= 2141)
THEN
517 ELSEIF (nlay > 1)
THEN
518 il = mod((ifunc - 2041), 100)
520 IF (il == 0) il = 100
523 ipt = mod((ifunc - 2041), 100)
524 IF (ipt == 0) ipt = 100
526 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0)
THEN
531 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
532 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
534 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
537 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i))
547 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
550 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt
561 IF(mlw == 0 .OR. mlw == 13)
THEN
564 IF(iel_crk(n) > 0)
THEN
565 ie(icrk) = ie(icrk) + 1
566 func(el2fa(nelcrk(icrk) + ie(icrk))) = zero
570 ELSEIF (ifunc == 3)
THEN
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)))
582 ELSEIF (ity == 7)
THEN
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)))
593 ELSEIF (ifunc == 25 .AND. ity == 3)
THEN
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)))
610 IF (iel_crk(n) > 0)
THEN
611 ie(icrk) = ie(icrk) + 1
612 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)
626 icrk = indx_crk(crks)
628 nel_crk = nelcrk(icrk)
632 n = el2fa(nel_crk + i)
638 n = el2fa(nel_crk + i)
639 wal(i+nel_crk) = func(n)