40
42 USE elbufdef_mod
43 use element_mod , only : nixtg
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "mvsiz_p.inc"
52
53
54
55#include "com_xfem1.inc"
56#include "units_c.inc"
57
58
59
60 INTEGER IXTG(NIXTG,*),NFT,JFT,JLT,INOD_CRK(*),KNOD2ELC(*),
61 . IAD_CRKTG(3,*),IEL_CRKTG(*),ELCUTC(2,*),NODEDGE(2,*),
62 . CRKNODIAD(*),XEDGE3N(3,*),NXLAY
64 . x(3,*)
65 TYPE (ELBUF_STRUCT_) :: ELBUF_STR
66 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
67
68
69
70 INTEGER I,K,ELCRK,ELCRKTG,ELCUT,pp1,pp2,pp3,IADC(3),IENR0(3),
71 . IENR(3),IED,IEDGE,IE10,IE20,IE1,IE2,NOD1,NOD2,N(3),DX(6),
72 . NX(3),dd(3),LAYCUT,ISIGN1,ISIGN2,ISIGN3,SIGBETA,
73 . ISIGN0(NXEL,3),p1,p2,
74 . NTAG(3),EDGEENR(3),ENR(3),ILAY,ITRI,NX1,NX2,NX3,NM,NP
76 . x1g(mvsiz),x2g(mvsiz),x3g(mvsiz),y1g(mvsiz),y2g(mvsiz),
77 . y3g(mvsiz),z1g(mvsiz),z2g(mvsiz),z3g(mvsiz),
area(mvsiz),
78 . lxyz0(2),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),
83 . fit(3,mvsiz),offg(mvsiz),xin(2,mvsiz),yin(2,mvsiz),fi,
84 . xxl(3,mvsiz),yyl(3,mvsiz),xn(3),yn(3),xm(2),ym(2)
86 . beta,area1,area2,area3
87 DATA dd/2,3,1/
88 DATA dx/1,2,3,1,2,3/
89
90
91
92 p1 = 0
93 p2 = 0
94 nx1 = 0
95 nx2 = 0
96 area1 = 0
97 area2 = 0
98 area3 = 0
99 DO i=jft,jlt
100 x1g(i)=x(1,ixtg(2,i+nft))
101 y1g(i)=x(2,ixtg(2,i+nft))
102 z1g(i)=x(3,ixtg(2,i+nft))
103 x2g(i)=x(1,ixtg(3,i+nft))
104 y2g(i)=x(2,ixtg(3,i+nft))
105 z2g(i)=x(3,ixtg(3,i+nft))
106 x3g(i)=x(1,ixtg(4,i+nft))
107 y3g(i)=x(2,ixtg(4,i+nft))
108 z3g(i)=x(3,ixtg(4,i+nft))
109 ENDDO
110
111
112
113 DO i=jft,jlt
114 rx(i) = x2g(i)-x1g(i)
115 ry(i) = y2g(i)-y1g(i)
116 rz(i) = z2g(i)-z1g(i)
117 sx(i) = x3g(i)-x1g(i)
118 sy(i) = y3g(i)-y1g(i)
119 sz(i) = z3g(i)-z1g(i)
120 offg(i) = elbuf_str%GBUF%OFF(i)
121 ENDDO
122 k = 0
124 . rx, ry, rz,
125 . sx, sy, sz,
126 . r11,r12,r13,r21,r22,r23,r31,r32,r33,
area,offg )
127
128
129
130 DO i=jft,jlt
131 xl1(i) = zero
132 yl1(i) = zero
133 xl2(i)=r11(i)*rx(i)+r21(i)*ry(i)+r31(i)*rz(i)
134 yl2(i)=r12(i)*rx(i)+r22(i)*ry(i)+r32(i)*rz(i)
135 xl3(i)=r11(i)*sx(i)+r21(i)*sy(i)+r31(i)*sz(i)
136 yl3(i)=r12(i)*sx(i)+r22(i)*sy(i)+r32(i)*sz(i)
138 ENDDO
139
140
141
142 DO i=jft,jlt
143 lxyz0(1)=third*(xl1(i)+xl2(i)+xl3(i))
144 lxyz0(2)=third*(yl1(i)+yl2(i)+yl3(i))
145
146 xl1(i)=xl1(i)-lxyz0(1)
147 yl1(i)=yl1(i)-lxyz0(2)
148 xl2(i)=xl2(i)-lxyz0(1)
149 yl2(i)=yl2(i)-lxyz0(2)
150 xl3(i)=xl3(i)-lxyz0(1)
151 yl3(i)=yl3(i)-lxyz0(2)
152 ENDDO
153
154
155
156 DO ilay=1,nxlay
157 pp1 = nxel*(ilay-1)+1
158 pp2 = pp1 + 1
159 pp3 = pp2 + 1
160
161 DO i=jft,jlt
162 fit(1,i)=zero
163 fit(2,i)=zero
164 fit(3,i)=zero
165 ENDDO
166
167 DO i=jft,jlt
168 elcrktg = iel_crktg(i+nft)
169 elcrk = elcrktg + ecrkxfec
170 laycut = crkedge(ilay)%LAYCUT(elcrk)
171 IF (laycut /= 0) THEN
172 xn(1) = xl1(i)
173 yn(1) = yl1(i)
174 xn(2) = xl2(i)
175 yn(2) = yl2(i)
176 xn(3) = xl3(i)
177 yn(3) = yl3(i)
178 xxl(1,i)=xl1(i)
179 yyl(1,i)=yl1(i)
180 xxl(2,i)=xl2(i)
181 yyl(2,i)=yl2(i)
182 xxl(3,i)=xl3(i)
183 yyl(3,i)=yl3(i)
184 DO k=1,3
185 p1 = k
186 p2 = dd(k)
187 ied = crkedge(ilay)%IEDGETG(k,elcrktg)
188 IF (ied > 0) THEN
189 iedge = xedge3n(k,elcrktg)
190 beta = crkedge(ilay)%RATIO(iedge)
191 nod1 = nodedge(1,iedge)
192 nod2 = nodedge(2,iedge)
193 IF (nod1 == ixtg(k+1,i+nft) .and. nod2 == ixtg(dd(k)+1,i+nft)) THEN
194 p1 = k
195 p2 = dd(k)
196 ELSEIF (nod2 == ixtg(k+1,i+nft).and.nod1 == ixtg(dd(k)+1,i+nft))THEN
197 p1 = dd(k)
198 p2 = k
199 ENDIF
200 xin(ied,i) = xn(p1) + beta*(xn(p2) - xn(p1))
201 yin(ied,i) = yn(p1) + beta*(yn(p2) - yn(p1))
202 xm(ied) = half*(xn(p1)+xn(p2))
203 ym(ied) = half*(yn(p1)+yn(p2))
204 ENDIF
205 ENDDO
206
207 DO k=1,3
208 fi = zero
209 CALL lsint4(xm(1),ym(1),xm(2),ym(2),xn(k),yn(k),fi )
210 IF (fit(k,i)==zero) fit(k,i) = fi
211 ENDDO
212 ENDIF
213 ENDDO
214
215 IF (ilay == 1) THEN
216 DO i=jft,jlt
217 elcrktg = iel_crktg(i+nft)
218 elcrk = elcrktg + ecrkxfec
219 elcut = crkedge(ilay)%LAYCUT(elcrk)
220 IF (elcut /= 0) THEN
221 elcutc(1,i+nft) = 1
222 elcutc(2,i+nft) = 1
223 ENDIF
224 ENDDO
225 ENDIF
226
227 DO i=jft,jlt
228 elcrktg = iel_crktg(i+nft)
229 elcrk = elcrktg + ecrkxfec
230 laycut = crkedge(ilay)%LAYCUT(elcrk)
231 IF (laycut /= 0) THEN
232
233 iadc(1) = iad_crktg(1,elcrktg)
234 iadc(2) = iad_crktg(2,elcrktg)
235 iadc(3) = iad_crktg(3,elcrktg)
236
237 ienr0(1) = crknodiad(iadc(1))
238 ienr0(2) = crknodiad(iadc(2))
239 ienr0(3) = crknodiad(iadc(3))
240
241 n(1) = ixtg(2,i+nft)
242 n(2) = ixtg(3,i+nft)
243 n(3) = ixtg(4,i+nft)
244
245 nx(1) = inod_crk(n(1))
246 nx(2) = inod_crk(n(2))
247 nx(3) = inod_crk(n(3))
248
249 ienr(1) = ienr0(1) + knod2elc(nx(1))*(ilay-1)
250 ienr(2) = ienr0(2) + knod2elc(nx(2))*(ilay-1)
251 ienr(3) = ienr0(3) + knod2elc(nx(3))*(ilay-1)
252
253 ntag(1:3) = 0
254 edgeenr(1:3) = 0
255 enr(1:3) = 0
256
257 DO k=1,3
258 ied = crkedge(ilay)%IEDGETG(k,elcrktg)
259 IF (ied > 0) THEN
260 ntag(k) = ntag(k) + 1
261 ntag(dd(k)) = ntag(dd(k)) + 1
262 iedge = xedge3n(k,elcrktg)
263 nod1 = nodedge(1,iedge)
264 nod2 = nodedge(2,iedge)
265 ie10 = crkedge(ilay)%EDGEENR(1,iedge)
266 ie20 = crkedge(ilay)%EDGEENR(2,iedge)
267 IF (nod1 == n(k) .and. nod2 == n(dd(k))) THEN
268 p1 = k
269 p2 = dd(k)
270 ELSEIF (nod2 == n(k) .and. nod1 == n(dd(k))) THEN
271 p1 = dd(k)
272 p2 = k
273 ENDIF
274 edgeenr(p1) = ie10
275 edgeenr(p2) = ie20
276 ENDIF
277 ENDDO
278
279 DO k=1,3
280 IF (ntag(k) > 0) THEN
281 enr(k) = edgeenr(k)
282 ELSE
283 enr(k) = ienr(k)
284 ENDIF
285 ENDDO
286
287 DO k=1,3
288 IF (ienr(k) > ienrnod) THEN
289 WRITE(iout,*) 'ERROR CRACK INITIATION,ENRICHMENT NODE EXCEEDED'
291 ENDIF
292 ENDDO
293
294 isign1 = int(sign(one,fit(1,i)))
295 isign2 = int(sign(one,fit(2,i)))
296 isign3 = int(sign(one,fit(3,i)))
297
298 IF (fit(1,i) == zero) isign1 = 0
299 IF (fit(2,i) == zero) isign2 = 0
300 IF (fit(3,i) == zero) isign3 = 0
301
302 DO k=1,nxel
303 isign0(k,1) = isign1
304 isign0(k,2) = isign2
305 isign0(k,3) = isign3
306 ENDDO
307
308 itri = 0
309 nm = 0
310 np = 0
311 DO k=1,3
312 IF (isign0(1,k) > 0) THEN
313 itri = itri + 1
314 np = k
315 ELSEIF (isign0(1,k) < 0) THEN
316 nm = k
317 ENDIF
318 ENDDO
319 IF (itri == 1) THEN
320 itri = -1
321 nx1 = np
322 ELSEIF (itri == 2) THEN
323 itri = 1
324 nx1 = nm
325 ENDIF
326 nx2 = dx(nx1+1)
327 nx3 = dx(nx2+1)
330
334
335
336
337 crklvset(pp1)%ENR0(1,iadc(1)) = enr(1)
338 crklvset(pp1)%ENR0(1,iadc(2)) = enr(2)
339 crklvset(pp1)%ENR0(1,iadc(3)) = enr(3)
340
341 IF (isign0(1,1) > 0)
crklvset(pp1)%ENR0(1,iadc(1)) = 0
342 IF (isign0(1,2) > 0)
crklvset(pp1)%ENR0(1,iadc(2)) = 0
343 IF (isign0(1,3) > 0)
crklvset(pp1)%ENR0(1,iadc(3)) = 0
344
348
349
350
351 crklvset(pp2)%ENR0(1,iadc(1)) = enr(1)
352 crklvset(pp2)%ENR0(1,iadc(2)) = enr(2)
353 crklvset(pp2)%ENR0(1,iadc(3)) = enr(3)
354
355 IF (isign0(2,1) < 0)
crklvset(pp2)%ENR0(1,iadc(1)) = 0
356 IF (isign0(2,2) < 0)
crklvset(pp2)%ENR0(1,iadc(2)) = 0
357 IF (isign0(2,3) < 0)
crklvset(pp2)%ENR0(1,iadc(3)) = 0
358
362
363
364
365 IF (itri < 0) THEN
366 ie1 = xedge3n(nx1,elcrktg)
367 ie2 = xedge3n(nx3,elcrktg)
368
372 crklvset(pp2)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
373
374 beta = crkedge(ilay)%RATIO(ie2)
375 nod1 = nodedge(1,ie2)
376 nod2 = nodedge(2,ie2)
377 k = nx3
378 IF (nod1 == ixtg(k+1,i+nft) .and.
379 . nod2 == ixtg(dd(k)+1,i+nft)) THEN
380 p1 = k
381 p2 = dd(k)
382 sigbeta = ie2
383 ELSEIF (nod2 == ixtg(k+1,i+nft) .and.
384 . nod1 == ixtg(dd(k)+1,i+nft)) THEN
385 p1 = dd(k)
386 p2 = k
387 sigbeta = -ie2
388 ENDIF
389
390
391 x1 = xxl(nx1,i)
392 y1 = yyl(nx1,i)
393 ied = crkedge(ilay)%IEDGETG(nx1,elcrktg)
394 x2 = xin(ied,i)
395 y2 = yin(ied,i)
396 ied = crkedge(ilay)%IEDGETG(nx3,elcrktg)
397 x3 = xin(ied,i)
398 y3 = yin(ied,i)
399 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
400 area1 = area1 /
area(i)
401 x1 = xxl(nx2,i)
402 y1 = yyl(nx2,i)
403 x2 = xxl(nx3,i)
404 y2 = yyl(nx3,i)
405 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
406 area3 = one - area1 - area2
407
408 ELSEIF (itri > 0) THEN
409
410 ie1 = xedge3n(nx1,elcrktg)
411
415 crklvset(pp1)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
416
417 beta = crkedge(ilay)%RATIO(ie1)
418 nod1 = nodedge(1,ie1)
419 nod2 = nodedge(2,ie1)
420 k = nx1
421 IF (nod1 == ixtg(k+1,i+nft) .and.
422 . nod2 == ixtg(dd(k)+1,i+nft)) THEN
423 p1 = k
424 p2 = dd(k)
425 sigbeta = ie1
426 ELSEIF (nod2 == ixtg(k+1,i+nft) .and.
427 . nod1 == ixtg(dd(k)+1,i+nft)) THEN
428 p1 = dd(k)
429 p2 = k
430 sigbeta = -ie1
431 ENDIF
432
433
434 x1 = xxl(nx1,i)
435 y1 = yyl(nx1,i)
436 ied = crkedge(ilay)%IEDGETG(nx3,elcrktg)
437 x2 = xin(ied,i)
438 y2 = yin(ied,i)
439 ied = crkedge(ilay)%IEDGETG(nx1,elcrktg)
440 x3 = xin(ied,i)
441 y3 = yin(ied,i)
442 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
443 area1 = area1 /
area(i)
444 x1 = xxl(nx2,i)
445 y1 = yyl(nx2,i)
446 x3 = xxl(nx3,i)
447 y3 = yyl(nx3,i)
448 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
449 area3 = one - area1 - area2
450
451 ENDIF
452
456
460
461 ENDIF
462 ENDDO
463 ENDDO
464
465 RETURN
subroutine clskew3(jft, jlt, irep, rx, ry, rz, sx, sy, sz, e1x, e2x, e3x, e1y, e2y, e3y, e1z, e2z, e3z, det)
subroutine lsint4(y1, z1, y2, z2, y, z, fi)
subroutine area(d1, x, x2, y, y2, eint, stif0)
type(xfem_phantom_), dimension(:), allocatable xfem_phantom
type(xfem_lvset_), dimension(:), allocatable crklvset