38
40 use element_mod , only : nixc,nixtg
41
42
43
44#include "implicit_f.inc"
45
46
47
48#include "com04_c.inc"
49#include "com_xfem1.inc"
50
51
52
53 INTEGER IXC(NIXC,*),NUMELC_L, NODLOCAL(*),INDX_CRK(*),
54 . NUMNOD_L,CEL(*),CEP_XFE(*),PROC,NCRKPART,
55 . INOD_L(*),IXTG(NIXTG,*),NUMELTG_L,NUMNODCRK_L,
56 . IEDGECRK_L(*),IBORDEDGE_L(*),NUMEDGES_L,
57 . INDEX_CRKXFEM(*),INOD_CRKXFEM(*),LCNECRKXFEM_L,
58 . EDGEGLOBAL(*),CEP(*)
59 TYPE (XFEM_SHELL_) , DIMENSION(NLEVMAX) :: CRKSHELL
60 TYPE (XFEM_LVSET_) , DIMENSION(NLEVMAX) :: CRKLVSET
61 TYPE (XFEM_SKY_) , DIMENSION(NLEVMAX) ::
62 TYPE (XFEM_AVX_) , DIMENSION(NLEVMAX) :: CRKAVX
63 TYPE (XFEM_EDGE_) , DIMENSION(NXLAYMAX) :: CRKEDGE
64 TYPE (XFEM_PHANTOM_), DIMENSION(NXLAYMAX) :: XFEM_PHANTOM
65
66
67
68 INTEGER I,J,K,ELEM,ND,NDSZ_L,ELSZ_L,ELPL,NCOUNT,EMPL,ILAY,
69 . ELTYP,IX(4),OFFC,OFFTG,OFF,IDIM,NEXT,ELSZC_L,ELSZTG_L,
70 . SH4N,SH3N,SH4N_L,SH3N_L,CRKSHELLID_L,
71 . NELXFE_L,IED,IED_GL,NLAY,LEN,LENLAY,NCOUNTALL,ELEM_GL,ELEM_L,
72 . NENR,XFENUMNODS,IEL_L
74 . redge(numedges_l)
75
76 INTEGER, DIMENSION(:), ALLOCATABLE :: NODTAG,ELEMTAG,CRKSIZN_L
77 INTEGER, DIMENSION(:), ALLOCATABLE :: ELEMXFEMID,
78 . ELCUT,ITRI,TAGXP
79 INTEGER, DIMENSION(:) , ALLOCATABLE :: IFI,ENRICH0,IEDGEX
80 INTEGER, DIMENSION(:,:), ALLOCATABLE :: KNOD2ELC,EDGEIFI,EDGEENR
81 INTEGER, DIMENSION(:) , ALLOCATABLE :: XFECRKNODID,ELTYPE,NOD2IAD
82 INTEGER, DIMENSION(:) , ALLOCATABLE :: ICUTEDGE,EDGEICRK,LAYCUT
83 INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGETIP
84 INTEGER, DIMENSION(:) , ALLOCATABLE :: NOD_XFENODES
85 INTEGER, DIMENSION(:,:), ALLOCATABLE :: SH_XFENODES
86 INTEGER, DIMENSION(:) , ALLOCATABLE :: ELEMLOC_C,ELEMLOC_TG
87 my_real,
DIMENSION(:) ,
ALLOCATABLE :: ratioedge,avx,avxx,fsky,
area
88
89
90 ALLOCATE( nodtag(numnod_l),elemtag(numelc_l+numeltg_l) )
91 ALLOCATE( crksizn_l(nlevmax) )
92
93 offc = numels + numelq
94 offtg = offc + numelc + numelt + numelp + numelr
95
99
100 crkshellid_l = 0
101 ncountall = 0
102
103 ALLOCATE(elemloc_c(numelc))
104 ALLOCATE(elemloc_tg(numeltg))
105 elemloc_c = 0
106 elemloc_tg = 0
107
108 j = 0
109 DO i=1,numelc
110 IF(cep(i+offc) == proc)THEN
111 j = j + 1
112 elemloc_c(i) = j
113 ENDIF
114 ENDDO
115 j = 0
116 DO i=1,numeltg
117 IF(cep(i+offtg) == proc)THEN
118 j = j + 1
119 elemloc_tg(i) = j
120 ENDIF
121 ENDDO
122
123
124
125 ALLOCATE (elcut(numelc_l+numeltg_l))
126
127 DO k=1,nlevmax
128 nodtag = 0
129 elemtag = 0
130 crksizn_l(k) = 0
131 sh4n_l = 0
132 sh3n_l = 0
133 nelxfe_l = 0
134
135 DO i=1,crkshell(k)%CRKNUMSHELL
136 eltyp = crkshell(k)%ELTYPE(i)
137 elem = crkshell(k)%PHANTOML(i)
138 IF (cep_xfe(i) == proc) THEN
139 nelxfe_l = nelxfe_l + 1
140 elemtag(nelxfe_l)=i
141 crksizn_l(k)=crksizn_l(k)+eltyp
142 IF (eltyp == 4) THEN
143 sh4n_l = sh4n_l + 1
144 DO j=1,eltyp
145 nd = ixc(j+1,elem)
146 nodtag(nodlocal(nd))=nd
147 ENDDO
148 ELSEIF (eltyp == 3) THEN
149 sh3n_l = sh3n_l + 1
150 DO j=1,eltyp
151 nd = ixtg(j+1,elem)
152 nodtag(nodlocal(nd))=nd
153 ENDDO
154 END IF
155 END IF
156 END DO
157
158 elszc_l = sh4n_l
159 elsztg_l = sh3n_l
160 elsz_l = elszc_l + elsztg_l
161
162 ndsz_l=0
163 DO i=1,numnod_l
164 IF (nodtag(i) > 0) ndsz_l=ndsz_l+1
165 ENDDO
166
167 idim = crksizn_l(k)
168
169 ALLOCATE(elemxfemid(elsz_l))
170 ALLOCATE(eltype(elsz_l))
171 ALLOCATE(
area(elsz_l))
172
173 elcut = 0
174 elemxfemid = 0
175 eltype = 0
177 ALLOCATE(knod2elc(4,elsz_l),xfecrknodid(4*elsz_l),
178 . sh_xfenodes(4,elsz_l),enrich0(lcnecrkxfem_l),
179 . nod_xfenodes(4*elsz_l))
180 IF (k==1) THEN
181 ALLOCATE(laycut(elsz_l))
182 ALLOCATE(iedgex(idim))
183 iedgex = 0
184 ENDIF
185
186 enrich0 = 0
187 knod2elc = 0
188 xfecrknodid = 0
189 nod_xfenodes = 0
190 sh_xfenodes = 0
191
192
193
194 ncount = 0
195 elpl = 0
196 next = 0
197 DO i=1,nelxfe_l
198 IF (elemtag(i) > 0) THEN
199 elpl = elpl+1
200 nd = elemtag(i)
201 eltyp = crkshell(k)%ELTYPE(nd)
202 elem_gl = crkshell(k)%PHANTOML(nd)
203 IF (eltyp == 4) THEN
204 elem_l = elemloc_c(elem_gl)
205 eltype(elpl) = 0
206 ELSEIF (eltyp == 3) THEN
207 elem_l = elemloc_tg(elem_gl)
208 eltype(elpl) = 1
209 ENDIF
210
211 elemxfemid(elpl) = crkshell(k)%PHANTOMG(nd)
212 ilay = (k-1)/nxel + 1
213 elcut(elpl) = xfem_phantom(ilay)%ELCUT(nd)
214
215 IF (k==1) THEN
216 lenlay = elsz_l
217 laycut(elpl) = crkedge(k)%LAYCUT(nd)
218 ENDIF
219
220 IF (k==1) THEN
221 DO j=1,eltyp
222 IF(eltyp==4)THEN
223 iedgex(next+j) = crklvset(k)%EDGE(j,nd)
224 ELSEIF(eltyp==3)THEN
225 iedgex(next+j) = crklvset(k)%EDGETG(j,nd-ecrkxfec)
226 ENDIF
227 ENDDO
228 next = next + eltyp
229 ENDIF
230
231 DO j=1,4
232 knod2elc(j,elpl) = crkshell(k)%XNODEG(j,nd)
233
234 ncount = ncount + 1
235 xfecrknodid(ncount) = crkshell(k)%XNODEG(j,nd)
236 ncountall = ncountall + 1
237 nod_xfenodes(ncount) = ncountall
238 sh_xfenodes(j,elpl) = ncountall
239 END DO
240 ENDIF
241 ENDDO
242
243 xfenumnods = 4*elsz_l
244 ALLOCATE(avx(3*lcnecrkxfem_l))
245 ALLOCATE(avxx(3*xfenumnods))
246 ALLOCATE(fsky(8*lcnecrkxfem_l))
247 ALLOCATE(nod2iad(xfenumnods))
248 avx = zero
249 avxx = zero
250 fsky = zero
251 nod2iad = 0
252
253
259
261 CALL write_i_c(nod_xfenodes , xfenumnods)
262
263
265
269
272 CALL write_db(avx,3*lcnecrkxfem_l) ! crkavx(i)%V
277
279
282
283 DEALLOCATE(elemxfemid)
284 DEALLOCATE(eltype)
286 DEALLOCATE(enrich0)
287 DEALLOCATE(knod2elc)
288 DEALLOCATE(xfecrknodid)
289 DEALLOCATE(nod_xfenodes)
290 DEALLOCATE(sh_xfenodes)
291 DEALLOCATE(avx,avxx,fsky)
292 DEALLOCATE(nod2iad)
293 ENDDO
294
295 DEALLOCATE(elemloc_c)
296 DEALLOCATE(elemloc_tg)
297
298
299
300 nlay = int(nlevmax/nxel)
301 nenr = int(ienrnod/nlevmax)
302
303
304 ALLOCATE(ifi(lcnecrkxfem_l) )
305 ALLOCATE(tagxp(numnodcrk_l*ienrnod*5))
306 ALLOCATE(itri(elsz_l*2))
307 tagxp = 0
308 ifi = 0
309 itri = 0
310
311 DO ilay=1,nlay
314 CALL write_i_c(tagxp ,numnodcrk_l*ienrnod*5)
316 ENDDO
317
318 DEALLOCATE(elcut)
319 DEALLOCATE(itri )
320 DEALLOCATE(tagxp )
321 DEALLOCATE(ifi )
322
323
324 idim = crksizn_l(1)
325
326 ALLOCATE(edgeicrk(numedges_l))
327 ALLOCATE(edgeifi(2,numedges_l))
328 ALLOCATE(edgeenr(2,numedges_l))
329 ALLOCATE(edgetip(2,numedges_l))
330 ALLOCATE(icutedge(numedges_l))
331 ALLOCATE(ratioedge(numedges_l))
332 edgeicrk = 0
333 edgeifi = 0
334 edgeenr = 0
335 edgetip = 0
336
337 DO ilay=1,nlay
338 k = (ilay-1)*nxel + 1
339 DO ied=1,numedges_l
340 ied_gl = edgeglobal(ied)
341 edgeicrk(ied) = crkedge(ilay)%EDGEICRK(ied_gl)
342 edgeifi(1,ied) = crkedge(ilay)%EDGEIFI(1,ied_gl)
343 edgeifi(2,ied) = crkedge(ilay)%EDGEIFI(2,ied_gl)
344 edgeenr(1,ied) = crkedge(ilay)%EDGEENR(1,ied_gl)
345 edgeenr(2,ied) = crkedge(ilay)%EDGEENR(2,ied_gl)
346 edgetip(1,ied) = crkedge(ilay)%EDGETIP(1,ied_gl)
347 edgetip(2,ied) = crkedge(ilay)%EDGETIP(2,ied_gl)
348 icutedge(ied) = crklvset(k)%ICUTEDGE(ied_gl)
349 ratioedge(ied) = crklvset(k)%RATIOEDGE(ied_gl)
350 ENDDO
359 CALL write_db (ratioedge ,numedges_l)
360 END DO
361
362 DEALLOCATE(ratioedge)
363 DEALLOCATE(icutedge)
364 DEALLOCATE(edgetip)
365 DEALLOCATE(edgeenr)
366 DEALLOCATE(edgeifi)
367 DEALLOCATE(edgeicrk)
368 DEALLOCATE(iedgex)
369 IF (ALLOCATED(laycut)) DEALLOCATE(laycut)
370
371
372
373 len = 4*elszc_l + 3*elsztg_l
375
376
377
378 DEALLOCATE(nodtag)
379 DEALLOCATE(elemtag)
380 DEALLOCATE(crksizn_l)
381
382 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine write_db(a, n)
void write_i_c(int *w, int *len)