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