38 . ELBUF_TAB ,LEN , IFUNC ,IPARG ,GEO ,
39 . IXC ,IXTG , MASS ,PM ,EL2FA ,
40 . NBF ,IADP , NBF_L ,EHOUR ,ANIM ,
41 . NBPART ,IADG , IPM ,IGEO ,THKE ,
42 . ERR_THK_SH4 ,ERR_THK_SH3,XFEM_TAB,IEL_CRK,INDX_CRK,
43 . NBF_CRKXFEMG,EL2FA0 ,CRKEDGE )
54#include "implicit_f.inc"
58#include "vect01_c.inc"
62#include "com_xfem1.inc"
68 INTEGER IFUNC,NBF,LEN,NBF_L, NBPART,NBF_CRKXFEMG
69 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),EL2FA(*),
70 . IADP(*),IADG(NSPMD,*),(NPROPMI,*),INDX_CRK(*),
71 . IGEO(NPROPGI,*),EL2FA0(*),IEL_CRK(*)
74 . mass(*),geo(npropg,*),
75 . ehour(*),anim(*),pm(npropm,*),thke
76 . err_thk_sh4(*), err_thk_sh3(*)
77 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
78 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP,NXEL),
TARGET :: XFEM_TAB
79 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
84 REAL,
DIMENSION(:),
ALLOCATABLE:: WAL
85 INTEGER,
DIMENSION(:),
ALLOCATABLE::MATLY
87 . EVAR(MVSIZ),FUNC(LEN),
88 . OFF, P, VONM2, VONM, S1, S2, S12, S3,
VALUE,
89 . A1,B1,B2,B3,YEQ,F1,M1,M2,M3, FAC, DAM1(MVSIZ),DAM2(MVSIZ),
90 . wpla(mvsiz), dmax(mvsiz),wpmax(mvsiz),
91 . fail(mvsiz),thk0,thke0(mvsiz)
92 INTEGER I,NG,NEL,ISC,N,J,MLW,NUVAR,
93 . ISTRAIN,NN,K1,K2,MT,IMID,IPID,
94 . NN1,NN2,NN3,NN4,NN5,NN6,NF,
95 . OFFSET,K,II,KK,IHBE,I1,MPT,IPT,BUF,NUVARR,
96 . IPMAT,PID(MVSIZ),MAT(MVSIZ),
97 . IEXPAN,NEL_CRK,NLEVXF,NI,JTURB,
98 . nlay,nptt,ixel,ilay,il,ius,jj(5)
99 INTEGER IXFEM,IP,JPID,CRKS,ICRK,ILAYCRK,ELCRK,NPT0
100 INTEGER NELCRK(NCRKPART),IE(NCRKPART)
103 TYPE(BUF_LAY_) ,
POINTER :: BUFLY
104 TYPE(G_BUFEL_) ,
POINTER :: GBUF
105 TYPE(l_bufel_) ,
POINTER :: LBUF
107 TYPE(g_bufel_) ,
POINTER :: XGBUF
108 TYPE(L_BUFEL_) ,
POINTER :: XLBUF
110 CALL my_alloc(wal,nbf_l)
111 CALL my_alloc(matly,mvsiz*100)
116 icrk = indx_crk(crks)
117 nelcrk(crks) = nel_crk
118 nel_crk = nel_crk +
crkshell(icrk)%CRKNUMSHELL
131 IF (ixfem /= 1 .AND. ixfem /= 2) cycle
134 2 mlw ,nel ,nft ,iad ,ity ,
135 3 npt ,jale ,ismstr ,jeul ,jturb ,
136 4 jthe ,jlag ,jmult ,jhbe
137 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
138 6 irep ,iint ,igtyp ,israt ,isrot ,
139 7 icsen ,isorth ,isorthg ,ifailure,jsms)
141 IF (ity /= 3 .AND. ity /= 7) cycle
143 DO offset = 0,nel-1,nvsiz
144 nft =iparg(3,ng) + offset
146 llt=
min(nvsiz,nel-offset)
149 IF (ihbe == 11) cycle
163 IF (ixfem == 1) npt = 1
166 gbuf => elbuf_tab(ng)%GBUF
179 xgbuf => xfem_tab(ng,ixel)%GBUF
180 nlay = xfem_tab(ng,ixel)%NLAY
183 icrk = nxel*(ilay-1) + ixel
186 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
187 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
189 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ilay)
190 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
192 xgbuf => xfem_tab(ng,ixel)%GBUF
203 IF (mlw == 0 .OR. mlw == 13)
THEN
206 ELSE IF (ifunc == 1)
THEN
210 IF (elbuf_tab(ng)%BUFLY(ipt)%L_PLA > 0)
THEN
211 lbuf => elbuf_tab(ng)%BUFLY(ipt)%LBUF(1,1,1)
212 xlbuf => xfem_tab(ng,ixel)%BUFLY(ipt)%LBUF(1,1,1)
217 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
218 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
219 evar(i) = abs(lbuf%PLA(i))
221 evar(i) = abs(xlbuf%PLA(i))
226 ELSEIF (gbuf%G_PLA > 0 )
THEN
227 ipt =
max(1,int((1+npt)/2))
228 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ipt)
229 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ipt)
234 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
235 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
236 evar(i) = abs(lbuf%PLA(i))
238 evar(i) = abs(xlbuf%PLA(i))
243 ELSEIF (ifunc == 3)
THEN
249 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
250 evar(i) = gbuf%EINT(i) + gbuf%EINT(i+llt)
252 evar(i) = xlbuf%EINT(i) + xlbuf%EINT(i+llt)
259 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
260 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
261 evar(i) = gbuf%EINT(i) + gbuf%EINT(i+llt)
263 evar(i) = xgbuf%EINT(i) + xgbuf%EINT(i+llt)
267 ELSEIF (ifunc == 5)
THEN
270 evar(i) = xlbuf%THK(i)
274 evar(i) = xgbuf%THK(i)
277 ELSEIF (ifunc == 7)
THEN
282 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
283 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
284 s1 = gbuf%FOR(jj(1)+i)
285 s2 = gbuf%FOR(jj(2)+i)
286 s12= gbuf%FOR(jj(3)+i)
288 s1 = xlbuf%FOR(jj(1)+i)
289 s2 = xlbuf%FOR(jj(2)+i)
290 s12= xlbuf%FOR(jj(3)+i)
292 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
293 evar(i) = sqrt(vonm2)
299 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
300 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
301 s1 = gbuf%FOR(jj(1)+i)
302 s2 = gbuf%FOR(jj(2)+i)
305 s1 = xgbuf%FOR(jj(1)+i)
306 s2 = xgbuf%FOR(jj(2)+i)
307 s12= xgbuf%FOR(jj(3)+i)
309 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
310 evar(i) = sqrt(vonm2)
314 ELSEIF (ifunc >= 14 .AND. ifunc <= 15)
THEN
321 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
322 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
323 evar(i) = gbuf%FOR(jj(ius)+i)
325 evar(i) = xlbuf%FOR(jj(ius)+i)
332 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
333 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
334 evar(i) = gbuf%FOR(jj(ius)+i)
336 evar(i) = xgbuf%FOR(jj(ius)+i)
341 ELSEIF (ifunc >= 17 .AND. ifunc <= 19)
THEN
348 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
349 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
350 evar(i) = gbuf%FOR(jj(ius)+i)
352 evar(i) = xgbuf%FOR(jj(ius)+i)
359 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
360 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
361 evar(i) = gbuf%FOR(jj(ius)+i)
363 evar(i) = xgbuf%FOR(jj(ius)+i)
368 ELSEIF (ifunc == 26 .and. gbuf%G_EPSD > 0)
THEN
373 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
374 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
375 evar(i) = gbuf%EPSD(i)
377 evar(i) = xlbuf%EPSD(i)
384 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
385 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
386 evar(i) = gbuf%EPSD(i)
388 evar(i) = xgbuf%EPSD(i)
393 ELSEIF (ifunc == 2155)
THEN
397 pid(i) = ixc(6,nft+1)
399 ELSEIF (ity == 7)
THEN
401 pid(i) = ixtg(5,nft+1)
407 thke0(i) = thke(n) * geo(300+ilay,pid(i))
414 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
416 IF (ilaycrk == 0 .OR. abs(ilaycrk
THEN
418 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
420 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
427 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
429 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
430 evar(i) = hundred *(thk0 - gbuf%THK(i))/thk0
432 evar(i) = hundred *(thk0 - xgbuf%THK(i))/thk0
437 ELSEIF (ifunc == 2040)
THEN
446 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0)
THEN
451 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
452 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
454 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
457 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i))
464 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
465 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
467 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
470 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
480 ELSEIF (ifunc == 2041)
THEN
489 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0)
THEN
491 IF (nlay > 1) il = ilay
495 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
496 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
498 . elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)%PLA(i))
501 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,1)%PLA(i))
510 ELSEIF (ifunc >= 2042 .AND. ifunc <= 2141)
THEN
515 ELSEIF (nlay > 1)
THEN
516 il = mod((ifunc - 2041), 100)
518 IF (il == 0) il = 100
521 ipt = mod((ifunc - 2041), 100)
522 IF (ipt == 0) ipt = 100
524 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0)
THEN
529 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
530 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
532 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
535 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i))
542 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
543 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
545 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
548 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
559 IF(mlw == 0 .OR. mlw == 13)
THEN
562 IF(iel_crk(n) > 0)
THEN
563 ie(icrk) = ie(icrk) + 1
564 func(el2fa(nelcrk(icrk) + ie(icrk))) = zero
568 ELSEIF (ifunc == 3)
THEN
574 IF (iel_crk(n) > 0)
THEN
575 ie(icrk) = ie(icrk) + 1
576 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)/
577 .
max(em30,mass(el2fa0(nn4+i+nft)))
580 ELSEIF (ity == 7)
THEN
583 IF (iel_crk(n) > 0)
THEN
584 ie(icrk) = ie(icrk) + 1
585 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)/
586 .
max(em30,mass(el2fa0(nn5+i+nft)))
591 ELSEIF (ifunc == 25 .AND. ity == 3)
THEN
596 IF (iel_crk(n) > 0)
THEN
597 ie(icrk) = ie(icrk) + 1
598 func(el2fa(nelcrk(icrk) + ie(icrk))) = ehour(n+numels)/
599 .
max(em30,mass(el2fa0(nn4+n)))
608 IF (iel_crk(n) > 0)
THEN
609 ie(icrk) = ie(icrk) + 1
610 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)
624 icrk = indx_crk(crks)
626 nel_crk = nelcrk(icrk)
630 n = el2fa(nel_crk + i)
636 n = el2fa(nel_crk + i)
637 wal(i+nel_crk) = func(n)