38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
59
60
61
62#include "implicit_f.inc"
63
64
65
66#include "com04_c.inc"
67#include "scr17_c.inc"
68#include "param_c.inc"
69#include "remesh_c.inc"
70
71
72
73 INTEGER ELT_ARRAY(*),IPARTE(*),IPART(LIPART1,*),IX(NIX,*),ELTREE(KELTREE,*)
74 INTEGER IB,ELT_SIZE,NIX,NIX1,KLEVTREE,KELTREE,NUMEL,ITYPE
76 . x(3,*),skew(lskew,*)
77
78 TYPE (BOX_) , DIMENSION(NBBOX) :: IBOX
79
80
81
82 INTEGER I,J,K,INSIDE,ISK,BOX_TYPE,NBOXBOX,IBX,COUNT,IP,
83 . NLEV,MY_LEV
85 . xp1,yp1,zp1,xp2,yp2,zp2,diam,nodinb(3)
86
87 elt_size = 0
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 ibx = abs(ib)
105 isk = ibox(ibx)%ISKBOX
106 box_type = ibox(ibx)%TYPE
107 xp1 = ibox(ibx)%X1
108 yp1 = ibox(ibx)%Y1
109 zp1 = ibox(ibx)%Z1
110 xp2 = ibox(ibx)%X2
111 yp2 = ibox(ibx)%Y2
112 zp2 = ibox(ibx)%Z2
113 diam = ibox(ibx)%DIAM
114
115 IF (nadmesh == 0) THEN
116
117
118 IF (box_type == 1) THEN
119 DO j=1,numel
120 count=0
121 DO k=2,nix1+1
122 inside = 0
123 i=ix(k,j)
124 nodinb(1) = x(1,i)
125 nodinb(2) = x(2,i)
126 nodinb(3) = x(3,i)
128 . isk,nodinb,skew,inside)
129 IF (inside == 1) count = count + 1
130 ENDDO
131 IF ( itype == 1 ) THEN
132
133
134 IF (count == nix1) THEN
135 elt_size = elt_size + 1
136 elt_array(elt_size) = j
137 ENDIF
138 ELSEIF ( itype == 2 ) THEN
139
140
141 IF (inside > 0 ) THEN
142 elt_size = elt_size + 1
143 elt_array(elt_size) = j
144 ENDIF
145 ENDIF
146 ENDDO
147
148
149 ELSEIF (box_type == 2) THEN
150 DO j=1,numel
151 count=0
152 DO k=2,nix1+1
153 inside = 0
154 i=ix(k,j)
155 nodinb(1) = x(1,i)
156 nodinb(2) = x(2,i)
157 nodinb(3) = x(3,i)
158 CALL checkcyl(xp1, yp1, zp1 , xp2, yp2, zp2,
159 . nodinb , diam, inside )
160 IF (inside == 1) count = count + 1
161 ENDDO
162 IF ( itype == 1 ) THEN
163
164
165 IF (count == nix1) THEN
166 elt_size = elt_size + 1
167 elt_array(elt_size) = j
168 ENDIF
169 ELSEIF ( itype == 2 ) THEN
170
171
172 IF (inside > 0 ) THEN
173 elt_size = elt_size + 1
174 elt_array(elt_size) = j
175 ENDIF
176 ENDIF
177 ENDDO
178
179
180 ELSEIF (box_type == 3) THEN
181 DO j=1,numel
182 count=0
183 DO k=2,nix1+1
184 inside = 0
185 i=ix(k,j)
186 nodinb(1) = x(1,i)
187 nodinb(2) = x(2,i)
188 nodinb(3) = x(3,i)
189 CALL checksphere(xp1, yp1, zp1, nodinb, diam, inside)
190 IF (inside == 1) count = count + 1
191 ENDDO
192 IF ( itype == 1 ) THEN
193
194
195 IF (count == nix1) THEN
196 elt_size = elt_size + 1
197 elt_array(elt_size) = j
198 ENDIF
199 ELSEIF ( itype == 2 ) THEN
200
201
202 IF (inside > 0 ) THEN
203 elt_size = elt_size + 1
204 elt_array(elt_size) = j
205 ENDIF
206 ENDIF
207 ENDDO
208 ENDIF
209
210 ELSEIF (nadmesh /= 0) THEN
211
212
213
214 IF (box_type == 1) THEN
215 DO j=1,numel
216 count=0
217 DO k=2,nix1+1
218 inside = 0
219 i=ix(k,j)
220 nodinb(1) = x(1,i)
221 nodinb(2) = x(2,i)
222 nodinb(3) = x(3,i)
224 . isk,nodinb,skew,inside)
225 IF (inside == 1) count = count + 1
226 ENDDO
227 IF ( itype == 1 ) THEN
228
229
230 IF (count == nix1) THEN
231 ip=iparte(j)
232 nlev =ipart(10,ip)
233 my_lev=eltree(klevtree,j)
234 IF (my_lev < 0) my_lev=-(my_lev+1)
235 IF (my_lev==nlev) THEN
236 elt_size = elt_size + 1
237 elt_array(elt_size) = j
238 ENDIF
239 ENDIF
240 ELSEIF ( itype == 2 ) THEN
241
242
243 IF (inside > 0 ) THEN
244 ip=iparte(j)
245 nlev =ipart(10,ip)
246 my_lev=eltree(klevtree,j)
247 IF (my_lev < 0) my_lev=-(my_lev+1)
248 IF (my_lev==nlev) THEN
249 elt_size = elt_size + 1
250 elt_array(elt_size) = j
251 ENDIF
252 ENDIF
253 ENDIF
254 ENDDO
255
256
257 ELSEIF (box_type == 2) THEN
258 DO j=1,numel
259 count=0
260 DO k=2,nix1+1
261 inside = 0
262 i=ix(k,j)
263 nodinb(1) = x(1,i)
264 nodinb(2) = x(2,i)
265 nodinb(3) = x(3,i)
266 CALL checkcyl(xp1, yp1, zp1 , xp2, yp2, zp2,
267 . nodinb , diam, inside )
268 IF (inside == 1) count = count + 1
269 ENDDO
270 IF ( itype == 1 ) THEN
271
272
273 IF (count == nix1) THEN
274 ip=iparte(j)
275 nlev =ipart(10,ip)
276 my_lev=eltree(klevtree,j)
277 IF (my_lev < 0) my_lev=-(my_lev+1)
278 IF (my_lev==nlev) THEN
279 elt_size = elt_size + 1
280 elt_array(elt_size) = j
281 ENDIF
282 ENDIF
283 ELSEIF ( itype == 2 ) THEN
284
285
286 IF (inside > 0 ) THEN
287 ip=iparte(j)
288 nlev =ipart(10,ip)
289 my_lev=eltree(klevtree,j)
290 IF (my_lev < 0) my_lev=-(my_lev+1)
291 IF (my_lev==nlev) THEN
292 elt_size = elt_size + 1
293 elt_array(elt_size) = j
294 ENDIF
295 ENDIF
296 ENDIF
297 ENDDO
298
299
300 ELSEIF (box_type == 3) THEN
301 DO j=1,numel
302 count=0
303 DO k=2,nix1+1
304 inside = 0
305 i=ix(k,j)
306 nodinb(1) = x(1,i)
307 nodinb(2) = x(2,i)
308 nodinb(3) = x(3,i)
309 CALL checksphere(xp1, yp1, zp1, nodinb, diam, inside)
310 IF (inside == 1) count = count + 1
311 ENDDO
312 IF ( itype == 1 ) THEN
313
314
315 IF (count == nix1) THEN
316 ip=iparte(j)
317 nlev =ipart(10,ip)
318 my_lev=eltree(klevtree,j)
319 IF (my_lev < 0) my_lev=-(my_lev+1)
320 IF (my_lev==nlev) THEN
321 elt_size = elt_size + 1
322 elt_array(elt_size) = j
323 ENDIF
324 ENDIF
325 ELSEIF ( itype == 2 ) THEN
326
327
328 IF (inside > 0 ) THEN
329 ip=iparte(j)
330 nlev =ipart(10,ip)
331 my_lev=eltree(klevtree,j)
332 IF (my_lev < 0) my_lev=-(my_lev+1)
333 IF (my_lev==nlev) THEN
334 elt_size = elt_size + 1
335 elt_array(elt_size) = j
336 ENDIF
337 ENDIF
338 ENDIF
339 ENDDO
340 ENDIF
341 ENDIF
342
343 RETURN
subroutine checkcyl(xp1, yp1, zp1, xp2, yp2, zp2, nodin, d, ok)
subroutine checkpara(xp1, yp1, zp1, xp2, yp2, zp2, isk, nodin, skew, ok)
subroutine checksphere(xp, yp, zp, nodin, d, ok)