36 . IXC ,NFT ,JFT ,JLT ,NXLAY ,
37 . IADC_CRK ,IEL_CRK ,INOD_CRK,ELCUTC ,NODEDGE ,
38 . CRKNODIAD,KNOD2ELC,X ,CRKEDGE,XEDGE4N )
45#include "implicit_f.inc"
53#include "com_xfem1.inc"
58 INTEGER NFT,JFT,JLT,NXLAY
59 INTEGER IXC(NIXC,*),INOD_CRK(*),KNOD2ELC(*),IADC_CRK(4,*),
60 . IEL_CRK(*),(2,*),NODEDGE(2,*),CRKNODIAD(*),XEDGE4N(4,*)
62 TYPE (ELBUF_STRUCT_) :: ELBUF_STR
63 TYPE (),
DIMENSION(NXEL) :: XFEM_STR
64 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
68 INTEGER I,J,K,ELCRK,ILEV,ELCUT,pp1,pp2,pp3,IADC(4),IENR0(4),
69 . IENR(4),,IEDGE,r,IE10,IE20,IE1,IE2,NOD1,NOD2,N(4),NX(4),
70 . DD(4),ISIGN1,ISIGN2,ISIGN3,ISIGN4,IAD1,IAD2,IAD3,IAD4,
71 . isign0(nxel,4),p1,p2,laycut,icutedge,iboundedge,
72 . ntag(4),edgeenr(4),enr(4),
73 . ilay,itri,nx1,nx2,nx3,nx4,nm,np
75 . x1g(mvsiz),x2g(mvsiz),x3g(mvsiz),x4g(mvsiz),
76 . y1g(mvsiz),y2g(mvsiz),y3g(mvsiz),y4g(mvsiz),
77 . z1g(mvsiz),z2g(mvsiz),z3g(mvsiz),z4g(mvsiz),
area(mvsiz),
78 . lxyz0(3),rx(mvsiz),ry(mvsiz),rz(mvsiz),
79 . sx(mvsiz),sy(mvsiz),sz(mvsiz),r11(mvsiz),r12(mvsiz),
80 . r13(mvsiz),r21(mvsiz),r22(mvsiz),r23(mvsiz),r31(mvsiz),
81 . r32(mvsiz),r33(mvsiz),xl1(mvsiz),yl1(mvsiz),xl2(mvsiz),
82 . yl2(mvsiz),xl3(mvsiz),yl3(mvsiz),xl4(mvsiz),yl4(mvsiz),
83 . fit(4,mvsiz),offg(mvsiz),xin(2,mvsiz),yin(2,mvsiz),
84 . xxl(4,mvsiz),yyl(4,mvsiz),xn(4),yn(4),dx(8),xm(2),ym(2)
85 my_real xxx,yyy,zzz,fi,beta,x10,y10,z10,x20,y20,z20,
86 . x1,y1,x2,y2,x3,y3,x4,y4
88 DATA dx/1,2,3,4,1,2,3,4/
114 x1g(i)=x(1,ixc(2,i+nft))
115 y1g(i)=x(2,ixc(2,i+nft))
116 z1g(i)=x(3,ixc(2,i+nft))
117 x2g(i)=x(1,ixc(3,i+nft))
118 y2g(i)=x(2,ixc(3,i+nft))
119 z2g(i)=x(3,ixc(3,i+nft))
120 x3g(i)=x(1,ixc(4,i+nft))
121 y3g(i)=x(2,ixc(4,i+nft))
122 z3g(i)=x(3,ixc(4,i+nft))
123 x4g(i)=x(1,ixc(5,i+nft))
124 y4g(i)=x(2,ixc(5,i+nft))
125 z4g(i)=x(3,ixc(5,i+nft))
131 rx(i) = x2g(i)+x3g(i)-x1g(i)-x4g(i)
132 sx(i) = x3g(i)+x4g(i)-x1g(i)-x2g(i)
133 ry(i) = y2g(i)+y3g(i)-y1g(i)-y4g(i)
134 sy(i) = y3g(i)+y4g(i)-y1g(i)-y2g(i)
135 rz(i) = z2g(i)+z3g(i)-z1g(i)-z4g(i)
136 sz(i) = z3g(i)+z4g(i)-z1g(i)-z2g(i)
137 offg(i) = elbuf_str%GBUF%OFF(i)
143 . r11,r12,r13,r21,r22,r23,r31,r32,r33,
area,offg )
148 lxyz0(1)=fourth*(x3g(i)+x4g(i)+x1g(i)+x2g(i))
149 lxyz0(2)=fourth*(y3g(i)+y4g(i)+y1g(i)+y2g(i))
150 lxyz0(3)=fourth*(z3g(i)+z4g(i)+z1g(i)+z2g(i))
151 xxx = x1g(i)-lxyz0(1)
152 yyy = y1g(i)-lxyz0(2)
153 zzz = z1g(i)-lxyz0(3)
154 xl1(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
155 yl1(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
156 xxx = x2g(i)-lxyz0(1)
157 yyy = y2g(i)-lxyz0(2)
158 zzz = z2g(i)-lxyz0(3)
159 xl2(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
160 yl2(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
161 xxx = x3g(i)-lxyz0(1)
162 yyy = y3g(i)-lxyz0(2)
163 zzz = z3g(i)-lxyz0(3)
164 xl3(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
165 yl3(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
166 xxx = x4g(i)-lxyz0(1)
167 yyy = y4g(i)-lxyz0(2)
168 zzz = z4g(i)-lxyz0(3)
169 xl4(i)=r11(i)*xxx+r21(i)*yyy+r31(i)*zzz
170 yl4(i)=r12(i)*xxx+r22(i)*yyy+r32(i)*zzz
178 pp1 = nxel*(ilay-1)+1
190 elcrk = iel_crk(i+nft)
191 laycut = crkedge(ilay)%LAYCUT(elcrk)
192 IF (laycut /= 0)
THEN
212 ied = crkedge(ilay)%IEDGEC(k,elcrk)
214 iedge = xedge4n(k,elcrk)
215 beta = crkedge(ilay)%RATIO(iedge)
216 nod1 = nodedge(1,iedge)
217 nod2 = nodedge(2,iedge)
218 IF (nod1 == ixc(k+1,i+nft) .and. nod2 == ixc(dd(k)+1,i+nft))
THEN
221 ELSEIF (nod2 == ixc(k+1,i+nft).and.nod1 == ixc(dd(k)+1,i+nft))
THEN
225 xin(ied,i) = xn(p1) + beta*(xn(p2) - xn(p1))
226 yin(ied,i) = yn(p1) + beta*(yn(p2) - yn(p1))
227 xm(ied) = half*(xn(p1)+xn(p2))
228 ym(ied) = half*(yn(p1)+yn(p2))
234 CALL lsint4(xm(1),ym(1),xm(2),ym(2),xn(k),yn(k),fi )
235 IF (fit(k,i)==zero) fit(k,i) = fi
242 elcrk = iel_crk(i+nft)
243 elcut = crkedge(ilay)%LAYCUT(elcrk)
254 elcrk = iel_crk(i+nft)
255 laycut = crkedge(ilay)%LAYCUT(elcrk)
256 IF (laycut /= 0)
THEN
258 iadc(1) = iadc_crk(1,elcrk)
259 iadc(2) = iadc_crk(2,elcrk)
260 iadc(3) = iadc_crk(3,elcrk)
261 iadc(4) = iadc_crk(4,elcrk)
263 ienr0(1) = crknodiad(iadc(1))
264 ienr0(2) = crknodiad(iadc(2))
265 ienr0(3) = crknodiad(iadc(3))
266 ienr0(4) = crknodiad(iadc(4))
273 nx(1) = inod_crk(n(1))
274 nx(2) = inod_crk(n(2))
275 nx(3) = inod_crk(n(3))
276 nx(4) = inod_crk(n(4))
278 ienr(1) = ienr0(1) + knod2elc(nx(1))*(ilay-1)
279 ienr(2) = ienr0(2) + knod2elc(nx(2))*(ilay-1)
280 ienr(3) = ienr0(3) + knod2elc(nx(3))*(ilay-1)
281 ienr(4) = ienr0(4) + knod2elc(nx(4))*(ilay-1)
288 ied = crkedge(ilay)%IEDGEC(r,elcrk)
290 ntag(r) = ntag(r) + 1
291 ntag(dd(r)) = ntag(dd(r)) + 1
293 iedge = xedge4n(r,elcrk)
294 nod1 = nodedge(1,iedge)
295 nod2 = nodedge(2,iedge)
296 ie10 = crkedge(ilay)%EDGEENR(1,iedge)
297 ie20 = crkedge(ilay)%EDGEENR(2,iedge)
298 IF (nod1 == n(r) .and. nod2 == n(dd(r)))
THEN
301 ELSEIF (nod2 == n(r) .and. nod1 == n(dd(r)))
THEN
319 IF (ienr(r) > ienrnod)
THEN
320 WRITE(iout,*)
'ERROR CRACK INITIATION,ENRICHMENT NODE EXCEEDED'
325 isign1 = int(sign(one,fit(1,i)))
326 isign2 = int(sign(one,fit(2,i)))
327 isign3 = int(sign(one,fit(3,i)))
328 isign4 = int(sign(one,fit(4,i)))
330 IF (fit(1,i) == zero) isign1 = 0
331 IF (fit(2,i) == zero) isign2 = 0
332 IF (fit(3,i) == zero) isign3 =
333 IF (fit(4,i) == zero) isign4
343 ied = crkedge(ilay)%IEDGEC(k,elcrk)
345 iedge = xedge4n(k,elcrk)
346 nod1 = nodedge(1,iedge)
348 IF (nod1 == n(k) .and. nod2 == n(dd
THEN
351 ELSEIF (nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
355 icutedge = crkedge(ilay)%ICUTEDGE(iedge)
356 iboundedge = crkedge(ilay)%IBORDEDGE(iedge)
357 IF (icutedge == 2 .AND. iboundedge == 0)
THEN
368 IF (isign0(1,k) > 0)
THEN
371 ELSEIF (isign0(1,k) < 0)
THEN
379 ELSEIF (itri == 3)
THEN
382 ELSEIF (itri == 2)
THEN
385 IF (np > 0 .and. isign0(1,np-1) > 0)
THEN
406 ied = crkedge(ilay)%IEDGEC(nx4,elcrk)
414 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
416 ied = crkedge(ilay)%IEDGEC(nx1,elcrk)
421 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
422 area1 = area1 /
area(i)
423 area2 = area2 /
area(i)
424 area3 = one - area1 - area2
425 ELSEIF (itri > 0)
THEN
427 ied = crkedge(ilay)%IEDGEC(nx1,elcrk)
435 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
437 ied = crkedge(ilay)%IEDGEC(nx4,elcrk)
442 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
444 area1 = area1 /
area(i)
445 area2 = area2 /
area(i)
446 area3 = one - area1 - area2
455 ied = crkedge(ilay)%IEDGEC(nx2,elcrk)
462 ied = crkedge(ilay)%IEDGEC(nx4,elcrk)
469 area1 = half*abs(x1*y2 - x2*y1 + x2*y3 - x3*y2 +
470 . x3*y4 - x4*y3 + x4*y1 - x1*y4)
471 area1 = area1 /
area(i)
485 crklvset(ilev)%ENR0(1,iadc(1)) = abs(enr(1))
486 crklvset(ilev)%ENR0(1,iadc(2)) = enr(2)
487 crklvset(ilev)%ENR0(1,iadc(3)) = enr(3)
488 crklvset(ilev)%ENR0(1,iadc(4)) = enr(4)
490 crklvset(ilev)%ENR0(1,iadc(1)) = enr(1)
491 crklvset(ilev)%ENR0(1,iadc(2)) = enr(2)
492 crklvset(ilev)%ENR0(1,iadc(3)) = enr(3)
493 crklvset(ilev)%ENR0(1,iadc(4)) = enr(4)
496 IF(isign0(1,1) > 0)
crklvset(ilev)%ENR0(1,iadc(1)) = 0
497 IF(isign0(1,2) > 0)
crklvset(ilev)%ENR0(1,iadc(2)) = 0
498 IF(isign0(1,3) > 0)
crklvset(ilev)%ENR0(1,iadc(3)) = 0
499 IF(isign0(1,4) > 0)
crklvset(ilev)%ENR0(1,iadc(4)) = 0
515 crklvset(ilev)%ENR0(1,iadc(1)) = enr(
516 crklvset(ilev)%ENR0(1,iadc(2)) = enr(2)
517 crklvset(ilev)%ENR0(1,iadc(3)) = enr
518 crklvset(ilev)%ENR0(1,iadc(4)) = enr(4)
520 IF(isign0(2,1) < 0)
crklvset(ilev)%ENR0(1,iadc(1)) = 0
521 IF(isign0(2,2) < 0)
crklvset(ilev)%ENR0(1,iadc(2)) = 0
522 IF(isign0(2,3) < 0)
crklvset(ilev)%ENR0(1,iadc(3)) = 0
523 IF(isign0(2,4) < 0)
crklvset(ilev)%ENR0(1,iadc(4)) = 0
534 ie1 = xedge4n(nx2,elcrk)
535 ie2 = xedge4n(nx4,elcrk)
536 IF (crkedge(ilay)%ICUTEDGE(ie2) == 2)
THEN
542 ELSEIF (crkedge(ilay)%ICUTEDGE(ie1) == 2)
THEN
546 ELSEIF (itri > 0)
THEN
548 ie1 = xedge4n(nx1,elcrk)
549 ie2 = xedge4n(nx4,elcrk)
550 IF (crkedge(ilay)%ICUTEDGE(ie1) == 2)
THEN
555 crklvset(pp1)%ENR0(1,iadc(nx1)) = -crknodiad(iadc
557 ELSEIF (crkedge(ilay)%ICUTEDGE(ie2) == 2)
THEN
560 ELSEIF (itri == 0)
THEN
561 xfem_str(nxel)%GBUF%OFF(i) = zero
562 xfem_str(nxel)%BUFLY(ilay)%LBUF(1,1,1)%OFF(i) = 0