45
47 USE elbufdef_mod
48 use element_mod , only : nixc,nixtg
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "param_c.inc"
57#include "com01_c.inc"
58#include "com04_c.inc"
59#include "com_xfem1.inc"
60#include "task_c.inc"
61#include "vect01_c.inc"
62
63
64
65 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),NGROUC,IGROUC(*),
66 . ELCUTC(2,*),IADC_CRK(*),IEL_CRK(*),INOD_CRK(*),XEDGE4N(4,*),
67 . XEDGE3N(3,*),ADDCNE_CRK(*),KNOD2ELC(*),NODEDGE(2,*),
68 . CRKNODIAD(*),IAD_EDGE(*),FR_EDGE(*),FR_NBEDGE(*),NODLEVXF(*)
70 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
71 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP,NXEL) :: XFEM_TAB
72 TYPE (XFEM_EDGE_) , DIMENSION(NXLAYMAX) :: CRKEDGE
73
74
75
76 INTEGER I,K,IG,NG,JFT,JLT,NEL,IXFEM,N,ITG1,ITG2,FLAG,
77 . SIZE,LSDRC,ICUT,IEDGE,ELCRK,ELCRKTG,ELCUT,ILAY,NXLAY,PP1
78 INTEGER NODFTSK,NODLTSK
80
81 numelcrk2 = numelcrk
82 itg1 = 1+numelc
83 itg2 = 1+4*ecrkxfec
84
85 nodftsk = 1
86 nodltsk = numnod
87 CALL crk_coord_ini(addcne_crk,inod_crk,nodftsk,nodltsk,x,nodlevxf)
88
89
90 DO i=nodftsk,nodltsk
91 n = inod_crk(i)
92 IF (n > 0) THEN
93 knod2elc(n) = addcne_crk(n+1)-addcne_crk(n)
94 ENDIF
95 ENDDO
96
97 IF (nlevset == 0) RETURN
98
99 itg1 = 1+numelc
100 itg2 = 1+4*ecrkxfec
101
102
103
104
105 DO ig = 1, ngrouc
106 ng = igrouc(ig)
107 ity = iparg(5,ng)
108 off = iparg(8,ng)
109 ixfem = iparg(54,ng)
110 IF (off == 1) cycle
111 IF (ixfem == 0) cycle
112 IF (ity /= 3 .and. ity /=7 ) cycle
114
115 nxlay = elbuf_tab(ng)%NLAY
116 nel =iparg(2,ng)
117 nft =iparg(3,ng)
118 npt =iparg(6,ng)
119 lft = 1
121 jft = lft
122 jlt = llt
123
124 IF (ity == 3) THEN
125 CALL enrichc_ini(elbuf_tab(ng) ,xfem_tab(ng,1:nxel),
126 . ixc ,nft ,jft ,jlt ,nxlay ,
127 . iadc_crk ,iel_crk ,inod_crk ,elcutc ,nodedge ,
128 . crknodiad ,knod2elc ,x ,crkedge ,xedge4n )
129
130 ELSEIF (ity == 7) THEN
132 . ixtg ,nft ,jft ,jlt ,nxlay ,
133 . iadc_crk(itg2),iel_crk(itg1),inod_crk,elcutc(1,itg1),nodedge ,
134 . crknodiad ,knod2elc ,x ,crkedge ,xedge3n )
135 END IF
136
138 END DO
139
140
141
142 DO ig = 1, ngrouc
143 ng = igrouc(ig)
144 ity = iparg(5,ng)
145 off = iparg(8,ng)
146 ixfem = iparg(54,ng)
147 IF (off == 1) GOTO 200
148 IF (ixfem == 0) GOTO 200
149 IF (ity/=3 .AND. ity/=7) GOTO 200
151
152 nel =iparg(2,ng)
153 nft =iparg(3,ng)
154 lft = 1
156 jft = lft
157 jlt = llt
158
159 IF (ity == 3) THEN
160 DO ilay=1,nxlay
161 pp1 = (ilay-1)*nxel + 1
162 DO i=jft,jlt
163 elcrk = iel_crk(i+nft)
164 elcut = 0
166 IF (elcut /= 0) THEN
167 DO k=1,4
168 iedge = xedge4n(k,elcrk)
169 icut = 0
170 IF (iedge > 0) icut = crkedge(ilay)%ICUTEDGE(iedge)
171 IF (icut == 2) crkedge(ilay)%ICUTEDGE(iedge) = 1
172 ENDDO
173 ENDIF
174 ENDDO
175 ENDDO
176 ELSE IF (ity == 7) THEN
177 DO ilay=1,nxlay
178 pp1 = (ilay-1)*nxel + 1
179 DO i=jft,jlt
180 elcrktg = iel_crk(i+nft+numelc)
181 elcrk = elcrktg + ecrkxfec
182 elcut = 0
184 IF (elcut /= 0)THEN
185 DO k=1,3
186 iedge = xedge3n(k,elcrktg)
187 icut = 0
188 IF (iedge > 0) icut = crkedge(ilay)%ICUTEDGE(iedge)
189 IF (icut == 2) crkedge(ilay)%ICUTEDGE(iedge) = 1
190 ENDDO
191 ENDIF
192 ENDDO
193 ENDDO
194 END IF
195
197 200 CONTINUE
198 END DO
199
200 IF (nspmd > 1) THEN
201 flag = 2
202 SIZE = nxlay
203 lsdrc = fr_nbedge(nspmd+1)
205 . flag ,crkedge)
206 END IF
207
208 RETURN
subroutine crk_coord_ini(addcne_crk, inod_crk, nodft, nodlt, x, nodlevxf)
subroutine enrichc_ini(elbuf_str, xfem_str, ixc, nft, jft, jlt, nxlay, iadc_crk, iel_crk, inod_crk, elcutc, nodedge, crknodiad, knod2elc, x, crkedge, xedge4n)
subroutine enrichtg_ini(elbuf_str, ixtg, nft, jft, jlt, nxlay, iad_crktg, iel_crktg, inod_crk, elcutc, nodedge, crknodiad, knod2elc, x, crkedge, xedge3n)
type(xfem_phantom_), dimension(:), allocatable xfem_phantom
subroutine spmd_exch_iedge(iad_edge, fr_edge, size, lsdrc, fr_nbedge, flag, crkedge)