44 . IPARG ,IXC ,IXTG ,XREFC ,XREFTG ,
45 . X ,ICRK ,INOD_CRK,NXSEG ,NODLS ,
46 . RATIOLS ,NTAG ,IELCRKC ,IELCRKTG,IEDGESH4,
47 . IEDGESH3,NODEDGE ,TAGSKYC ,TAGSKYTG,KNOD2ELC,
48 . TAGEDGE ,CRKLVSET,CRKSHELL,CRKEDGE ,XFEM_PHANTOM,
57 use element_mod ,
only : nixc,nixtg
61#include "implicit_f.inc"
72#include "vect01_c.inc"
73#include "com_xfem1.inc"
77 INTEGER (NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),
78 . ICRK,INOD_CRK(*),NXSEG,NODLS(2,*),IELCRKC(*),IELCRKTG(*),
79 . NTAG(*),IEDGESH4(4,*),IEDGESH3(3,*),NODEDGE(2,*),
80 . TAGSKYC(4,*),TAGSKYTG(3,*),KNOD2ELC(*),TAGEDGE(*),ITAB(*),ID
82 . X(3,*),XREFC(4,3,*),XREFTG(3,3,*),RATIOLS(*)
84 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP) :: ELBUF_TAB
85 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP,NXEL) :: XFEM_TAB
86 TYPE (XFEM_LVSET_) ,
DIMENSION(NLEVMAX) :: CRKLVSET
87 TYPE (XFEM_SHELL_) ,
DIMENSION(NLEVMAX) :: CRKSHELL
88 TYPE (XFEM_EDGE_) ,
DIMENSION(NXLAYMAX) :: CRKEDGE
89 TYPE (XFEM_PHANTOM_),
DIMENSION(NXLAYMAX) :: XFEM_PHANTOM
90 CHARACTER(LEN=NCHARTITLE)::TITR
94 INTEGER XNOD(2,2),TAGXNOD(NXSEG+1),
95 . ngl(mvsiz),ix1(mvsiz),ix2(mvsiz),ix3(mvsiz),ix4(mvsiz)
96 INTEGER I,K,IED,NG,NEL,LS,FAC,IHBE,ISH3N,IXFEM,ITG,NELCUT,ILAY,NXLAY
97 my_real,
DIMENSION(MVSIZ) :: X1,X2,X3,X4,Y1,Y2,Y3,Y4,Z1,Z2,Z3,Z4,
98 . X1L,Y1L,X2L,,X3L,Y3L,X4L,Y4L
102 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: ELCUT
103 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: EDGEC,EDGETG
104 my_real,
DIMENSION(:,:),
ALLOCATABLE :: BETA
107 ALLOCATE (elcut(numelc+numeltg))
108 ALLOCATE (beta(2,numelc+numeltg))
109 ALLOCATE (edgec(4,numelc))
110 ALLOCATE (edgetg(3,numeltg))
134 xnod(1,1) = nodls(1,ls)
135 xnod(1,2) = nodls(2,ls)
137 xnod(2,1) = nodls(1,ls+1)
138 xnod(2,2) = nodls(2,ls+1)
140 beta0(1) = ratiols(ls)
141 beta0(2) = ratiols(ls+1)
145 IF(ratio == zero)
THEN
147 ELSEIF(ratio == one)
THEN
156 IF (ixfem == 0) cycle
158 nxlay = elbuf_tab(ng)%NLAY
166 IF (ity == 7) ihbe = 0
177 IF(xnod(1,1) == xnod(1,2)) fac = 1
188 IF(xnod(2,1) == xnod(2,2)) fac = 2
202 CALL elcut4n(i, ixc(1,nft+1), xnod, edgec(1,nft+1),fac,ied)
203 IF (fac == 1) tagxnod(ls) = 1
209 CALL elcut4n(i, ixc(1,nft+1), xnod, edgec(1,nft+1),fac,ied)
210 IF (fac == 2) tagxnod(ls+1) = 1
217 numelcrk = numelcrk + 1
221 IF(nelcut == 0)
GOTO 200
223 CALL ccoori(x,xrefc(1,1,nft+1),ixc(1,nft+1),
224 . x1 ,x2 ,x3 ,x4 ,y1 ,y2 ,
225 . y3 ,y4 ,z1 ,z2 ,z3 ,z4 ,
226 . ix1 ,ix2 ,ix3 ,ix4 ,ngl )
228 CALL xyzloc4n(x1l,y1l,x2l,y2l,x3l,y3l,x4l,y4l,
229 . x1 ,x2 ,x3 ,x4 ,y1 ,y2 ,
230 . y3 ,y4 ,z1 ,z2 ,z3 ,z4 )
233 CALL preinicrk4n(elbuf_tab(ng),xfem_tab(ng,1:nxel) ,
234 . x1l ,y1l ,x2l ,y2l ,x3l ,
235 . y3l , x4l ,y4l ,lft ,llt ,
236 . nft ,nxlay ,ielcrkc ,edgec ,beta0 ,
237 . iedgesh4,elcut ,xnod ,ixc ,nodedge ,
238 . tagskyc ,knod2elc,tagedge,crklvset,crkshell,
239 . crkedge ,xfem_phantom)
242 ELSE IF (ity==7)
THEN
252 IF(xnod(1,1) == xnod(1,2)) fac = 1
263 IF(xnod(2,1) == xnod(2,2)) fac = 2
275 CALL elcut3n(i,ixtg(1,nft+1),xnod,edgetg(1,nft+1),fac,1)
276 IF (fac == 1) tagxnod(ls) = 1
280 CALL elcut3n(i,ixtg(1,nft+1),xnod,edgetg(1,nft+1),fac,2)
281 IF (fac == 2) tagxnod(ls+1) = 1
286 elcut(i+nft+numelc) = 1
288 numelcrk = numelcrk + 1
292 IF (nelcut == 0)
GOTO 200
294 CALL c3coori(x,xreftg(1,1,nft+1),ixtg(1,nft+1),ngl,
295 . x1 ,x2 ,x3 ,y1 ,y2 ,y3 ,
296 . z1 ,z2 ,z3 ,ix1 ,ix2 ,ix3 )
298 CALL xyzloc3n(x1l ,y1l ,x2l ,y2l ,x3l ,y3l ,
299 . x1 ,x2 ,x3 ,y1 ,y2 ,y3 ,
302 CALL preinicrk3n(elbuf_tab(ng),xfem_tab(ng,1:nxel) ,
303 . x1l ,y1l ,x2l ,y2l ,x3l ,
304 . y3l ,lft ,llt ,nft ,nxlay ,
305 . ielcrktg,edgetg ,beta0 ,iedgesh3,elcut(itg),
306 . xnod ,ixtg ,nodedge,tagskytg,knod2elc ,
307 . tagedge ,crklvset,crkshell,crkedge,xfem_phantom)
310 IF (nelcut == 1)
EXIT
316 IF(tagxnod(ls) == 0)
THEN
321 . i2=itab(xnod(1,1)),
322 . i3=itab(xnod(1,2)),
325 ELSEIF(tagxnod(ls+1) == 0)
THEN
330 . i2=itab(xnod(2,1)),
331 . i3=itab(xnod(2,2)),
343 IF (ixfem == 0) cycle
345 nxlay = elbuf_tab(ng)%NLAY
353 CALL edgetip4n(lft ,llt ,nft ,ielcrkc ,iedgesh4,
354 . nxlay ,edgec ,tagedge,crklvset,crkedge)
358 . ng ,ielcrkc,ity ,crkedge)
359 ELSEIF (ity == 7)
THEN
360 CALL edgetip3n(lft ,llt ,nft ,ielcrktg,iedgesh3,
361 . nxlay ,edgetg ,tagedge,crklvset,crkedge)
365 . ng ,ielcrktg,ity ,crkedge)
371 IF (crkedge(ilay)%EDGETIP(1,i) == 1 .or.
372 . crkedge(ilay)%EDGETIP(2,i) == 1)
THEN
374 crklvset(nxel*(ilay-1)+k)%ICUTEDGE(i) = 2
380 IF(
ALLOCATED(elcut))
DEALLOCATE(elcut)
381 IF(
ALLOCATED(beta))
DEALLOCATE(beta)
382 IF(
ALLOCATED(edgec))
DEALLOCATE(edgec)
383 IF(
ALLOCATED(edgetg))
DEALLOCATE(edgetg)
393 SUBROUTINE xyzloc4n(X1L,Y1L,X2L,Y2L,X3L,Y3L,X4L,Y4L,
399#include "implicit_f.inc"
403#include "mvsiz_p.inc"
407#include "vect01_c.inc"
411 my_real,
DIMENSION(MVSIZ),
INTENT(OUT) :: x1l,y1l,x2l,y2l,x3l,y3l,x4l,y4l
412 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: x1,x2,x3,x4,y1,y2,
419 my_real,
DIMENSION(MVSIZ) :: x21,y21,z21,x31,y31,z31,x41,y41,z41,
420 . x42,y42,z42,e1x,e2x,e3x,e1y,e2y,e3y,e1z,e2z,e3z
439 e1x(i) = x2(i)+x3(i)-x1(i)-x4(i)
440 e1y(i) = y2(i)+y3(i)-y1(i)-y4(i)
441 e1z(i) = z2(i)+z3(i)-z1(i)-z4(i)
443 e2x(i) = x3(i)+x4(i)-x1(i)-x2(i)
444 e2y(i) = y3(i)+y4(i)-y1(i)-y2(i)
445 e2z(i) = z3(i)+z4(i)-z1(i)-z2(i)
447 e3x(i) = e1y(i)*e2z(i)-e1z(i)*e2y(i)
448 e3y(i) = e1z(i)*e2x(i)-e1x(i)*e2z(i)
449 e3z(i) = e1x(i)*e2y(i)-e1y(i)*e2x(i)
453 suma = e3x(i)*e3x(i)+e3y(i)*e3y(i)+e3z(i)*e3z(i)
454 suma = one/
max(sqrt(suma),em20)
459 s1 = e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i)
460 s2 = e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i)
462 e1x(i) = e1x(i) + (e2y(i)*e3z(i)-e2z(i)*e3y(i))*suma
463 e1y(i) = e1y(i) + (e2z(i)*e3x(i)-e2x(i)*e3z(i))*suma
464 e1z(i) = e1z(i) + (e2x(i)*e3y(i)-e2y(i)*e3x(i))*suma
466 suma = e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i)
467 suma = one/
max(sqrt(suma),em20)
472 e2x(i) = e3y(i) * e1z(i) - e3z(i) * e1y(i)
473 e2y(i) = e3z(i) * e1x(i) - e3x(i) * e1z(i)
474 e2z(i) = e3x(i) * e1y(i) - e3y(i) * e1x(i)
480 x2l(i) = e1x(i)*x21(i)+e1y(i)*y21(i)+e1z(i)*z21(i)
481 y2l(i) = e2x(i)*x21(i)+e2y(i)*y21(i)+e2z(i)*z21(i)
482 x3l(i) = e1x(i)*x31(i)+e1y(i)*y31(i)+e1z(i)*z31(i)
483 y3l(i) = e2x(i)*x31(i)+e2y(i)*y31(i)+e2z(i)*z31(i)
484 x4l(i) = e1x(i)*x41(i)+e1y(i)*y41(i)+e1z(i)*z41(i)
485 y4l(i) = e2x(i)*x41(i)+e2y(i)*y41(i)+e2z(i)*z41(i)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)