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)
46#include "implicit_f.inc"
54#include "com_xfem1.inc"
58 INTEGER LFT,LLT,,NXLAY
59 INTEGER IELCRKC(*),EDGEC(4,*),IEDGESH4(4,*),ELCUT(*),XNOD(2,2),
60 . IXC(NIXC,*),NODEDGE(2,*),TAGSKYC(4,*),KNOD2ELC(*),(*)
62 . X1L(*),Y1L(*),X2L(*),Y2L(*),X3L(*),Y3L(*),X4L(*),Y4L(*),
65 TYPE (ELBUF_STRUCT_),
TARGET :: ELBUF_STR
66 TYPE (ELBUF_STRUCT_),
DIMENSION(NXEL) ,
TARGET :: XFEM_STR
67 TYPE (XFEM_LVSET_) ,
DIMENSION(NLEVMAX) ::
68 TYPE (XFEM_SHELL_) ,
DIMENSION(NLEVMAX) :: CRKSHELL
69 TYPE (XFEM_EDGE_) ,
DIMENSION(NXLAYMAX) ::
70 TYPE (XFEM_PHANTOM_),
DIMENSION(NXLAYMAX) :: XFEM_PHANTOM
74 INTEGER I,K,II,R,ELCRK,IED,p1,p2,dd(4),d1(4),d2(4),IFI(2),
75 . icut,iedge,ic1,ic2,icrk,ilev(nxel),il,ilay,n(4),isign0(4),
76 . nod1,nod2,ixel,ienr0(4),ienr(4),ntag(4)
78 . fit(4,mvsiz),xn(4),yn(4),xmi(2),ymi(2),beta(2,mvsiz),
82 TYPE(g_bufel_) ,
POINTER :: GBUF
83 TYPE(l_bufel_) ,
POINTER :: LBUF
99 IF (elcut(i+nft) > 0)
THEN
105 xmi(ied) = half*(xn(p1)+xn(p2))
106 ymi(ied) = half*(yn(p1)+yn(p2))
111 fit(r,i) = lsintx(xmi(1),ymi(1),xmi(2),ymi(2),xn(r),yn(r))
117 elcrk = ielcrkc(i+nft)
120 IF (elcut(i+nft) > 0)
THEN
123 iedge = iedgesh4(r,elcrk)
126 nod1 = nodedge(1,iedge)
127 nod2 = nodedge(2,iedge)
128 IF (nod1 == xnod(ied,1) .and. nod2 == xnod(ied,2))
THEN
129 beta(ied,i) = beta0(ied)
130 ELSE IF (nod2 == xnod(ied,1) .and. nod1 == xnod(ied,2))
THEN
131 beta(ied,i) = one - beta0(ied)
145 elcrk = ielcrkc(i+nft)
146 IF (elcut(i+nft) > 0)
THEN
147 icrk = crkshell(ilev(1))%PHANTOMG(elcrk)
148 crklvset(ilev(1))%ELCUT(elcrk) = icrk
149 crklvset(ilev(2))%ELCUT(elcrk) = -icrk
151 xfem_phantom(ilay)%ELCUT(elcrk) = icrk
152 crkedge(ilay)%LAYCUT(elcrk) = 2
159 isign0(1) = int(sign(one,fit(1,i))) * icrk
160 isign0(2) = int(sign(one,fit(2,i))) * icrk
161 isign0(3) = int(sign(one,fit(3,i))) * icrk
162 isign0(4) = int(sign(one,fit(4,i))) * icrk
171 ntag(r) = ntag(r) + 1
172 ntag(dd(r)) = ntag(dd(r)) + 1
178 iedge = iedgesh4(r,elcrk)
180 nod1 = nodedge(1,iedge)
181 nod2 = nodedge(2,iedge)
182 IF(nod1 == n(r) .and. nod2 == n(dd(r)))
THEN
185 ELSE IF(nod2 == n(r) .and. nod1 == n(dd(r)))
THEN
189 IF(ntag(p1) > 0.AND.crkedge(ilay)%EDGEENR(1,iedge) > 0)
190 . ienr0(p1) = crkedge(ilay)%EDGEENR(1,iedge)
191 IF(ntag(p2) > 0.AND.crkedge(ilay)%EDGEENR(2,iedge) > 0)
192 . ienr0(p2) = crkedge(ilay)%EDGEENR(2,iedge)
197 IF(ienr0(r) /= 0)
THEN
200 ienr(r) = tagskyc(r,i+nft)+knod2elc(n(r))*(ilay-1)
206 iedge = iedgesh4(r,elcrk)
209 crklvset(ilev(il))%EDGE(r,elcrk) = ied
210 crklvset(ilev(il))%ICUTEDGE(iedge) = 1
211 crklvset(ilev(il))%RATIOEDGE(iedge) = beta(ied,i)
214 crkedge(ilay)%EDGETIP(1,iedge) =
max(ied,
215 . crkedge(ilay)%EDGETIP(1,iedge))
216 crkedge(ilay)%EDGETIP(2,iedge) =
217 . crkedge(ilay)%EDGETIP(2,iedge) + 1
221 IF(crkedge(ilay)%EDGEICRK(iedge) == 0)
222 . crkedge(ilay)%EDGEICRK(iedge) = icrk
224 nod1 = nodedge(1,iedge)
225 nod2 = nodedge(2,iedge)
229 IF(nod1 == n(r) .and. nod2 == n(dd(r)))
THEN
231 ifi(2) = isign0(dd(r))
234 ELSE IF(nod2 == n(r) .and. nod1 == n(dd(r)))
THEN
235 ifi(1) = isign0(dd(r))
240 IF(crkedge(ilay)%EDGEIFI(1,iedge) == 0)
241 . crkedge(ilay)%EDGEIFI(1,iedge) = ifi(1)
242 IF(crkedge(ilay)%EDGEIFI(2,iedge) == 0)
243 . crkedge(ilay)%EDGEIFI(2,iedge) = ifi(2)
244 IF(crkedge(ilay)%EDGEENR(1,iedge) == 0)
245 . crkedge(ilay)%EDGEENR(1,iedge) = ienr(p1)
246 IF(crkedge(ilay)%EDGEENR(2,iedge) == 0)
247 . crkedge(ilay)%EDGEENR(2,iedge) = ienr(p2)
259 lbuf => xfem_str(ixel)%BUFLY(ilay)%LBUF(1,1,1)
261 IF(elcut(i+nft) > 0)
THEN
262 off_phantom = lbuf%OFF(i)
263 lbuf%OFF(i) = - off_phantom
270 gbuf => xfem_str(ixel)%GBUF
272 IF(elcut(i+nft) > 0)
THEN
273 off_phantom = gbuf%OFF(i)
274 gbuf%OFF(i) = - off_phantom
283 IF(elcut(i+nft) > 0)
THEN
284 elbuf_str%GBUF%OFF(i) = zero
289 elcrk = ielcrkc(i+nft)
290 IF(elcut(i+nft) > 0)
THEN
293 iedge = iedgesh4(r,elcrk)
295 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)