32 . X1L ,Y1L ,X2L ,Y2L ,X3L ,
33 . Y3L ,X4L ,Y4L ,LFT ,LLT ,
34 . NFT ,NXLAY ,IELCRKC ,EDGEC ,BETA0 ,
35 . IEDGESH4,ELCUT ,XNOD ,IXC ,NODEDGE ,
36 . TAGSKYC ,KNOD2ELC,TAGEDGE ,CRKLVSET ,CRKSHELL,
37 . CRKEDGE ,XFEM_PHANTOM)
43 use element_mod ,
only : nixc
47#include "implicit_f.inc"
55#include "com_xfem1.inc"
59 INTEGER LFT,LLT,NFT,NXLAY
60 INTEGER IELCRKC(*),EDGEC(4,*),IEDGESH4(4,*),ELCUT(*),XNOD(2,2),
61 . IXC(NIXC,*),NODEDGE(2,*),TAGSKYC(4,*),KNOD2ELC(*),TAGEDGE(*)
63 . X1L(*),Y1L(*),X2L(*),Y2L(*),X3L(*),Y3L(*),X4L(*),Y4L(*),
66 TYPE (elbuf_struct_),
TARGET :: elbuf_str
67 TYPE (ELBUF_STRUCT_),
DIMENSION(NXEL) ,
TARGET :: XFEM_STR
68 TYPE (XFEM_LVSET_) ,
DIMENSION(NLEVMAX) :: CRKLVSET
69 TYPE (XFEM_SHELL_) ,
DIMENSION(NLEVMAX) :: CRKSHELL
70 TYPE (XFEM_EDGE_) ,
DIMENSION(NXLAYMAX) ::
71 TYPE (XFEM_PHANTOM_),
DIMENSION(NXLAYMAX) :: XFEM_PHANTOM
75 INTEGER I,K,II,R,ELCRK,IED,p1,p2,dd(4),d1(4),d2(4),IFI(2),
76 . iedge,icrk,ilev(nxel),il,ilay,n(4),isign0(4),
77 . nod1,nod2,ixel,ienr0(4),ienr(4),ntag(4)
79 . fit(4,mvsiz),xn(4),yn(4),xmi(2),ymi(2),beta(2,mvsiz),
83 TYPE(g_bufel_) ,
POINTER :: GBUF
84 TYPE(l_bufel_) ,
POINTER :: LBUF
100 IF (elcut(i+nft) > 0)
THEN
106 xmi(ied) = half*(xn(p1)+xn(p2))
107 ymi(ied) = half*(yn(p1)+yn(p2))
112 fit(r,i) = lsintx(xmi(1),ymi(1),xmi(2),ymi(2),xn(r),yn(r))
118 elcrk = ielcrkc(i+nft)
121 IF (elcut(i+nft) > 0)
THEN
124 iedge = iedgesh4(r,elcrk)
127 nod1 = nodedge(1,iedge)
128 nod2 = nodedge(2,iedge)
129 IF (nod1 == xnod(ied,1) .and. nod2 == xnod(ied,2))
THEN
130 beta(ied,i) = beta0(ied)
131 ELSE IF (nod2 == xnod(ied,1) .and. nod1 == xnod(ied,2))
THEN
132 beta(ied,i) = one - beta0(ied)
146 elcrk = ielcrkc(i+nft)
147 IF (elcut(i+nft) > 0)
THEN
148 icrk = crkshell(ilev(1))%PHANTOMG(elcrk)
149 crklvset(ilev(1))%ELCUT(elcrk) = icrk
150 crklvset(ilev(2))%ELCUT(elcrk) = -icrk
152 xfem_phantom(ilay)%ELCUT(elcrk) = icrk
153 crkedge(ilay)%LAYCUT(elcrk) = 2
160 isign0(1) = int(sign(one,fit(1,i))) * icrk
161 isign0(2) = int(sign(one,fit(2,i))) * icrk
162 isign0(3) = int(sign(one,fit(3,i))) * icrk
163 isign0(4) = int(sign(one,fit(4,i))) * icrk
172 ntag(r) = ntag(r) + 1
173 ntag(dd(r)) = ntag(dd(r)) + 1
181 nod1 = nodedge(1,iedge)
182 nod2 = nodedge(2,iedge)
183 IF(nod1 == n(r) .and. nod2 == n(dd(r)))
THEN
190 IF(ntag(p1) > 0.AND.crkedge(ilay)%EDGEENR(1,iedge) > 0)
191 . ienr0(p1) = crkedge(ilay)%EDGEENR(1,iedge)
192 IF(ntag(p2) > 0.AND.crkedge(ilay)%EDGEENR(2,iedge) > 0)
193 . ienr0(p2) = crkedge(ilay)%EDGEENR(2,iedge)
198 IF(ienr0(r) /= 0)
THEN
201 ienr(r) = tagskyc(r,i+nft)+knod2elc(n(r))*(ilay-1)
207 iedge = iedgesh4(r,elcrk)
210 crklvset(ilev(il))%EDGE(r,elcrk) = ied
211 crklvset(ilev(il))%ICUTEDGE(iedge) = 1
212 crklvset(ilev(il))%RATIOEDGE(iedge) = beta(ied,i)
215 crkedge(ilay)%EDGETIP(1,iedge) =
max(ied,
216 . crkedge(ilay)%EDGETIP(1,iedge))
217 crkedge(ilay)%EDGETIP(2,iedge) =
218 . crkedge(ilay)%EDGETIP(2,iedge) + 1
222 IF(crkedge(ilay)%EDGEICRK(iedge) == 0)
223 . crkedge(ilay)%EDGEICRK(iedge) = icrk
225 nod1 = nodedge(1,iedge)
226 nod2 = nodedge(2,iedge)
230 IF(nod1 == n(r) .and. nod2 == n(dd(r)))
THEN
232 ifi(2) = isign0(dd(r))
235 ELSE IF(nod2 == n(r) .and. nod1 == n(dd(r)))
THEN
236 ifi(1) = isign0(dd(r))
241 IF(crkedge(ilay)%EDGEIFI(1,iedge) == 0)
242 . crkedge(ilay)%EDGEIFI(1,iedge) = ifi(1)
243 IF(crkedge(ilay)%EDGEIFI(2,iedge) == 0)
244 . crkedge(ilay)%EDGEIFI(2,iedge) = ifi(2)
245 IF(crkedge(ilay)%EDGEENR(1,iedge) == 0)
246 . crkedge(ilay)%EDGEENR(1,iedge
247 IF(crkedge(ilay)%EDGEENR(2,iedge) == 0)
248 . crkedge(ilay)%EDGEENR(2,iedge) = ienr(p2)
260 lbuf => xfem_str(ixel)%BUFLY(ilay)%LBUF(1,1,1)
262 IF(elcut(i+nft) > 0)
THEN
263 off_phantom = lbuf%OFF(i)
264 lbuf%OFF(i) = - off_phantom
271 gbuf => xfem_str(ixel)%GBUF
273 IF(elcut(i+nft) > 0)
THEN
274 off_phantom = gbuf%OFF(i)
275 gbuf%OFF(i) = - off_phantom
284 IF(elcut(i+nft) > 0)
THEN
285 elbuf_str%GBUF%OFF(i) = zero
290 elcrk = ielcrkc(i+nft)
291 IF(elcut(i+nft) > 0)
THEN
294 iedge = iedgesh4(r,elcrk)
296 tagedge(iedge) = tagedge(iedge) + 1
subroutine preinicrk4n(elbuf_str, xfem_str, x1l, y1l, x2l, y2l, x3l, y3l, x4l, y4l, lft, llt, nft, nxlay, ielcrkc, edgec, beta0, iedgesh4, elcut, xnod, ixc, nodedge, tagskyc, knod2elc, tagedge, crklvset, crkshell, crkedge, xfem_phantom)