39 1 ITENS ,INVERT ,EL2FA ,NBF ,
40 2 LEN ,EPSDOT ,IADP ,NBF_L ,
41 3 NBPART ,IADG ,X ,IXC ,
42 4 IGEO ,IXTG ,IEL_CRK ,IADC_CRK,
43 5 CRKEDGE ,INDX_CRK,MAT_PARAM )
54#include "implicit_f.inc"
62#include "com_xfem1.inc"
68 INTEGER IPARG(NPARG,*),ITENS,INVERT(*),INDX_CRK(*),
69 . EL2FA(*),IXC(NIXC,*),IGEO(NPROPGI,*),
70 . NBF,IADP(*),NBF_L,NBPART,IADG(,*),
71 . IXTG(NIXTG,*),LEN,IEL_CRK(*),IADC_CRK(*),
76 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
77 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP,NXEL),
TARGET :: XFEM_TAB
78 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
79 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(IN) :: MAT_PARAM
85 . a1,a2,a3,thk,sige(mvsiz,5)
86 my_real,
DIMENSION(:,:),
ALLOCATABLE :: tens
88 INTEGER I,,NG,NEL,NFT,ITY,LFT,NPT,IPT,
89 . n,j,llt,mlw,istrain,
90 . ipid,i1,i2,istre,nni,n0,
91 . kk,ihbe,irep,buf,nel_crk,
92 . nlay,nptt,ixel,ilay,nuvarv,ivisc,
93 . ipmat,igtyp,matly,nlevxf,npg,icrk,jj(8)
95 INTEGER IXFEM,K,CRKS,ITG,IA,NN1,NN2,
97 REAL,
DIMENSION(:,:),
ALLOCATABLE :: WA
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NELCRK
99 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IE
100 INTEGER ILAYCRK,ELCRK,NPT0
101 INTEGER PID(MVSIZ),MAT(MVSIZ)
103 TYPE(buf_lay_) ,
POINTER :: BUFLY
104 TYPE(g_bufel_) ,
POINTER :: GBUF
105 TYPE(l_bufel_) ,
POINTER ::
107 TYPE(g_bufel_) ,
POINTER :: XGBUF
108 TYPE(l_bufel_) ,
POINTER :: XLBUF
111 .
DIMENSION(:),
POINTER :: dir_a
114 CALL my_alloc(tens,3,len)
115 CALL my_alloc(wa,3,nbf_l)
116 CALL my_alloc(nelcrk,ncrkpart)
117 CALL my_alloc(ie,ncrkpart)
124 icrk = indx_crk(crks)
125 nelcrk(crks) = nel_crk
126 nel_crk = nel_crk +
crkshell(icrk)%CRKNUMSHELL
147 npt = iabs(iparg(6,ng))
148 istrain= iparg(44,ng)
152 nlevxf = iparg(65,ng)
166 IF (ihbe == 11) cycle
167 IF (ixfem /= 1 .AND. ixfem /= 2) cycle
168 IF (ity /= 3 .AND. ity /= 7) cycle
172 gbuf => elbuf_tab(ng)%GBUF
190 IF (ixfem == 1) npt = 1
204 ELSEIF (itens == 2)
THEN
207 ELSEIF (itens == 3)
THEN
211 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
213 . mlw == 22 .OR. mlw == 25 .OR.
214 . mlw == 27 .OR. mlw == 32 .OR.
219 ELSEIF (mlw == 3 .OR. mlw == 23)
THEN
223 ELSEIF (itens == 4)
THEN
227 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
229 . mlw == 22 .OR. mlw == 25.OR.
230 . mlw == 27 .OR. mlw == 32.OR.
235 ELSEIF (mlw == 3 .OR. mlw == 23)
THEN
239 ELSEIF (itens >= 101 .AND. itens <= 200)
THEN
240 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23)
THEN
243 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
245 . mlw == 22 .OR. mlw == 25 .OR.
246 . mlw == 27 .OR. mlw == 32 .OR.
248 ipt =
min(npt,itens-100)
255 ELSEIF (itens == 5)
THEN
259 IF (istrain == 1)
THEN
262 ELSEIF (itens == 6)
THEN
266 IF (istrain == 1)
THEN
269 ELSEIF (itens == 7)
THEN
273 IF (istrain == 1)
THEN
277 ELSEIF (itens == 8)
THEN
281 IF (istrain == 1)
THEN
285 ELSEIF (itens >= 201 .AND. itens <= 300)
THEN
289 IF (istrain == 1 .AND. npt /= 0)
THEN
290 ipt =
min(npt,itens - 200)
293 a2 = half*(((2*ipt-one)/npt)-one)
298 ELSEIF (itens == 91)
THEN
302 ELSEIF (itens == 92)
THEN
306 ELSEIF (itens == 93)
THEN
310 ELSEIF (itens == 94)
THEN
314 ELSEIF (itens >= 301 .AND. itens <= 400)
THEN
317 ipt =
min(npt,itens - 300)
320 a2 = half*(((2*ipt-one)/npt)-one)
333 xgbuf => xfem_tab(ng,ixel)%GBUF
334 nlay = xfem_tab(ng,ixel)%NLAY
337 icrk = nxel*(ilay-1) + ixel
342 IF (iel_crk(n) > 0)
THEN
343 ie(icrk) = ie(icrk) + 1
344 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = zero
345 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = zero
346 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = zero
358 igtyp = igeo(11,ixc(6,nft+1))
365 igtyp = igeo(11,ixtg(5,nft+1))
376 IF (igtyp == 11)
THEN
379 matly = igeo(ipmat+ilay,pid(i))
380 IF (mat_param(matly)%IVISC > 0 ) ivisc = 1
387 IF (((itens >= 101.AND.itens <= 200).OR.itens==3.OR.itens==4)
388 . .AND.(mlw == 25.OR.mlw == 15.OR.
389 . igtyp==11)).AND.irep == 1)
THEN
391 1 lft ,llt ,nft ,ilay ,nel ,
392 2 ity ,iel_crk,iadc_crk,iadc_crk(itg),ixfem,
393 3 icrk ,nlay ,sige ,ivisc ,crkedge )
396 IF (iel_crk(n) > 0)
THEN
402 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
403 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
404 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
407 ELSEIF (((itens >= 101.AND.itens <= 200).OR.itens==3.OR.
408 . itens==4).AND.(mlw == 25.OR.mlw == 15.OR.(mlw>=28 .AND.
409 . igtyp==11)).AND.irep == 0)
THEN
412 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
413 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
415 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ilay)
416 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
423 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
424 IF (ilaycrk == 0 .OR.abs(ilaycrk) == 1)
THEN
427 sige(i,j) = gbuf%FOR(jj(j)+i)
429 ELSEIF (nlay == 1)
THEN
431 sige(i,j) = gbuf%FOR(jj(j)+i)
437 sige(i,j) = xlbuf%FOR(jj(j)+i)
439 ELSEIF (nlay == 1)
THEN
441 sige(i,j) = xgbuf%FOR(jj(j)+i)
453 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
454 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
456 sige(i,j) = sige(i,j) + lbuf%VISC(jj(j)+i)
460 sige(i,j) = sige(i,j) + xlbuf%VISC(jj(j)+i)
490 dir_a => xfem_tab(ng,ixel
492 dir_a => xfem_tab(ng,ixel)%BUFLY(1)%DIRA
494 CALL urotov(lft,llt,sige,dir_a,nel)
501 IF (iel_crk(n) > 0)
THEN
502 ie(icrk) = ie(icrk) + 1
506 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
507 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
508 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
514 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
516 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
521 ie(icrk) = ie(icrk) + 1
523 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
524 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
526 r4(j) = a1 * gbuf%FOR(jj(j)+i) + a2 * gbuf%MOM(jj(j)+i)
531 r4(j) = a1 * xlbuf%FOR(jj(j)+i) + a2 * xlbuf%MOM(jj(j)+i)
533 ELSEIF (nlay == 1)
THEN
535 r4(j) = a1 * xgbuf%FOR(jj(j)+i) + a2 * xgbuf%MOM(jj(j)+i)
540 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
541 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
542 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
545 ELSEIF (istre == 0 .AND. gbuf%G_STRA > 0)
THEN
550 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
552 xlbuf => xfem_tab(ng,ixel
558 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
559 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1)
THEN
563 r4(j) = a1 * gbuf%STRA(jj(j)+i) +
564 . a2 * gbuf%STRA(jj(j)+i) * thk
568 r4(j) = gbuf%STRA(jj(j)+i)
576 r4(j) = a1 * xlbuf%STRA(jj(j)+i) +
577 . a2 * xlbuf%STRA(jj(j)+i) * thk
579 ELSEIF (nlay == 1)
THEN
582 r4(j) = a1 * xgbuf%STRA(jj(j)+i) +
583 . a2 * xgbuf%STRA(jj(j)+i) * thk
589 r4(j) = xlbuf%STRA(jj(j)+i)
591 ELSEIF (nlay == 1)
THEN
593 r4(j) = xgbuf%STRA(jj(j)+i)
599 ie(icrk) = ie(icrk) + 1
602 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
603 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
604 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
607 ELSEIF (istre == 2)
THEN
613 IF (iel_crk(n) > 0)
THEN
615 IF (itens /= 92)
THEN
617 r4(j) = a1*epsdot(j,n+n0) + a2*epsdot(j+3,n+n0)*thk
621 r4(j) = epsdot(j+3,n+n0)
626 ie(icrk) = ie(icrk) + 1
627 tens(1,el2fa(nelcrk(icrk) + ie(icrk))) = r4(1)
628 tens(2,el2fa(nelcrk(icrk) + ie(icrk))) = r4(2)
629 tens(3,el2fa(nelcrk(icrk) + ie(icrk))) = r4(3)
639 icrk = indx_crk(crks)
641 nel_crk = nelcrk(icrk)
645 n = el2fa(nel_crk + i)
653 n = el2fa(nel_crk + i)
654 wa(1,i+nel_crk) = tens(1,n)
655 wa(2,i+nel_crk) = tens(2,n)
656 wa(3,i+nel_crk) = tens(3,n)
670 IF (
ALLOCATED(tens))
DEALLOCATE(tens)
671 IF (
ALLOCATED(wa))
DEALLOCATE(wa)
672 IF (
ALLOCATED(nelcrk))
DEALLOCATE(nelcrk)
673 IF (
ALLOCATED(ie))
DEALLOCATE(ie)