34
36 use element_mod , only : nixc
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "mvsiz_p.inc"
45#include "param_c.inc"
46
47
48
49#include "com04_c.inc"
50#include "com_xfem1.inc"
51
52
53
54 INTEGER NFT,JFT,JLT,NXLAY
55 INTEGER IPARG(NPARG,*),IXC(NIXC,*),ELCUTC(2,*),INOD_CRK(*),
56 . IADC_CRK(4,*),IEL_CRK(*),ENRTAG(NUMNOD,*),XEDGE4N(4,*)
57 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
58
59
60
61 INTEGER I,K,IR,IAD,NELCRK,ELCRK,ILEV,ILAY,IXEL,ELCUT,LAYCUT,
62 . IECUT,ENR,IBOUNDEDGE,IED,EDGE,FAC,COUNT,ITIP,ITRI,NUMXEL
63 INTEGER JCT(MVSIZ),NTAG(4),D(4),NS(4),IADC(4)
64 DATA d/2,3,4,1/
65
66 nelcrk = 0
67 DO i=jft,jlt
68 jct(i) = 0
69 IF (elcutc(1,i+nft) /= 0) THEN
70 nelcrk = nelcrk + 1
71 jct(nelcrk) = i
72 ENDIF
73 ENDDO
74 IF (nelcrk == 0) RETURN
75
76 DO ilay=1,nxlay
77 DO ir=1,nelcrk
78 i = jct(ir)
79 elcrk = iel_crk(i+nft)
81 IF (elcut /= 0) THEN
83 laycut = crkedge(ilay)%LAYCUT(elcrk)
84 ns(1) = ixc(2,i+nft)
85 ns(2) = ixc(3,i+nft)
86 ns(3) = ixc(4,i+nft)
87 ns(4) = ixc(5,i+nft)
88 iadc(1) = iadc_crk(1,elcrk)
89 iadc(2) = iadc_crk(2,elcrk)
90 iadc(3) = iadc_crk(3,elcrk)
91 iadc(4) = iadc_crk(4,elcrk)
92 IF (itri == 0) THEN
93 numxel = 2
94 ELSE
95 numxel = nxel
96 ENDIF
97
98 DO ixel=1,numxel
99 ilev = nxel*(ilay-1) + ixel
100 fac = 0
101 ntag(1:4)= 0
102
103 IF (abs(laycut) == 1) THEN
104
105
106 DO k=1,4
107 ied = crkedge(ilay)%IEDGEC(k,elcrk)
108 edge = xedge4n(k,elcrk)
109 iecut = crkedge(ilay)%ICUTEDGE(edge)
110
111 IF (ied > 0 .and. iecut == 2) THEN
112 ntag(k) = 2
113 ntag(d(k)) = 2
114 fac = fac + 1
115 ENDIF
116 ENDDO
117
118
119
120 DO k=1,4
121 ied = crkedge(ilay)%IEDGEC(k,elcrk)
122 edge = xedge4n(k,elcrk)
123 iboundedge = crkedge(ilay)%IBORDEDGE(edge)
124
125 IF ( ied > 0 .and. iboundedge > 0) THEN
126 ntag(k) = 1
127 ntag(d(k)) = 1
128 fac = fac + 1
129 ENDIF
130 ENDDO
131
132 DO k=1,4
133 ied = crkedge(ilay)%IEDGEC(k,elcrk)
134 edge = xedge4n(k,elcrk)
135 itip = crkedge(ilay)%EDGETIP(2,edge)
136 IF (ied > 0 .and. itip == 1) THEN
137 IF (itri /= 0 .and. ixel == 3) THEN
138 ntag(k) = 1
139 ntag(d(k)) = 1
140 fac = fac + 1
141 ENDIF
142 ENDIF
143 ENDDO
144
145 IF (fac > 0) THEN
146 DO k=1,4
147 IF (ntag(k) /= 2) ntag(k) = 1
148 ENDDO
149 ENDIF
150
151 ELSE IF (laycut == 2) THEN
152
153
154 DO k=1,4
155 ied = crkedge(ilay)%IEDGEC(k,elcrk)
156 edge = xedge4n(k,elcrk)
157 iboundedge = crkedge(ilay)%IBORDEDGE(edge)
158 IF (ied > 0 .and. iboundedge == 2) THEN
159 ntag(k) = 1
160 ntag(d(k)) = 1
161 fac = fac + 1
162 ENDIF
163 END DO
164
165
166
167 count = 0
168 DO k=1,4
169 ied = crkedge(ilay)%IEDGEC(k,elcrk)
170 edge = xedge4n(k,elcrk)
171 itip = crkedge(ilay)%EDGETIP(2,edge)
172 IF (ied > 0 .and. itip == 1) count = count + 1
173 END DO
174
175 IF (count == 0) THEN
176 DO k=1,4
177 iad = iadc(k)
178 IF (itri < 0 .and. ixel == 2 .and.
crklvset(ilev)%ENR0(1,iad) < 0)
THEN
179
181 fac = fac + 1
182 ntag(k) = 1
183 ntag(d(k)) = 1
184 ELSEIF (itri > 0 .and. ixel == 1 .and.
crklvsetTHEN
185
187 fac = fac + 1
188 ntag(k) = 1
189 ntag(d(k)) = 1
190 ENDIF
191 END DO
192 ENDIF
193
194 ENDIF
195
196
197
198 IF (fac > 0) THEN
199 DO k=1,4
200 enr = abs(
crklvset(ilev)%ENR0(1,iadc(k)))
201 IF (enr > 0 .and. ntag(k) == 1) THEN
202 IF (enrtag(ns(k),enr) == 0) enrtag(ns(k),enr) = enr
203 ENDIF
204 ENDDO
205 ENDIF
206
207 ENDDO
208 ENDIF
209 ENDDO
210 ENDDO
211
212 RETURN
type(xfem_phantom_), dimension(:), allocatable xfem_phantom
type(xfem_lvset_), dimension(:), allocatable crklvset