36
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "com01_c.inc"
46#include "com04_c.inc"
47#include "com_xfem1.inc"
48
49
50
51 INTEGER IBORDNODE(*),IXC(NIXC,*),IXTG(NIXTG,*),IEDGESH4(4,*),
52 . IEDGESH3(3,*),IBORDEDGE(*),NODEDGE(2,*),IELCRKC(*),IELCRKTG(*),
53 . IEDGE(*),CEP_CRK(*),IEDGE_TMP0(*)
54
55
56
57 INTEGER I,J,K,L,JJ,LL,I1,I2,I1M,I2M,NL,,NLMAX,STAT,
58 . NELALL,NEL,NIX,JCRK0,JCRK,P,PROC
59 INTEGER NEXTK4(4),NEXTK3(3),IWORK(70000)
60 INTEGER, DIMENSION(:,:), ALLOCATABLE ::
61 . LINEIX,LINEIX2,IXWORK,IEDWORK4,IEDWORK3
62 INTEGER, DIMENSION(:), ALLOCATABLE ::
63 . INDEX,TAGED,ITAGED,NIXEL,TAGEL,TAGEL_CRK,IEDGE_TMP
64C
65 DATA nextk4/2,3,4,1/
66 DATA nextk3/2,3,1/
67
68 nlmax = 4*ecrkxfec + 3*ecrkxfetg
69 nelall = ecrkxfec+ecrkxfetg
70
71 ALLOCATE (lineix(2,nlmax) ,stat=stat)
72 ALLOCATE (lineix2(2,nlmax) ,stat=stat)
73 ALLOCATE (index(2*nlmax) ,stat=stat)
74 ALLOCATE (ixwork(5,nlmax) ,stat=stat)
75 ALLOCATE (iedwork4(4,ecrkxfec) ,stat=stat)
76 ALLOCATE (iedwork3(3,ecrkxfetg),stat=stat)
77 ALLOCATE (taged(nlmax) ,stat=stat)
78 ALLOCATE (itaged(nlmax) ,stat=stat)
79 ALLOCATE (nixel(nelall) ,stat=stat)
80 ALLOCATE (tagel(nelall) ,stat=stat)
81 ALLOCATE (tagel_crk(nelall) ,stat=stat)
82 lineix = 0
83 lineix2 = 0
84 index = 0
85 ixwork = 0
86 iedwork4= 0
87 iedwork3= 0
88 taged = 0
89 itaged = 0
90 nixel = 0
91 tagel = 0
92 tagel_crk = 0
93
94 IF (stat /= 0) THEN
95 CALL ancmsg(msgid=268 ,msgtype=msgerror,anmode=anstop,c1=
'EDGE XFEM')
96 END IF
97
98
99
100 ll = 0
101 nel = 0
102 DO j=1,numelc
103 IF (ielcrkc(j) > 0) THEN
104 nel = nel + 1
105 nixel(nel) = 4
106 tagel(nel) = j
107 tagel_crk(nel) = ielcrkc(j)
108 ENDIF
109 END DO
110
111 DO j=1,numeltg
112 IF (ielcrktg(j) > 0) THEN
113 nel = nel + 1
114 nixel(nel) = 3
115 tagel(nel) = j
116 tagel_crk(nel) = ielcrktg(j)-ecrkxfec
117 ENDIF
118 END DO
119
120 DO i=1,nel
121 j = tagel(i)
122 nix = nixel(i)
123 IF (nix == 4) THEN
124
125
126
127
128 DO k=1,nix
129 i1 = ixc(k+1,j)
130 i2 = ixc(nextk4(k)+1,j)
131 ll = ll+1
132 IF(i2 > i1)THEN
133 lineix(1,ll) = i1
134 lineix(2,ll) = i2
135
136 lineix2(1,ll) = i
137 lineix2(2,ll) = k
138 ELSE
139 lineix(1,ll) = i2
140 lineix(2,ll) = i1
141
142 lineix2(1,ll) = i
143 lineix2(2,ll) = -k
144 ENDIF
145 ENDDO
146 ELSE IF (nix == 3) THEN
147
148
149
150 DO k=1,nix
151 i1 = ixtg(k+1,j)
152 i2 = ixtg(nextk3(k)+1,j)
153 ll = ll+1
154 IF(i2 > i1)THEN
155 lineix(1,ll) = i1
156 lineix(2,ll) = i2
157
158 lineix2(1,ll) = i
159 lineix2(2,ll) = k
160 ELSE
161 lineix(1,ll) = i2
162 lineix(2,ll) = i1
163
164 lineix2(1,ll) = i
165 lineix2(2,ll) = -k
166 ENDIF
167 ENDDO
168 END IF
169 END DO
170
171 CALL my_orders(0,iwork,lineix,index,ll,2)
172
173
174
176 i1m = lineix(1,index(1))
177 i2m = lineix(2,index(1))
180 ixwork(3,
nl)=lineix2(1,index(1))
181 ixwork(4,
nl)=lineix2(2,index(1))
183
185 k = abs(ixwork(4,
nl))
186 nix = nixel(j)
187 i = tagel(j)
188 jj = tagel_crk(j)
189 IF (nix == 4) THEN
191 ELSE IF (nix == 3) THEN
193 END IF
194
195 DO l=2,ll
196 i1 = lineix(1,index(l))
197 i2 = lineix(2,index(l))
198 IF(i2 /= i2m .or. i1 /= i1m)THEN
202 ixwork(3,
nl)=lineix2(1,index(l))
203 ixwork(4,
nl)=lineix2(2,index(l))
205
207 k = abs(ixwork(4,
nl))
208 nix = nixel(j)
209 i = tagel(j)
210 jj = tagel_crk(j)
211 IF(nix == 4)THEN
213 ELSE IF(nix == 3)THEN
215 END IF
216 ELSE
218
219 j = lineix2(1,index(l))
220 k = abs(lineix2(2,index(l)))
221 nix = nixel(j)
222 i = tagel(j)
223 jj = tagel_crk(j)
224 IF(nix == 4)THEN
226 ELSE IF(nix == 3)THEN
228 END IF
229 ENDIF
230 i1m = i1
231 i2m = i2
232 ENDDO
233
235
236
237
239 DO j=1,nel
240 nix = nixel(j)
241 i = tagel(j)
242 jj = tagel_crk(j)
243 IF (nix == 4) THEN
244 DO k=1,nix
245 ied = iedwork4(k,jj)
246 IF (taged(ied) == 0) THEN
249 taged( ied) = 1
251 ibordedge(
nl) = ixwork(5,ied)
252 IF(ixwork(5,ied) == 1)THEN
253 ibordnode(ixwork(1,ied)) = 1
254 ibordnode(ixwork(2,ied)) = 1
255 END IF
256
257 nodedge(1,
nl) = ixwork(1,ied)
258 nodedge(2,
nl) = ixwork(2,ied)
259 END IF
260 iedgesh4(k,jj) = itaged(ied)
261 END DO
262 ELSE IF (nix == 3) THEN
263 DO k=1,nix
264 ied = iedwork3(k,jj)
265 IF (taged(ied) == 0) THEN
268 taged(ied) = 1
269 ibordedge(
nl) = ixwork(5,ied)
271 IF(ixwork(5,ied) == 1)THEN
272 ibordnode(ixwork(1,ied)) = 1
273 ibordnode(ixwork(2,ied)) = 1
274 END IF
275
276 nodedge(1,
nl) = ixwork(1,ied)
277 nodedge(2,
nl) = ixwork(2,ied)
278 END IF
279 iedgesh3(k,jj) = itaged(ied)
280 END DO
281 END IF
282 END DO
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327 ALLOCATE (iedge_tmp(numedges))
328 iedge_tmp = 0
329
330 DO p = 1,nspmd
331 itaged = 0
332 DO i=1,nel
333
334 nix = nixel(i)
335 jcrk0 = tagel_crk(i)
336 jcrk = jcrk0
337 IF(nix == 3) jcrk = jcrk + ecrkxfec
338 proc = cep_crk(jcrk) + 1
339 IF(p == proc)THEN
340 IF(nix==4)THEN
341 DO k=1,nix
342 ied = iedgesh4(k,jcrk0)
343
344
345
346
347
348
349 IF(ied /= 0 .AND. ibordedge(ied) == 0)THEN
350 IF(iedge_tmp(ied) >= 0)THEN
351 iedge_tmp(ied) = iedge_tmp(ied) + 1
352 ENDIF
353 ENDIF
354 ENDDO
355 ELSEIF(nix==3)THEN
356 DO k=1,nix
357 ied = iedgesh3(k,jcrk0)
358
359
360
361
362
363
364 IF(ied /= 0 .AND. ibordedge(ied) == 0)THEN
365 IF(iedge_tmp(ied) >= 0)THEN
366 iedge_tmp(ied) = iedge_tmp(ied) + 1
367 ENDIF
368 ENDIF
369 ENDDO
370 ENDIF
371 END IF
372 END DO
373
374 DO ied=1,numedges
375 IF(iedge_tmp(ied) == 1) iedge_tmp(ied) = -1
376 ENDDO
377
378 END DO
379
380 DO ied=1,numedges
381 IF(iedge_tmp(ied) == -1) iedge_tmp0(ied) = iedge_tmp(ied)
382 ENDDO
383
384
385 DEALLOCATE (index)
386 DEALLOCATE (ixwork)
387 DEALLOCATE (lineix)
388 DEALLOCATE (lineix2)
389 DEALLOCATE (iedwork4)
390 DEALLOCATE (iedwork3)
391 DEALLOCATE (taged)
392 DEALLOCATE (itaged)
393 DEALLOCATE (nixel)
394 DEALLOCATE (tagel)
395 DEALLOCATE (tagel_crk)
396 DEALLOCATE (iedge_tmp)
397
398 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
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)
character *2 function nl()