40 1 ITENS ,INVERT ,EL2FA ,NBF ,
41 2 LEN ,EPSDOT ,IADP ,NBF_L ,
42 3 NBPART ,IADG ,X ,IXC ,
43 4 IGEO ,IXTG ,IEL_CRK ,IADC_CRK,
44 5 CRKEDGE ,INDX_CRK,MAT_PARAM )
52 use element_mod ,
only : nixc,nixtg
56#include "implicit_f.inc"
64#include "com_xfem1.inc"
70 INTEGER IPARG(NPARG,*),ITENS,INVERT(*),INDX_CRK(*),
71 . EL2FA(*),IXC(,*),IGEO(NPROPGI,*),
72 . NBF,IADP(*),NBF_L,NBPART,IADG(NSPMD,*),
73 . IXTG(NIXTG,*),LEN,IEL_CRK(*),IADC_CRK(*),
78 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
79 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP,NXEL),
TARGET :: XFEM_TAB
80 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
81 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(IN) :: MAT_PARAM
87 . a1,a2,a3,thk,sige(mvsiz,5)
88 my_real,
DIMENSION(:,:),
ALLOCATABLE :: tens
90 INTEGER I,NI,NG,NEL,NFT,ITY,LFT,NPT,IPT,
91 . n,j,llt,mlw,istrain,
93 . ihbe,irep,buf,nel_crk,
94 . nlay,ixel,ilay,nuvarv,ivisc,
95 . ipmat,igtyp,matly,nlevxf,npg,icrk,jj(8)
97 INTEGER IXFEM, CRKS, ITG, NN1, NN2,
99 REAL,
DIMENSION(:,:)ALLOCATABLE ::
100 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NELCRK
101 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IE
102 INTEGER ILAYCRK,ELCRK,NPT0
103 INTEGER PID(MVSIZ),MAT(MVSIZ)
106 TYPE(g_bufel_) ,
POINTER :: GBUF
107 TYPE(l_bufel_) ,
POINTER :: LBUF
109 TYPE(g_bufel_) ,
POINTER :: XGBUF
110 TYPE(L_BUFEL_) ,
POINTER :: XLBUF
113 .
DIMENSION(:),
POINTER :: dir_a
116 CALL my_alloc(tens,3,len)
117 CALL my_alloc(wa,3,nbf_l)
118 CALL my_alloc(nelcrk,ncrkpart)
119 CALL my_alloc(ie,ncrkpart)
126 icrk = indx_crk(crks)
127 nelcrk(crks) = nel_crk
128 nel_crk = nel_crk +
crkshell(icrk)%CRKNUMSHELL
149 npt = iabs(iparg(6,ng))
150 istrain= iparg(44,ng)
154 nlevxf = iparg(65,ng)
168 IF (ihbe == 11) cycle
169 IF (ixfem /= 1 .AND. ixfem /= 2) cycle
170 IF (ity /= 3 .AND. ity /= 7) cycle
174 gbuf => elbuf_tab(ng)%GBUF
192 IF (ixfem == 1) npt = 1
206 ELSEIF (itens == 2)
THEN
209 ELSEIF (itens == 3)
THEN
213 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
215 . mlw == 22 .OR. mlw == 25 .OR.
216 . mlw == 27 .OR. mlw == 32 .OR.
221 ELSEIF (mlw == 3 .OR. mlw == 23)
THEN
225 ELSEIF (itens == 4)
THEN
229 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
231 . mlw == 22 .OR. mlw == 25.OR.
232 . mlw == 27 .OR. mlw == 32.OR.
237 ELSEIF (mlw == 3 .OR. mlw == 23)
THEN
241 ELSEIF (itens >= 101 .AND. itens <= 200)
THEN
242 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23)
THEN
245 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
247 . mlw == 22 .OR. mlw == 25 .OR.
248 . mlw == 27 .OR. mlw == 32 .OR.
250 ipt =
min(npt,itens-100)
257 ELSEIF (itens == 5)
THEN
261 IF (istrain == 1)
THEN
264 ELSEIF (itens == 6)
THEN
268 IF (istrain == 1)
THEN
271 ELSEIF (itens == 7)
THEN
275 IF (istrain == 1)
THEN
279 ELSEIF (itens == 8)
THEN
283 IF (istrain == 1)
THEN
287 ELSEIF (itens >= 201 .AND. itens <= 300)
THEN
291 IF (istrain == 1 .AND. npt /= 0)
THEN
292 ipt =
min(npt,itens - 200)
295 a2 = half*(((2*ipt-one)/npt)-one)
300 ELSEIF (itens == 91)
THEN
308 ELSEIF (itens == 93)
THEN
312 ELSEIF (itens == 94)
THEN
316 ELSEIF (itens >= 301 .AND. itens <= 400)
THEN
322 a2 = half*(((2*ipt-one)/npt)-one)
335 xgbuf => xfem_tab(ng,ixel)%GBUF
336 nlay = xfem_tab(ng,ixel)%NLAY
339 icrk = nxel*(ilay-1) + ixel
344 IF (iel_crk(n) > 0)
THEN
345 ie(icrk) = ie(icrk) + 1
346 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = zero
347 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = zero
348 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = zero
360 igtyp = igeo(11,ixc(6,nft+1))
367 igtyp = igeo(11,ixtg(5,nft+1))
378 IF (igtyp == 11)
THEN
381 matly = igeo(ipmat+ilay,pid(i))
382 IF (mat_param(matly)%IVISC > 0 ) ivisc = 1
389 IF (((itens >= 101.AND.itens <= 200).OR.itens==3.OR.itens==4)
390 . .AND.(mlw == 25.OR.mlw == 15.OR.(mlw>=28 .AND.
391 . igtyp==11)).AND.irep == 1)
THEN
393 1 lft ,llt ,nft ,ilay ,nel ,
394 2 ity ,iel_crk,iadc_crk,iadc_crk(itg),ixfem,
395 3 icrk ,nlay ,sige ,ivisc ,crkedge )
398 IF (iel_crk(n) > 0)
THEN
399 ie(icrk) = ie(icrk) + 1
404 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
405 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
406 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
409 ELSEIF (((itens >= 101.AND.itens <= 200).OR.itens==3.OR.
410 . itens==4).AND.(mlw == 25.OR.mlw == 15.OR.(mlw>=28 .AND.
411 . igtyp==11)).AND.irep == 0)
THEN
414 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
415 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
417 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ilay)
418 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
425 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
426 IF (ilaycrk == 0 .OR.abs(ilaycrk) == 1)
THEN
429 sige(i,j) = gbuf%FOR(jj(j)+i)
431 ELSEIF (nlay == 1)
THEN
433 sige(i,j) = gbuf%FOR(jj(j)+i)
439 sige(i,j) = xlbuf%FOR(jj(j)+i)
441 ELSEIF (nlay == 1)
THEN
443 sige(i,j) = xgbuf%FOR(jj(j)+i)
455 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
456 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
458 sige(i,j) = sige(i,j) + lbuf%VISC(jj(j)+i)
462 sige(i,j) = sige(i,j) + xlbuf%VISC(jj(j)+i)
492 dir_a => xfem_tab(ng,ixel)%BUFLY(ilay)%DIRA
494 dir_a => xfem_tab(ng,ixel)%BUFLY(1)%DIRA
496 CALL urotov(lft,llt,sige,dir_a,nel)
503 IF (iel_crk(n) > 0)
THEN
504 ie(icrk) = ie(icrk) + 1
508 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
509 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
510 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
516 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
523 ie(icrk) = ie(icrk) + 1
525 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
526 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
533 r4(j) = a1 * xlbuf%FOR(jj(j)+i) + a2 * xlbuf%MOM(jj(j
537 r4(j) = a1 * xgbuf%FOR(jj(j)+i) + a2 * xgbuf%MOM(jj(j
542 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
543 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
544 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
547 ELSEIF (istre == 0 .AND. gbuf%G_STRA > 0)
THEN
552 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
554 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
560 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
561 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
565 r4(j) = a1 * gbuf%STRA(jj(j)+i) +
566 . a2 * gbuf%STRA(jj(j)+i) * thk
570 r4(j) = gbuf%STRA(jj(j)+i)
578 r4(j) = a1 * xlbuf%STRA(jj(j)+i) +
579 . a2 * xlbuf%STRA(jj(j)+i) * thk
581 ELSEIF (nlay == 1)
THEN
584 r4(j) = a1 * xgbuf%STRA(jj(j)+i) +
585 . a2 * xgbuf%STRA(jj(j)+i) * thk
591 r4(j) = xlbuf%STRA(jj(j)+i)
595 r4(j) = xgbuf%STRA(jj(j)+i)
601 ie(icrk) = ie(icrk) + 1
604 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
605 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
606 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
609 ELSEIF (istre == 2)
THEN
615 IF (iel_crk(n) > 0)
THEN
617 IF (itens /= 92)
THEN
619 r4(j) = a1*epsdot(j,n+n0) + a2*epsdot(j+3,n+n0)*thk
623 r4(j) = epsdot(j+3,n+n0)
628 ie(icrk) = ie(icrk) + 1
629 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
630 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
631 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
641 icrk = indx_crk(crks)
643 nel_crk = nelcrk(icrk)
647 n = el2fa(nel_crk + i)
655 n = el2fa(nel_crk + i)
656 wa(1,i+nel_crk) = tens(1,n)
657 wa(2,i+nel_crk) = tens(2,n)
658 wa(3,i+nel_crk) = tens(3,n)
672 IF (
ALLOCATED(tens))
DEALLOCATE(tens)
673 IF (
ALLOCATED(wa))
DEALLOCATE(wa)
674 IF (
ALLOCATED(nelcrk))
DEALLOCATE(nelcrk)
675 IF (
ALLOCATED(ie))
DEALLOCATE(ie)