37 . IXC ,NFT ,JFT ,JLT ,NXLAY ,
38 . IADC_CRK ,IEL_CRK ,INOD_CRK,ELCUTC ,NODEDGE ,
39 . CRKNODIAD,KNOD2ELC,X ,CRKEDGE,XEDGE4N )
43 use element_mod ,
only : nixc
47#include "implicit_f.inc"
55#include "com_xfem1.inc"
60 INTEGER NFT,JFT,JLT,NXLAY
61 INTEGER IXC(NIXC,*),INOD_CRK(*),KNOD2ELC(*),IADC_CRK(4,*),
62 . IEL_CRK(*),ELCUTC(2,*),NODEDGE(2,*),CRKNODIAD(*),XEDGE4N(4,*)
64 TYPE (ELBUF_STRUCT_) :: ELBUF_STR
65 TYPE (ELBUF_STRUCT_),
DIMENSION(NXEL) :: XFEM_STR
66 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
70 INTEGER I,J,K,ELCRK,ILEV,ELCUT,pp1,pp2,pp3,IADC(4),IENR0(4),
71 . IENR(4),IED,IEDGE,r,IE10,IE20,IE1,IE2,NOD1,NOD2,N(4),NX(4),
72 . DD(4),ISIGN1,ISIGN2,ISIGN3,ISIGN4,IAD1,IAD2,IAD3,IAD4,
73 . isign0(nxel,4),p1,p2,laycut,icutedge,iboundedge,
74 . ntag(4),edgeenr(4),enr(4),
75 . ilay,itri,nx1,nx2,nx3,nx4,nm,np
77 . x1g(mvsiz),x2g(mvsiz),x3g(mvsiz),x4g(mvsiz),
78 . y1g(mvsiz),y2g(mvsiz),y3g(mvsiz),y4g(mvsiz),
79 . z1g(mvsiz),z2g(mvsiz),z3g(mvsiz),z4g(mvsiz),
area(mvsiz),
80 . lxyz0(3),rx(mvsiz),ry(mvsiz),rz(mvsiz),
81 . sx(mvsiz),sy(mvsiz),sz(mvsiz),r11(mvsiz),r12(mvsiz),
82 . r13(mvsiz),r21(mvsiz),r22(mvsiz),r23(mvsiz),r31(mvsiz),
83 . r32(mvsiz),r33(mvsiz),xl1(mvsiz),yl1(mvsiz),xl2(mvsiz),
84 . yl2(mvsiz),xl3(mvsiz),yl3(mvsiz),xl4(mvsiz),yl4(mvsiz),
85 . fit(4,mvsiz),offg(mvsiz),xin(2,mvsiz),yin(2,mvsiz),
86 . xxl(4,mvsiz),yyl(4,mvsiz),xn(4),yn(4),dx(8),xm(2),ym
90 DATA dx/1,2,3,4,1,2,3,4/
116 x1g(i)=x(1,ixc(2,i+nft))
117 y1g(i)=x(2,ixc(2,i+nft))
118 z1g(i)=x(3,ixc(2,i+nft))
119 x2g(i)=x(1,ixc(3,i+nft))
120 y2g(i)=x(2,ixc(3,i+nft))
121 z2g(i)=x(3,ixc(3,i+nft))
122 x3g(i)=x(1,ixc(4,i+nft))
123 y3g(i)=x(2,ixc(4,i+nft))
124 z3g(i)=x(3,ixc(4,i+nft))
125 x4g(i)=x(1,ixc(5,i+nft))
126 y4g(i)=x(2,ixc(5,i+nft))
127 z4g(i)=x(3,ixc(5,i+nft))
133 rx(i) = x2g(i)+x3g(i)-x1g(i)-x4g(i)
134 sx(i) = x3g(i)+x4g(i)-x1g(i)-x2g(i)
135 ry(i) = y2g(i)+y3g(i)-y1g(i)-y4g(i)
136 sy(i) = y3g(i)+y4g(i)-y1g(i)-y2g(i)
137 rz(i) = z2g(i)+z3g(i)-z1g(i)-z4g(i)
138 sz(i) = z3g(i)+z4g(i)-z1g(i)-z2g(i)
139 offg(i) = elbuf_str%GBUF%OFF(i)
145 . r11,r12,r13,r21,r22,r23,r31,r32,r33,
area,offg )
150 lxyz0(1)=fourth*(x3g(i)+x4g(i)+x1g(i)+x2g(i))
151 lxyz0(2)=fourth*(y3g(i)+y4g(i)+y1g(i)+y2g(i))
152 lxyz0(3)=fourth*(z3g(i)+z4g(i)+z1g(i)+z2g(i))
153 xxx = x1g(i)-lxyz0(1)
154 yyy = y1g(i)-lxyz0(2)
155 zzz = z1g(i)-lxyz0(3)
156 xl1(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
157 yl1(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
158 xxx = x2g(i)-lxyz0(1)
159 yyy = y2g(i)-lxyz0(2)
160 zzz = z2g(i)-lxyz0(3)
161 xl2(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
162 yl2(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
163 xxx = x3g(i)-lxyz0(1)
164 yyy = y3g(i)-lxyz0(2)
165 zzz = z3g(i)-lxyz0(3)
166 xl3(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
167 yl3(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
168 xxx = x4g(i)-lxyz0(1)
169 yyy = y4g(i)-lxyz0(2)
170 zzz = z4g(i)-lxyz0(3)
171 xl4(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
172 yl4(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
180 pp1 = nxel*(ilay-1)+1
192 elcrk = iel_crk(i+nft)
193 laycut = crkedge(ilay)%LAYCUT(elcrk)
194 IF (laycut /= 0)
THEN
214 ied = crkedge(ilay)%IEDGEC(k,elcrk)
216 iedge = xedge4n(k,elcrk)
217 beta = crkedge(ilay)%RATIO(iedge
218 nod1 = nodedge(1,iedge)
219 nod2 = nodedge(2,iedge)
220 IF (nod1 == ixc(k+1,i+nft) .and. nod2 == ixc(dd(k)+1,i+nft))
THEN
223 ELSEIF (nod2 == ixc(k+1,i+nft).and.nod1 == ixc(dd(k)+1,i+nft))
THEN
227 xin(ied,i) = xn(p1) + beta*(xn(p2) - xn(p1
228 yin(ied,i) = yn(p1) + beta*(yn(p2) - yn(p1))
229 xm(ied) = half*(xn(p1)+xn(p2))
230 ym(ied) = half*(yn(p1)+yn(p2))
236 CALL lsint4(xm(1),ym(1),xm(2),ym(2),xn(k),yn(k),fi )
237 IF (fit(k,i)==zero) fit(k,i) = fi
244 elcrk = iel_crk(i+nft)
245 elcut = crkedge(ilay)%LAYCUT(elcrk)
256 elcrk = iel_crk(i+nft)
257 laycut = crkedge(ilay)%LAYCUT(elcrk)
258 IF (laycut /= 0)
THEN
260 iadc(1) = iadc_crk(1,elcrk)
261 iadc(2) = iadc_crk(2,elcrk)
262 iadc(3) = iadc_crk(3,elcrk)
263 iadc(4) = iadc_crk(4,elcrk)
265 ienr0(1) = crknodiad(iadc(1))
266 ienr0(2) = crknodiad(iadc(2))
267 ienr0(3) = crknodiad(iadc(3))
268 ienr0(4) = crknodiad(iadc(4))
275 nx(1) = inod_crk(n(1))
276 nx(2) = inod_crk(n(2))
277 nx(3) = inod_crk(n(3))
278 nx(4) = inod_crk(n(4))
280 ienr(1) = ienr0(1) + knod2elc(nx(1))*(ilay-1)
281 ienr(2) = ienr0(2) + knod2elc(nx(2))*(ilay-1)
282 ienr(3) = ienr0(3) + knod2elc(nx(3))*(ilay-1)
283 ienr(4) = ienr0(4) + knod2elc(nx(4))*(ilay-1)
290 ied = crkedge(ilay)%IEDGEC(r,elcrk)
292 ntag(r) = ntag(r) + 1
293 ntag(dd(r)) = ntag(dd(r)) + 1
295 iedge = xedge4n(r,elcrk)
296 nod1 = nodedge(1,iedge)
297 nod2 = nodedge(2,iedge)
298 ie10 = crkedge(ilay)%EDGEENR(1,iedge)
299 ie20 = crkedge(ilay)%EDGEENR(2,iedge)
300 IF (nod1 == n(r) .and. nod2 == n(dd(r)))
THEN
303 ELSEIF (nod2 == n(r) .and. nod1 == n(dd(r)))
THEN
321 IF (ienr(r) > ienrnod)
THEN
322 WRITE(iout,*)
'ERROR CRACK INITIATION,ENRICHMENT NODE EXCEEDED'
327 isign1 = int(sign(one,fit(1,i)))
328 isign2 = int(sign(one,fit(2,i)))
329 isign3 = int(sign(one,fit(3,i)))
330 isign4 = int(sign(one,fit(4,i)))
332 IF (fit(1,i) == zero) isign1 = 0
333 IF (fit(2,i) == zero) isign2 = 0
334 IF (fit(3,i) == zero) isign3 = 0
335 IF (fit(4,i) == zero) isign4 = 0
345 ied = crkedge(ilay)%IEDGEC(k,elcrk)
347 iedge = xedge4n(k,elcrk)
348 nod1 = nodedge(1,iedge)
349 nod2 = nodedge(2,iedge)
350 IF (nod1 == n(k) .and. nod2 == n(dd(k)))
THEN
353 ELSEIF (nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
357 icutedge = crkedge(ilay)%ICUTEDGE(iedge)
358 iboundedge = crkedge(ilay)%IBORDEDGE(iedge)
359 IF (icutedge == 2 .AND. iboundedge == 0)
THEN
370 IF (isign0(1,k) > 0)
THEN
373 ELSEIF (isign0(1,k) < 0)
THEN
381 ELSEIF (itri == 3)
THEN
384 ELSEIF (itri == 2)
THEN
387 IF (np > 0 .and. isign0(1,np-1) > 0)
THEN
408 ied = crkedge(ilay)%IEDGEC(nx4,elcrk)
416 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
418 ied = crkedge(ilay)%IEDGEC(nx1,elcrk)
423 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
424 area1 = area1 /
area(i)
425 area2 = area2 /
area(i)
426 area3 = one - area1 - area2
427 ELSEIF (itri > 0)
THEN
429 ied = crkedge(ilay)%IEDGEC(nx1,elcrk)
437 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
439 ied = crkedge(ilay)%IEDGEC(nx4,elcrk)
444 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
446 area1 = area1 /
area(i)
447 area2 = area2 /
area(i)
448 area3 = one - area1 - area2
457 ied = crkedge(ilay)%IEDGEC(nx2,elcrk)
464 ied = crkedge(ilay)%IEDGEC(nx4,elcrk)
471 area1 = half*abs(x1*y2 - x2*y1 + x2*y3 - x3*y2 +
472 . x3*y4 - x4*y3 + x4*y1 - x1*y4)
473 area1 = area1 /
area(i)
487 crklvset(ilev)%ENR0(1,iadc(1)) = abs(enr(1))
488 crklvset(ilev)%ENR0(1,iadc(2)) = enr(2)
489 crklvset(ilev)%ENR0(1,iadc(3)) = enr(3)
490 crklvset(ilev)%ENR0(1,iadc(4)) = enr(4)
492 crklvset(ilev)%ENR0(1,iadc(1)) = enr(1)
493 crklvset(ilev)%ENR0(1,iadc(2)) = enr(2)
494 crklvset(ilev)%ENR0(1,iadc(3)) = enr(3)
495 crklvset(ilev)%ENR0(1,iadc(4)) = enr(4)
498 IF(isign0(1,1) > 0)
crklvset(ilev)%ENR0(1,iadc(1)) = 0
499 IF(isign0(1,2) > 0)
crklvset(ilev)%ENR0(1,iadc(2)) = 0
500 IF(isign0(1,3) > 0)
crklvset(ilev)%ENR0(1,iadc(3)) = 0
501 IF(isign0(1,4) > 0)
crklvset(ilev)%ENR0(1,iadc(4)) = 0
517 crklvset(ilev)%ENR0(1,iadc(1)) = enr(1)
518 crklvset(ilev)%ENR0(1,iadc(2)) = enr(2)
519 crklvset(ilev)%ENR0(1,iadc(3)) = enr(3)
520 crklvset(ilev)%ENR0(1,iadc(4)) = enr(4)
522 IF(isign0(2,1) < 0)
crklvset(ilev)%ENR0(1,iadc(1)) = 0
523 IF(isign0(2,2) < 0)
crklvset(ilev)%ENR0(1,iadc(2)) = 0
524 IF(isign0(2,3) < 0)
crklvset(ilev)%ENR0(1,iadc(3)) = 0
525 IF(isign0(2,4) < 0)
crklvset(ilev)%ENR0(1,iadc(4)) = 0
536 ie1 = xedge4n(nx2,elcrk)
537 ie2 = xedge4n(nx4,elcrk)
538 IF (crkedge(ilay)%ICUTEDGE(ie2) == 2)
THEN
544 ELSEIF (crkedge(ilay)%ICUTEDGE(ie1) == 2)
THEN
548 ELSEIF (itri > 0)
THEN
550 ie1 = xedge4n(nx1,elcrk)
551 ie2 = xedge4n(nx4,elcrk)
552 IF (crkedge(ilay)%ICUTEDGE(ie1) == 2)
THEN
557 crklvset(pp1)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
559 ELSEIF (crkedge(ilay)%ICUTEDGE(ie2) == 2)
THEN
562 ELSEIF (itri == 0)
THEN
563 xfem_str(nxel)%GBUF%OFF(i) = zero
564 xfem_str(nxel)%BUFLY(ilay)%LBUF(1,1,1)%OFF(i) = 0 ! 3rd phantom not actif