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)
42 use element_mod ,
only : nixtg
46#include "implicit_f.inc"
54#include "com_xfem1.inc"
58 INTEGER LFT,LLT,NFT,NXLAY
59 INTEGER IELCRKTG(*),EDGETG(3,*),IEDGESH3(3,*),ELCUT(*),
60 . XNOD(2,2),IXTG(NIXTG,*),NODEDGE(2,*),TAGSKYTG(3,*),KNOD2ELC(*),
63 . x1l(*),y1l(*),x2l(*),y2l(*),x3l(*),y3l(*),beta0(2)
65 TYPE (ELBUF_STRUCT_),
TARGET :: ELBUF_STR
66 TYPE (ELBUF_STRUCT_),
DIMENSION(NXEL) ,
TARGET :: XFEM_STR
67 TYPE (XFEM_LVSET_) ,
DIMENSION(NLEVMAX) :: CRKLVSET
68 TYPE (XFEM_SHELL_) ,
DIMENSION(NLEVMAX) :: CRKSHELL
69 TYPE (XFEM_EDGE_) ,
DIMENSION(NXLAYMAX) :: CRKEDGE
70 TYPE (XFEM_PHANTOM_),
DIMENSION(NXLAYMAX) :: XFEM_PHANTOM
74 INTEGER I,K,II,IL,ILAY,ELCRK,IED,IEDGE,ICRK,p1,p2,
76 INTEGER dd(3),d1(3),d2(3),IFI(2),ILEV(NXEL),N(3),ISIGN0(3),
77 . IENR0(3),IENR(3),NTAG(3)
79 . fit(3,mvsiz),xn(3),yn(3),xmi(2),ymi(2),beta(2,mvsiz),
87 TYPE(g_bufel_) ,
POINTER ::
88 TYPE(l_bufel_) ,
POINTER :: LBUF
98 IF (elcut(i+nft) > 0)
THEN
102 ied = edgetg(k,i+nft)
104 xmi(ied) = half*(xn(p1) + xn(p2))
105 ymi(ied) = half*(yn(p1) + yn(p2))
110 fit(k,i) = lsintx(xmi(1),ymi(1),xmi(2),ymi(2),xn(k),yn(k))
116 elcrk = ielcrktg(i+nft)
119 IF(elcut(i+nft) > 0)
THEN
121 jcrk = elcrk - ecrkxfec
123 iedge = iedgesh3(k,jcrk)
124 ied = edgetg(k,i+nft)
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)
144 elcrk = ielcrktg(i+nft)
145 jcrk = elcrk - ecrkxfec
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
158 isign0(1) = int(sign(one,fit(1,i))) * icrk
159 isign0(2) = int(sign(one,fit(2,i))) * icrk
160 isign0(3) = int(sign(one,fit(3,i))) * icrk
167 ied = edgetg(k,i+nft)
169 ntag(k) = ntag(k) + 1
170 ntag(dd(k)) = ntag(dd(k)) + 1
175 ied = edgetg(k,i+nft)
176 iedge = iedgesh3(k,jcrk)
178 nod1 = nodedge(1,iedge)
179 nod2 = nodedge(2,iedge)
180 IF(nod1 == n(k) .and. nod2 == n(dd(k)))
THEN
183 ELSE IF(nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
187 IF(ntag(p1) > 0.AND.crkedge(ilay)%EDGEENR(1,iedge) > 0)
188 . ienr0(p1) = crkedge(ilay)%EDGEENR(1,iedge)
189 IF(ntag(p2) > 0.AND.crkedge(ilay)%EDGEENR(2,iedge) > 0)
190 . ienr0(p2) = crkedge(ilay)%EDGEENR(2,iedge)
195 IF(ienr0(k) /= 0)
THEN
198 ienr(k) = tagskytg(k,i+nft)+knod2elc(n(k))*(ilay-1)
203 ied = edgetg(k,i+nft)
204 iedge = iedgesh3(k,jcrk)
207 crklvset(ilev(il))%EDGETG(k,jcrk) = ied
208 crklvset(ilev(il))%ICUTEDGE(iedge) = 1
209 crklvset(ilev(il))%RATIOEDGE(iedge) = beta(ied,i)
212 crkedge(ilay)%EDGETIP(1,iedge) =
max(ied,
213 . crkedge(ilay)%EDGETIP(1,iedge))
214 crkedge(ilay)%EDGETIP(2,iedge) =
215 . crkedge(ilay)%EDGETIP(2,iedge) + 1
219 IF(crkedge(ilay)%EDGEICRK(iedge) == 0)
220 . crkedge(ilay)%EDGEICRK(iedge) = icrk
222 nod1 = nodedge(1,iedge)
223 nod2 = nodedge(2,iedge)
227 IF(nod1 == n(k) .and. nod2 == n(dd(k)))
THEN
229 ifi(2) = isign0(dd(k))
232 ELSE IF(nod2 == n(k) .and. nod1 == n(dd(k)))
THEN
233 ifi(1) = isign0(dd(k))
238 IF(crkedge(ilay)%EDGEIFI(1,iedge) == 0)
239 . crkedge(ilay)%EDGEIFI(1,iedge) = ifi(1)
240 IF(crkedge(ilay)%EDGEIFI(2,iedge) == 0)
241 . crkedge(ilay)%EDGEIFI(2,iedge) = ifi(2)
243 IF(crkedge(ilay)%EDGEENR(1,iedge) == 0)
244 . crkedge(ilay)%EDGEENR(1,iedge) = ienr(p1)
246 IF(crkedge(ilay)%EDGEENR(2,iedge) == 0)
247 . crkedge(ilay)%EDGEENR(2,iedge) = ienr(p2)
262 IF(elcut(i+nft) > 0)
THEN
263 off_phantom = lbuf%OFF(i)
264 lbuf%OFF(i) = - off_phantom
272 gbuf => xfem_str(ixel)%GBUF
274 IF(elcut(i+nft) > 0)
THEN
275 off_phantom = gbuf%OFF(i)
276 gbuf%OFF(i) = - off_phantom
285 IF(elcut(i+nft) > 0)
THEN
286 elbuf_str%GBUF%OFF(i) = zero
291 elcrk = ielcrktg(i+nft) - ecrkxfec
292 IF (elcut(i+nft) > 0)
THEN
294 ied = edgetg(k,i+nft)
295 iedge = iedgesh3(k,elcrk)
296 IF (ied > 0 .and. iedge > 0)
THEN
297 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)