34 . NEL ,NFT ,ILAY ,NLAY ,IXC ,
35 . CRKLEN ,ELCRKINI ,IEL_CRK ,DIR1 ,DIR2 ,
36 . NODEDGE ,CRKEDGE ,XEDGE4N ,NGL ,XL2 ,
37 . XL3 ,XL4 ,YL2 ,YL3 ,YL4 ,
48#include "implicit_f.inc"
56 INTEGER NEL,NFT,ILAY,NLAY
57 INTEGER (NIXC,*),NGL(NEL),IEL_CRK(*),ELCRKINI(NLAY,NEL),
58 . NODEDGE(2,*),XEDGE4N(4,*)
59 my_real DIR1(NLAY,NEL),DIR2(NLAY,NEL),CRKLEN(NEL),ALDT(NEL),
60 . XL2(NEL),YL2(NEL),XL3(NEL),YL3(NEL),XL4(NEL),YL4(NEL)
61 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
65 INTEGER I,J,K,R,IR,,P2,NEWCRK,IED,OK,ELCRK,NX1,NX2,NX3,NX4,NM,NP,
66 . fac,ifi1,ifi2,iedge,icut,sigbeta,icrk,ielcrk,nod1,nod2
68 INTEGER JCT(NEL),EDGEL(4,),TIP(NEL),ECUT(2,NEL),dd(4),d(8),KPERM(8)
71 . xin(2,nel),yin(2,nel),len(4,nel),xmi(2),ymi(2),
72 . xxl(4,nel),yyl(4,nel),beta0(4,nel)
74 . xint,yint,zint,fi,xxx,yyy,zzz,cross,acd,bcd,dlx,dly,
75 . x10,y10,z10,x20,y20,z20,d12,m12,mm,xint0,yint0,dir11,dir22,
76 . x1,y1,x2,y2,x3,y3,x4,y4,beta,bmin,bmax
78 DATA d/1,2,2,3,4,3,1,4/
80 DATA kperm/1,2,3,4,1,2,3,4/
81 parameter(bmin = 0.01, bmax = 0.99)
86 IF (elcrkini(ilay,i) == 5)
THEN
90 ELSEIF (elcrkini(ilay,i) == -5)
THEN
95 IF (newcrk == 0)
RETURN
117 len(1,i) = xl2(i)*xl2(i) + yl2(i)*yl2(i)
118 len(2,i) = (xl3(i)-xl2(i))*(xl3(i)-xl2(i))+
119 . (yl3(i)-yl2(i))*(yl3(i)-yl2(i))
120 len(3,i) = (xl4(i)-xl3(i))*(xl4(i)-xl3(i))+
121 . (yl4(i)-yl3(i))*(yl4(i)-yl3(i))
122 len(4,i) = xl4(i)*xl4(i) + yl4(i)*yl4(i)
129 elcrk = iel_crk(i+nft)
134 iedge = xedge4n(k,elcrk)
136 icut = crkedge(ilay)%ICUTEDGE(iedge)
138 nod1 = nodedge(1,iedge)
139 nod2 = nodedge(2,iedge)
140 IF (nod1 == ixc(k+1,i) .and. nod2 == ixc(dd(k)+1,i))
THEN
143 ELSE IF (nod2 == ixc(k+1,i) .and. nod1 == ixc(dd(k)+1,i))
THEN
156 beta = crkedge(ilay)%RATIO(iedge)
157 xin(1,i) = xxl(p1,i) + beta*(xxl(p2,i) - xxl(p1,i))
158 yin(1,i) = yyl(p1,i) + beta*(yyl(p2,i) - yyl(p1,i))
161 iedge = xedge4n(ied,elcrk)
162 tip(i) = crkedge(ilay)%EDGETIP(1,iedge)
164 WRITE(iout,*)
'ERROR IN ADVANCING CRACK --- CHECK CRACK TIP'
174 elcrk = iel_crk(i+nft)
181 IF (dir11 == zero)
THEN
183 r = kperm(ecut(1,i) + k)
184 iedge = xedge4n(r,elcrk)
185 nod1 = nodedge(1,iedge)
186 nod2 = nodedge(2,iedge)
187 IF (nod1 == ixc(r+1,i) .and. nod2 == ixc(dd(r)+1,i))
THEN
190 ELSE IF (nod2 == ixc(r+1,i).and.nod1 == ixc(dd(r)+1,i))
THEN
194 dlx = xxl(p2,i) - xxl(p1,i)
195 IF (dlx /= zero)
THEN
196 dly = yyl(p2,i) - yyl(p1,i)
199 yint = yyl(p1,i) + m12*(xint-xxl(p1,i))
200 IF ((xint-xxl(p1,i))*(xint-xxl(p2,i)) <= zero .and.
201 . (yint-yyl(p1,i))*(yint-yyl(p2,i)) <= zero)
THEN
202 cross = (xxl(p1,i) - xint)**2 + (yyl(p1,i) - yint)**2
203 beta = sqrt(cross / len(r,i))
204 IF (beta > bmax .OR. beta < bmin)
THEN
205 beta =
max(beta, bmin)
206 beta =
min(beta, bmax)
207 yint = yyl(p1,i) + beta*(yyl(p2,i)-yyl(p1,i))
220 ELSEIF (dir22 == zero)
THEN
222 r = kperm(ecut(1,i) + k)
223 iedge = xedge4n(r,elcrk)
224 nod1 = nodedge(1,iedge)
225 nod2 = nodedge(2,iedge)
226 IF (nod1 == ixc(r+1,i) .and. nod2 == ixc(dd(r)+1,i))
THEN
229 ELSE IF (nod2 == ixc(r+1,i).and.nod1 == ixc(dd(r)+1,i))
THEN
233 dly = yyl(p2,i) - yyl(p1,i)
234 IF (dly /= zero)
THEN
235 dlx = xxl(p2,i) - xxl(p1,i)
238 xint = xxl(p1,i) + m12*(yint-yyl(p1,i))
239 IF ((xint-xxl(p1,i))*(xint-xxl(p2,i)) <= zero .and.
240 . (yint-yyl(p1,i))*(yint-yyl(p2,i)) <= zero)
THEN
241 cross = (xxl(p1,i) - xint)**2 + (yyl(p1,i) - yint)**2
242 beta = sqrt(cross / len(r,i))
243 IF (beta > bmax .OR. beta < bmin)
THEN
244 beta =
max(beta, bmin)
245 beta =
min(beta, bmax)
246 xint = xxl(p1,i) + beta*(xxl(p2,i)-xxl(p1,i))
259 ELSEIF (dir11 /= zero .and. dir22 /= zero)
THEN
261 r = kperm(ecut(1,i) + k)
262 iedge = xedge4n(r,elcrk)
263 nod1 = nodedge(1,iedge)
264 nod2 = nodedge(2,iedge)
265 IF (nod1 == ixc(r+1,i) .and. nod2 == ixc(dd(r)+1,i))
THEN
268 ELSE IF (nod2 == ixc(r+1,i).and.nod1 == ixc(dd(r)+1,i))
THEN
274 dly = yyl(p2,i) - yyl(p1,i)
276 IF (dlx == zero)
THEN
278 yint = yint0 + mm*(xint-xint0)
279 IF ((yint-yyl(p1,i))*(yint-yyl(p2,i)) <= zero)
THEN
280 cross = (yyl(p1,i) - yint)**2
281 beta = sqrt(cross / len(r,i))
282 IF (beta > bmax .OR. beta < bmin)
THEN
283 beta =
max(beta, bmin)
284 beta =
min(beta, bmax)
285 yint = yyl(p1,i) + beta*(yyl(p2,i)-yyl(p1,i))
294 ELSEIF (dly == zero)
THEN
296 xint = xint0 + (yint0-yyl(p1,i)) / mm
297 IF ((xint-xxl(p1,i))*(xint-xxl(p2,i)) <= zero)
THEN
298 cross = (xxl(p1,i) - xint)**2
299 beta = sqrt(cross / len(r,i))
300 IF (beta > bmax .OR. beta < bmin)
THEN
302 beta =
min(beta, bmax)
303 xint = xxl(p1,i) + beta*(xxl(p2,i)-xxl(p1,i))
315 xint = (yint0-yyl(p1,i) + m12*xxl(p1,i) - mm*xint0)/(m12-mm)
316 yint = yint0 + mm*(xint-xint0)
317 acd = (yint-yyl(p1,i))*(xint0 - xxl(p1,i))
318 . - (xint-xxl(p1,i))*(yint0 - yyl(p1,i))
319 bcd = (yint-yyl(p2,i))*(xint0 - xxl(p2,i))
320 . - (xint-xxl(p2,i))*(yint0 - yyl(p2,i))
321 IF (acd*bcd <= zero)
THEN
322 cross = (xxl(p1,i) - xint)**2 + (yyl(p1,i) - yint)**2
324 IF (beta > bmax .OR. beta < bmin)
THEN
325 beta =
max(beta, bmin)
326 beta =
min(beta, bmax)
327 xint = xxl(p1,i) + beta*(xxl(p2,i)-xxl(p1
328 yint = yyl(p1,i) + beta*(yyl(p2,i)-yyl(p1,i))
349 IF (edgel(r,i)==1 .or. edgel(r,i)==2) fac=fac+1
352 WRITE(iout,*)
'ERROR IN ADVANCING CRACK. NO CUT EDGES'
355 crklen(i) = sqrt((xin(2,i) - xin(1,i))**2 + (yin(2,i) - yin(1,i))**2)
subroutine cforc3(timers, elbuf_str, jft, jlt, pm, ixc, x, f, m, v, vr, failwave, nvc, mtn, geo, tf, npf, bufmat, partsav, dt2t, neltst, ityptst, stifn, stifr, fsky, iadc, itab, d, dr, tani, offset, eani, f11, f12, f13, f14, f21, f22, f23, f24, f31, f32, f33, f34, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, indxof, ipartc, thke, group_param, mat_elem, nel, istrain, ihbe, ithk, iofc, ipla, nft, ismstr, npt, kfts, fzero, igeo, ipm, ifailure, itask, jthe, temp, fthe, fthesky, iexpan, gresav, grth, xedge4n, igrth, msc, dmelc, jsms, table, iparg, ixfem, knod2elc, sensors, elcutc, inod_crk, iel_crk, ibordnode, nodenr, iadc_crk, nodedge, crknodiad, condn, condnsky, stack, isubstack, xfem_str, crkedge, drape_sh4n, ipri, nloc_dmg, indx_drape, igre, jtur, output, dt, snpc, stf, glob_therm, userl_avail, maxfunc, sbufmat)