36 . IXTG ,NFT ,JFT ,JLT ,NXLAY ,
37 . IAD_CRKTG,IEL_CRKTG,INOD_CRK,ELCUTC ,NODEDGE ,
38 . CRKNODIAD,KNOD2ELC ,X ,CRKEDGE,XEDGE3N )
45#include "implicit_f.inc"
53#include "com_xfem1.inc"
58 INTEGER IXTG(NIXTG,*),NFT,JFT,JLT,INOD_CRK(*),KNOD2ELC(*),
59 . IAD_CRKTG(3,*),(*),ELCUTC(2,*),NODEDGE(2,*),
60 . CRKNODIAD(*),XEDGE3N(3,*),NXLAY
63 TYPE (ELBUF_STRUCT_) :: ELBUF_STR
64 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
68 INTEGER I,K,ELCRK,ELCRKTG,ELCUT,pp1,pp2,pp3,IADC(3),IENR0(3),
69 . (3),IED,IEDGE,r,IE10,IE20,IE1,IE2,NOD1,,N(3),DX(6),
70 . NX(3),dd(3),LAYCUT,ISIGN1,ISIGN2,ISIGN3,SIGBETA,IAD1,IAD2,
71 . isign0(nxel,3),p1,p2,icutedge,iboundedge,
72 . ntag(3),edgeenr(3),enr(3),ilay,itri,nx1,nx2
74 . x1g(mvsiz),x2g(mvsiz),x3g(mvsiz),y1g(mvsiz),y2g(mvsiz),
75 . y3g(mvsiz),z1g(mvsiz),z2g(mvsiz),z3g(mvsiz),
area(mvsiz),
76 . lxyz0(2),rx(mvsiz),ry(mvsiz),rz(mvsiz),
77 . sx(mvsiz),sy(mvsiz),sz(mvsiz),r11(mvsiz),r12(mvsiz),
78 . r13(mvsiz),r21(mvsiz),r22(mvsiz),r23(mvsiz),r31(mvsiz),
79 . r32(mvsiz),r33(mvsiz),xl1(mvsiz),yl1(mvsiz),xl2(mvsiz),
80 . yl2(mvsiz),xl3(mvsiz),yl3(mvsiz),
81 . fit(3,mvsiz),offg(mvsiz),xin(2,mvsiz),yin(2,mvsiz),xxx,yyy,zzz,fi,
82 . xxl(3,mvsiz),yyl(3,mvsiz),xn(3),yn(3),xm(2),ym(2)
83 my_real x1,y1,x2,y2,x3,y3,x10,y10,z10,x20,y20,z20,
84 . beta,area1,area2,area3
98 x1g(i)=x(1,ixtg(2,i+nft))
99 y1g(i)=x(2,ixtg(2,i+nft))
100 z1g(i)=x(3,ixtg(2,i+nft))
101 x2g(i)=x(1,ixtg(3,i+nft))
102 y2g(i)=x(2,ixtg(3,i+nft))
103 z2g(i)=x(3,ixtg(3,i+nft))
104 x3g(i)=x(1,ixtg(4,i+nft))
105 y3g(i)=x(2,ixtg(4,i+nft))
106 z3g(i)=x(3,ixtg(4,i+nft))
112 rx(i) = x2g(i)-x1g(i)
113 ry(i) = y2g(i)-y1g(i)
114 rz(i) = z2g(i)-z1g(i)
115 sx(i) = x3g(i)-x1g(i)
116 sy(i) = y3g(i)-y1g(i)
117 sz(i) = z3g(i)-z1g(i)
118 offg(i) = elbuf_str%GBUF%OFF(i)
124 . r11,r12,r13,r21,r22,r23,r31,r32,r33,
area,offg )
133 xl3(i)=r11(i)*sx(i)+r21(i)*sy
134 yl3(i)=r12(i)*sx(i)+r22(i)*sy(i)+r32(i)*sz(i)
141 lxyz0(1)=third*(xl1(i
142 lxyz0(2)=third*(yl1(i)+yl2(i)+yl3(i))
144 xl1(i)=xl1(i)-lxyz0(1)
145 yl1(i)=yl1(i)-lxyz0(2)
146 xl2(i)=xl2(i)-lxyz0(1)
147 yl2(i)=yl2(i)-lxyz0(2)
148 xl3(i)=xl3(i)-lxyz0(1)
149 yl3(i)=yl3(i)-lxyz0(2)
155 pp1 = nxel*(ilay-1)+1
166 elcrktg = iel_crktg(i+nft)
167 elcrk = elcrktg + ecrkxfec
168 laycut = crkedge(ilay)%LAYCUT(elcrk)
169 IF (laycut /= 0)
THEN
185 ied = crkedge(ilay)%IEDGETG(k,elcrktg)
187 iedge = xedge3n(k,elcrktg)
188 beta = crkedge(ilay)%RATIO(iedge)
189 nod1 = nodedge(1,iedge)
190 nod2 = nodedge(2,iedge)
191 IF (nod1 == ixtg(k+1,i+nft) .and. nod2 == ixtg(dd(k)+1,i+nft))
THEN
194 ELSEIF (nod2 == ixtg(k+1,i+nft).and.nod1 == ixtg(dd(k)+1,i+nft))
THEN
198 xin(ied,i) = xn(p1) + beta*(xn(p2) - xn(p1))
200 xm(ied) = half*(xn(p1)+xn(p2))
201 ym(ied) = half*(yn(p1)+yn(p2))
207 CALL lsint4(xm(1),ym(1),xm(2),ym(2),xn(k),yn(k),fi )
208 IF (fit(k,i)==zero) fit(k,i) = fi
215 elcrktg = iel_crktg(i+nft)
216 elcrk = elcrktg + ecrkxfec
217 elcut = crkedge(ilay)%LAYCUT(elcrk)
226 elcrktg = iel_crktg(i+nft)
227 elcrk = elcrktg + ecrkxfec
228 laycut = crkedge(ilay)%LAYCUT(elcrk)
229 IF (laycut /= 0)
THEN
231 iadc(1) = iad_crktg(1,elcrktg)
232 iadc(2) = iad_crktg(2,elcrktg)
233 iadc(3) = iad_crktg(3,elcrktg)
235 ienr0(1) = crknodiad(iadc(1))
236 ienr0(2) = crknodiad(iadc(2))
237 ienr0(3) = crknodiad(iadc(3))
243 nx(1) = inod_crk(n(1))
244 nx(2) = inod_crk(n(2))
245 nx(3) = inod_crk(n(3))
247 ienr(1) = ienr0(1) + knod2elc(nx(1))*(ilay
248 ienr(2) = ienr0(2) + knod2elc(nx(2))*(ilay-1)
249 ienr(3) = ienr0(3) + knod2elc(nx(3))*(ilay-1)
256 ied = crkedge(ilay)%IEDGETG(k,elcrktg)
258 ntag(k) = ntag(k) + 1
259 ntag(dd(k)) = ntag(dd(k)) + 1
260 iedge = xedge3n(k,elcrktg)
261 nod1 = nodedge(1,iedge)
262 nod2 = nodedge(2,iedge)
263 ie10 = crkedge(ilay)%EDGEENR(1,iedge)
264 ie20 = crkedge(ilay)%EDGEENR(2,iedge)
265 IF (nod1 == n(k) .and. nod2 == n(dd(k)))
THEN
268 ELSEIF (nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
278 IF (ntag(k) > 0)
THEN
286 IF (ienr(k) > ienrnod)
THEN
287 WRITE(iout,*)
'ERROR CRACK INITIATION,ENRICHMENT NODE EXCEEDED'
292 isign1 = int(sign(one,fit(1,i)))
293 isign2 = int(sign(one,fit(2,i)))
294 isign3 = int(sign(one,fit(3,i)))
296 IF (fit(1,i) == zero) isign1 = 0
297 IF (fit(2,i) == zero) isign2 = 0
298 IF (fit(3,i) == zero) isign3 = 0
310 IF (isign0(1,k) > 0)
THEN
313 ELSEIF (isign0(1,k) < 0)
THEN
320 ELSEIF (itri == 2)
THEN
335 crklvset(pp1)%ENR0(1,iadc(1)) = enr(1)
336 crklvset(pp1)%ENR0(1,iadc(2)) = enr(2)
337 crklvset(pp1)%ENR0(1,iadc(3)) = enr(3)
339 IF (isign0(1,1) > 0)
crklvset(pp1)%ENR0(1,iadc(1)) = 0
340 IF (isign0(1,2) > 0)
crklvset(pp1)%ENR0(1,iadc(2)) = 0
341 IF (isign0(1,3) > 0)
crklvset(pp1)%ENR0(1,iadc(3)) = 0
349 crklvset(pp2)%ENR0(1,iadc(1)) = enr(1)
350 crklvset(pp2)%ENR0(1,iadc(2)) = enr(2)
351 crklvset(pp2)%ENR0(1,iadc(3)) = enr(3)
353 IF (isign0(2,1) < 0)
crklvset(pp2)%ENR0(1,iadc(1)) = 0
354 IF (isign0(2,2) < 0)
crklvset(pp2)%ENR0(1,iadc(2)) = 0
355 IF (isign0(2,3) < 0)
crklvset(pp2)%ENR0(1,iadc(3)) = 0
364 ie1 = xedge3n(nx1,elcrktg)
365 ie2 = xedge3n(nx3,elcrktg)
370 crklvset(pp2)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
372 beta = crkedge(ilay)%RATIO(ie2)
373 nod1 = nodedge(1,ie2)
374 nod2 = nodedge(2,ie2)
376 IF (nod1 == ixtg(k+1,i+nft) .and.
377 . nod2 == ixtg(dd(k)+1,i+nft))
THEN
381 ELSEIF (nod2 == ixtg(k+1,i+nft) .and.
382 . nod1 == ixtg(dd(k)+1,i+nft))
THEN
391 ied = crkedge(ilay)%IEDGETG(nx1,elcrktg)
394 ied = crkedge(ilay)%IEDGETG(nx3,elcrktg)
397 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
398 area1 = area1 /
area(i)
403 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
404 area3 = one - area1 - area2
406 ELSEIF (itri > 0)
THEN
408 ie1 = xedge3n(nx1,elcrktg)
413 crklvset(pp1)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
415 beta = crkedge(ilay)%RATIO(ie1)
416 nod1 = nodedge(1,ie1)
417 nod2 = nodedge(2,ie1)
418 k = nx1 ! starting edge node(local)
419 IF (nod1 == ixtg(k+1,i+nft) .and.
420 . nod2 == ixtg(dd(k)+1,i+nft))
THEN
424 ELSEIF (nod2 == ixtg(k+1,i+nft) .and.
425 . nod1 == ixtg(dd(k)+1,i+nft))
THEN
434 ied = crkedge(ilay)%IEDGETG(nx3,elcrktg)
437 ied = crkedge(ilay)%IEDGETG(nx1,elcrktg)
440 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
441 area1 = area1 /
area(i)
446 area2 = half*abs((x1-x3
447 area3 = one - area1 - area2