39
41 USE elbufdef_mod
42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "mvsiz_p.inc"
50
51
52
53#include "com_xfem1.inc"
54#include "units_c.inc"
55
56
57
58 INTEGER IXTG(NIXTG,*),NFT,JFT,JLT,INOD_CRK(*),KNOD2ELC(*),
59 . IAD_CRKTG(3,*),IEL_CRKTG(*),ELCUTC(2,*),NODEDGE(2,*),
60 . CRKNODIAD(*),XEDGE3N(3,*),NXLAY
62 . x(3,*)
63 TYPE (ELBUF_STRUCT_) :: ELBUF_STR
64 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
65
66
67
68 INTEGER I,K,ELCRK,ELCRKTG,ELCUT,pp1,pp2,pp3,IADC(3),IENR0(3),
69 . IENR(3),IED,IEDGE,r,IE10,IE20,IE1,IE2,NOD1,NOD2,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,NX3,NM,NP
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
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
85 DATA dd/2,3,1/
86 DATA dx/1,2,3,1,2,3/
87
88
89
90 p1 = 0
91 p2 = 0
92 nx1 = 0
93 nx2 = 0
94 area1 = 0
95 area2 = 0
96 area3 = 0
97 DO i=jft,jlt
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))
107 ENDDO
108
109
110
111 DO i=jft,jlt
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)
119 ENDDO
120 k = 0
122 . rx, ry, rz,
123 . sx, sy, sz,
124 . r11,r12,r13,r21,r22,r23,r31,r32,r33,
area,offg )
125
126
127
128 DO i=jft,jlt
129 xl1(i) = zero
130 yl1(i) = zero
131 xl2(i)=r11(i)*rx(i)+r21(i)*ry(i)+r31(i)*rz(i)
132 yl2(i)=r12(i)*rx(i)+r22(i)*ry(i)+r32(i)*rz(i)
133 xl3(i)=r11(i)*sx(i)+r21(i)*sy(i)+r31(i)*sz(i)
134 yl3(i)=r12(i)*sx(i)+r22(i)*sy(i)+r32(i)*sz(i)
136 ENDDO
137
138
139
140 DO i=jft,jlt
141 lxyz0(1)=third*(xl1(i)+xl2(i)+xl3(i))
142 lxyz0(2)=third*(yl1(i)+yl2(i)+yl3
143
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)
150 ENDDO
151
152
153
154 DO ilay=1,nxlay
155 pp1 = nxel*(ilay-1)+1
156 pp2 = pp1 + 1
157 pp3 = pp2 + 1
158
159 DO i=jft,jlt
160 fit(1,i)=zero
161 fit(2,i)=zero
162 fit(3,i)=zero
163 ENDDO
164
165 DO i=jft,jlt
166 elcrktg = iel_crktg(i+nft)
167 elcrk = elcrktg + ecrkxfec
168 laycut = crkedge(ilay)%LAYCUT(elcrk)
169 IF (laycut /= 0) THEN
170 xn(1) = xl1(i)
171 yn(1) = yl1(i)
172 xn(2) = xl2(i)
173 yn(2) = yl2(i)
174 xn(3) = xl3(i)
175 yn(3) = yl3(i)
176 xxl(1,i)=xl1(i)
177 yyl(1,i)=yl1(i)
178 xxl(2,i)=xl2(i)
179 yyl(2,i)=yl2(i)
180 xxl(3,i)=xl3(i)
181 yyl(3,i)=yl3(i)
182 DO k=1,3
183 p1 = k
184 p2 = dd(k)
185 ied = crkedge(ilay)%IEDGETG(k,elcrktg)
186 IF (ied > 0) THEN
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 == ixtgTHEN
192 p1 = k
193 p2 = dd(k)
194 ELSEIF (nod2 == ixtg(k+1,i+nft).and.nod1 == ixtg(dd(k)+1,i+nft))THEN
195 p1 = dd(k)
196 p2 = k
197 ENDIF
198 xin(ied,i) = xn(p1) + beta*(xn(p2) - xn(p1))
199 yin(ied,i) = yn(p1) + beta*(yn(p2) - yn(p1))
200 xm(ied) = half*(xn(p1)+xn(p2))
201 ym(ied) = half*(yn(p1)+yn(p2))
202 ENDIF
203 ENDDO
204
205 DO k=1,3
206 fi = zero
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
209 ENDDO
210 ENDIF
211 ENDDO
212
213 IF (ilay == 1) THEN
214 DO i=jft,jlt
215 elcrktg = iel_crktg(i+nft)
216 elcrk = elcrktg + ecrkxfec
217 elcut = crkedge(ilay)%LAYCUT(elcrk)
218 IF (elcut /= 0) THEN
219 elcutc(1,i+nft) = 1
220 elcutc(2,i+nft) = 1
221 ENDIF
222 ENDDO
223 ENDIF
224
225 DO i=jft,jlt
226 elcrktg = iel_crktg(i+nft)
227 elcrk = elcrktg + ecrkxfec
228 laycut = crkedge(ilay)%LAYCUT(elcrk)
229 IF (laycut /= 0) THEN
230
231 iadc(1) = iad_crktg(1,elcrktg)
232 iadc(2) = iad_crktg(2,elcrktg)
233 iadc(3) = iad_crktg(3,elcrktg)
234
235 ienr0(1) = crknodiad(iadc(1))
236 ienr0(2) = crknodiad(iadc(2))
237 ienr0(3) = crknodiad(iadc(3))
238
239 n(1) = ixtg(2,i+nft)
240 n(2) = ixtg(3,i+nft)
241 n(3) = ixtg(4,i+nft)
242
243 nx(1) = inod_crk(n(1))
244 nx(2) = inod_crk(n(2))
245 nx(3) = inod_crk(n(3))
246
247 ienr(1) = ienr0(1) + knod2elc(nx(1))*(ilay-1)
248 ienr(2) = ienr0(2) + knod2elc(nx(2))*(ilay-1)
249 ienr(3) = ienr0(3) + knod2elc(nx(3))*(ilay-1)
250
251 ntag(1:3) = 0
252 edgeenr(1:3) = 0
253 enr(1:3) = 0
254
255 DO k=1,3
256 ied = crkedge(ilay)%IEDGETG(k,elcrktg)
257 IF (ied > 0) THEN
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
266 p1 = k
267 p2 = dd(k)
268 ELSEIF (nod2 == n(k) .and. nod1 == n(dd(k))) THEN
269 p1 = dd(k)
270 p2 = k
271 ENDIF
272 edgeenr(p1) = ie10
273 edgeenr(p2) = ie20
274 ENDIF
275 ENDDO
276
277 DO k=1,3
278 IF (ntag(k) > 0) THEN
279 enr(k) = edgeenr(k)
280 ELSE
281 enr(k) = ienr(k)
282 ENDIF
283 ENDDO
284
285 DO k=1,3
286 IF (ienr(k) > ienrnod) THEN
287 WRITE(iout,*) 'ERROR CRACK INITIATION,ENRICHMENT NODE EXCEEDED'
289 ENDIF
290 ENDDO
291
292 isign1 = int(sign(one,fit(1,i)))
293 isign2 = int(sign(one,fit(2,i)))
294 isign3 = int(sign(one,fit(3,i)))
295
296 IF (fit(1,i) == zero) isign1 = 0
297 IF (fit(2,i) == zero) isign2 = 0
298 IF (fit(3,i) == zero) isign3 = 0
299
300 DO k=1,nxel
301 isign0(k,1) = isign1
302 isign0(k,2) = isign2
303 isign0(k,3) = isign3
304 ENDDO
305
306 itri = 0
307 nm = 0
308 np = 0
309 DO k=1,3
310 IF (isign0(1,k) > 0) THEN
311 itri = itri + 1
312 np = k
313 ELSEIF (isign0(1,k) < 0) THEN
314 nm = k
315 ENDIF
316 ENDDO
317 IF (itri == 1) THEN
318 itri = -1
319 nx1 = np
320 ELSEIF (itri == 2) THEN
321 itri = 1
322 nx1 = nm
323 ENDIF
324 nx2 = dx(nx1+1)
325 nx3 = dx(nx2+1)
328
332
333
334
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)
338
339 IF (isign0(1,1) > 0)
crklvset(pp1)%ENR0(1,iadc(1))
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
342
346
347
348
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)
352
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
356
360
361
362
363 IF (itri < 0) THEN
364 ie1 = xedge3n(nx1,elcrktg)
365 ie2 = xedge3n(nx3,elcrktg)
366
370 crklvset(pp2)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
371
372 beta = crkedge(ilay)%RATIO(ie2)
373 nod1 = nodedge(1,ie2)
374 nod2 = nodedge(2,ie2)
375 k = nx3 ! starting edge node(local)
376 IF (nod1 == ixtg(k+1,i+nft) .and.
377 . nod2 == ixtg(dd(k)+1,i+nft)) THEN
378 p1 = k
379 p2 = dd(k)
380 sigbeta = ie2
381 ELSEIF (nod2 == ixtg(k+1,i+nft) .and.
382 . nod1 == ixtg(dd(k)+1,i+nft)) THEN
383 p1 = dd(k)
384 p2 = k
385 sigbeta = -ie2
386 ENDIF
387
388
389 x1 = xxl(nx1,i)
390 y1 = yyl(nx1,i)
391 ied = crkedge(ilay)%IEDGETG(nx1,elcrktg)
392 x2 = xin(ied,i)
393 y2 = yin(ied,i)
394 ied = crkedge(ilay)%IEDGETG(nx3,elcrktg)
395 x3 = xin(ied,i)
396 y3 = yin(ied,i)
397 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
398 area1 = area1 /
area(i)
399 x1 = xxl(nx2,i)
400 y1 = yyl(nx2,i)
401 x2 = xxl(nx3,i)
402 y2 = yyl(nx3,i)
403 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
404 area3 = one - area1 - area2
405
406 ELSEIF (itri > 0) THEN
407
408 ie1 = xedge3n(nx1,elcrktg)
409
413 crklvset(pp1)%ENR0(1,iadc(nx1)) = -crknodiad(iadc(nx1)) - knod2elc(nx(nx1))*(ilay-1)
414
415 beta = crkedge(ilay)%RATIO(ie1)
416 nod1 = nodedge(1,ie1)
417 nod2 = nodedge(2,ie1)
418 k = nx1
419 IF (nod1 == ixtg(k+1,i+nft) .and.
420 . nod2 == ixtg(dd(k)+1,i+nft)) THEN
421 p1 = k
422 p2 = dd(k)
423 sigbeta = ie1
424 ELSEIF (nod2 == ixtg(k+1,i+nft) .and.
425 . nod1 == ixtg(dd(k)+1,i+nft)) THEN
426 p1 = dd(k)
427 p2 = k
428 sigbeta = -ie1
429 ENDIF
430
431
432 x1 = xxl(nx1,i)
433 y1 = yyl(nx1,i)
434 ied = crkedge(ilay)%IEDGETG(nx3,elcrktg)
435 x2 = xin(ied,i)
436 y2 = yin(ied,i)
437 ied = crkedge(ilay)%IEDGETG(nx1,elcrktg)
438 x3 = xin(ied,i)
439 y3 = yin(ied,i)
440 area1 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
441 area1 = area1 /
area(i)
442 x1 = xxl(nx2,i)
443 y1 = yyl(nx2,i)
444 x3 = xxl(nx3,i)
445 y3 = yyl(nx3,i)
446 area2 = half*abs((x1-x3)*(y2-y1) - (x1-x2)*(y3-y1))
447 area3 = one - area1 - area2
448
449 ENDIF
450
454
458
459 ENDIF
460 ENDDO
461 ENDDO
462
463 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