32 . X1L ,Y1L ,X2L ,Y2L ,X3L ,
33 . Y3L ,LFT ,LLT ,NFT ,NXLAY ,
34 . IELCRKTG,EDGETG ,BETA0 ,IEDGESH3,ELCUT ,
35 . XNOD ,IXTG ,NODEDGE ,TAGSKYTG,KNOD2ELC,
36 . TAGEDGE ,CRKLVSET,CRKSHELL,CRKEDGE ,XFEM_PHANTOM)
45#include "implicit_f.inc"
53#include "com_xfem1.inc"
57 INTEGER LFT,LLT,NFT,NXLAY
58 INTEGER IELCRKTG(*),EDGETG(3,*),IEDGESH3(3,*),ELCUT(*),
59 . XNOD(2,2),IXTG(NIXTG,*),NODEDGE(2,*),TAGSKYTG(3,*),KNOD2ELC(*),
62 . x1l(*),y1l(*),x2l(*),y2l(*),x3l(*),y3l(*),beta0(2)
64 TYPE (ELBUF_STRUCT_),
TARGET :: ELBUF_STR
65 TYPE (ELBUF_STRUCT_),
DIMENSION(NXEL) ,
TARGET :: XFEM_STR
66 TYPE (XFEM_LVSET_) ,
DIMENSION(NLEVMAX) :: CRKLVSET
67 TYPE (XFEM_SHELL_) ,
DIMENSION(NLEVMAX) :: CRKSHELL
68 TYPE (XFEM_EDGE_) ,
DIMENSION(NXLAYMAX) :: CRKEDGE
69 TYPE (XFEM_PHANTOM_),
DIMENSION(NXLAYMAX) :: XFEM_PHANTOM
73 INTEGER I,K,II,IL,ILAY,ELCRK,IED
75 INTEGER dd(3),d1(3),d2(3),IFI(2),ILEV(NXEL),N(3),ISIGN0(3),
76 . IENR0(3),IENR(3),NTAG(3)
78 . fit(3,mvsiz),xn(3),yn(3),xmi(2),ymi(2),beta(2,mvsiz),
87TYPE(l_bufel_) ,
POINTER :: LBUF
97 IF (elcut(i+nft) > 0)
THEN
101 ied = edgetg(k,i+nft)
103 xmi(ied) = half*(xn(p1) + xn(p2))
104 ymi(ied) = half*(yn(p1) + yn(p2))
109 fit(k,i) = lsintx(xmi(1),ymi(1),xmi(2),ymi(2),xn(k),yn(k))
115 elcrk = ielcrktg(i+nft)
118 IF(elcut(i+nft) > 0)
THEN
120 jcrk = elcrk - ecrkxfec
122 iedge = iedgesh3(k,jcrk)
123 ied = edgetg(k,i+nft)
125 nod1 = nodedge(1,iedge)
126 nod2 = nodedge(2,iedge)
127 IF (nod1 == xnod(ied,1) .and. nod2 == xnod(ied,2))
THEN
128 beta(ied,i) = beta0(ied)
129 ELSE IF (nod2 == xnod(ied,1) .and. nod1 == xnod
THEN
130 beta(ied,i) = one - beta0(ied)
143 elcrk = ielcrktg(i+nft)
144 jcrk = elcrk - ecrkxfec
145 IF (elcut(i+nft) > 0)
THEN
146 icrk = crkshell(ilev(1))%PHANTOMG(elcrk)
147 crklvset(ilev(1))%ELCUT(elcrk) = icrk
148 crklvset(ilev(2))%ELCUT(elcrk) = -icrk
150 xfem_phantom(ilay)%ELCUT(elcrk) = icrk
151 crkedge(ilay)%LAYCUT(elcrk) = 2
157 isign0(1) = int(sign(one,fit(1,i))) * icrk
159 isign0(3) = int(sign(one,fit(3,i))) * icrk
166 ied = edgetg(k,i+nft)
168 ntag(k) = ntag(k) + 1
169 ntag(dd(k)) = ntag(dd(k)) + 1
174 ied = edgetg(k,i+nft)
175 iedge = iedgesh3(k,jcrk)
177 nod1 = nodedge(1,iedge)
178 nod2 = nodedge(2,iedge)
179 IF(nod1 == n(k) .and. nod2 == n(dd(k)))
THEN
182 ELSE IF(nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
186 IF(ntag(p1) > 0.AND.crkedge(ilay)%EDGEENR(1,iedge) > 0)
187 . ienr0(p1) = crkedge(ilay)%EDGEENR(1,iedge)
188 IF(ntag(p2) > 0.AND.crkedge(ilay)%EDGEENR(2,iedge)
189 . ienr0(p2) = crkedge(ilay)%EDGEENR(2,iedge)
194 IF(ienr0(k) /= 0)
THEN
197 ienr(k) = tagskytg(k,i+nft)+knod2elc(n(k))*(ilay-1)
202 ied = edgetg(k,i+nft)
203 iedge = iedgesh3(k,jcrk)
206 crklvset(ilev(il))%EDGETG(k,jcrk) = ied
207 crklvset(ilev(il))%ICUTEDGE(iedge) = 1
208 crklvset(ilev(il))%RATIOEDGE(iedge) = beta(ied,i)
211 crkedge(ilay)%EDGETIP(1,iedge) =
max(ied,
212 . crkedge(ilay)%EDGETIP(1,iedge))
213 crkedge(ilay)%EDGETIP(2,iedge) =
214 . crkedge(ilay)%EDGETIP(2,iedge) + 1
218 IF(crkedge(ilay)%EDGEICRK(iedge) == 0)
219 . crkedge(ilay)%EDGEICRK(iedge) = icrk
221 nod1 = nodedge(1,iedge)
222 nod2 = nodedge(2,iedge)
226 IF(nod1 == n(k) .and. nod2 == n(dd(k)))
THEN
228 ifi(2) = isign0(dd(k))
231 ELSE IF(nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
232 ifi(1) = isign0(dd(k))
237 IF(crkedge(ilay)%EDGEIFI(1,iedge) == 0)
238 . crkedge(ilay)%EDGEIFI(1,iedge) = ifi(1)
239 IF(crkedge(ilay)%EDGEIFI(2,iedge) == 0)
240 . crkedge(ilay)%EDGEIFI(2,iedge) = ifi(2)
242 IF(crkedge(ilay)%EDGEENR(1,iedge) == 0)
243 . crkedge(ilay)%EDGEENR(1,iedge) = ienr(p1)
245 IF(crkedge(ilay)%EDGEENR(2,iedge) == 0)
246 . 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
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 = ielcrktg(i+nft) - ecrkxfec
291 IF (elcut(i+nft) > 0)
THEN
293 ied = edgetg(k,i+nft)
294 iedge = iedgesh3(k,elcrk)
295 IF (ied > 0 .and. iedge > 0)
THEN
296 tagedge(iedge) = tagedge(iedge) + 1
subroutine preinicrk3n(elbuf_str, xfem_str, x1l, y1l, x2l, y2l, x3l, y3l, lft, llt, nft, nxlay, ielcrktg, edgetg, beta0, iedgesh3, elcut, xnod, ixtg, nodedge, tagskytg, knod2elc, tagedge, crklvset, crkshell, crkedge, xfem_phantom)