39
40
41
43 USE multi_fvm_mod
46 use element_mod , only : nixs,nixq,nixtg
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "com01_c.inc"
55#include "com04_c.inc"
56#include "param_c.inc"
57
58
59
60 INTEGER NSVOIS,,NTGVOIS,NRCVVOIS,NSNDVOIS,ILAW11,PROC,NUMEL,
61 . NERVOIS,NESVOIS,NUMNOD_L,NUMEL_L,
62 . NSEGFL_L,IPARG(NPARG,*),CEP(*),NODLOCAL(*),
63 . IXS(NIXS,*), IXQ(NIXQ,*), IXTG(NIXTG, *),
64 . CEL(*)
65 TYPE(MULTI_FVM_STRUCT) :: MULTI_FVM
66 INTEGER, INTENT(IN) :: SIZE_ALE_ELM
67 TYPE(split_cfd_type), INTENT(IN) :: ALE_ELM
68 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
69
70
71
72 INTEGER NLOCAL
74
75
76
77 INTEGER I, J, K, N, NG, IE_LOC,
78 . ISOLNOD,ILAW,JTUR,JTHE,ITY,IE,NFT,NEL,IV,PROC2, P,
79 . L,NSOL,NS,ISILENT,IJK
80
81 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGE,TAG
82 INTEGER, DIMENSION(:,:), ALLOCATABLE :: TAGE_L,TAG_L,TAGS
83 LOGICAL PSEARCH
84 INTEGER , IAD1, LGTH
85
86
87 ALLOCATE( tage(numel),tag(numnod) )
88
89 ALLOCATE( tage_l(nspmd,numel_l),tag_l(nspmd,numnod_l) )
90 ALLOCATE( tags(nspmd,segindx) )
91
92
93 DO i = 1, numnod
94 tag(i) = 0
95 ENDDO
96 DO i = 1, numel
97 tage(i) = 0
98 ENDDO
99
100 tage_l(1:nspmd,1:numel_l) = 0
101 tag_l(1:nspmd,1:numnod_l) = 0
102
103 DO p = 1, nspmd
104 IF(p/=proc+1)THEN
105 DO i = 1, numel_l
106 tage_l(p,i) = 0
107 END DO
108 DO i = 1, numnod_l
109 tag_l(p,i) = 0
110 END DO
111 END IF
112 DO i = 1, segindx
113 tags(p,i) = 0
114 END DO
115 END DO
116
117 DO ng=1,ngroup
118 ilaw = iparg(1,ng)
119 isilent = iparg(64,ng)
120 IF(ilaw==11 .OR. isilent==1) ilaw11 = 1
121 jtur=iparg(12,ng)
122 jthe=iparg(13,ng)
123 IF(iparg(32,ng)==proc) THEN
124 nel = iparg(2,ng)
125 nft = iparg(3,ng)
126 ity = iparg(5,ng)
127
128 isolnod = iparg(28,ng)
129 IF(ity==1) THEN
130 DO i = 1, nel
131 ie = i+nft
132 ie_loc = cel(ie)
133 iad1 = ale_connectivity%ee_connect%iad_connect(ie)
134 lgth = ale_connectivity%ee_connect%iad_connect(ie+1)-ale_connectivity%ee_connect%iad_connect(ie)
135
136 DO j = 1, lgth
137 iv = ale_connectivity%ee_connect%connected(iad1 + j - 1)
138 IF (iv>0) THEN
139 proc2 = cep(iv)
140 IF(proc2/=proc) THEN
141 IF(tage(iv)==0) THEN
142 tage(iv) = 1
143 nsvois = nsvois + 1
144 nervois=nervois+1
145 ENDIF
146 IF(tage_l(proc2+1,ie_loc)==0)THEN
147 nesvois = nesvois+1
148 tage_l(proc2+1,ie_loc)=1
149 END IF
150 ENDIF
151 ELSEIF(proc/=0.AND.iv<0)THEN
152
153 IF(tags(1,-iv)==0)THEN
154 nsegfl_l = nsegfl_l + 1
155 tags(1,-iv) = 1
156 ENDIF
157 ENDIF
158 ENDDO
159 ENDDO
160 ELSEIF(ity==2) THEN
161
162 DO i = 1, nel
163 ie = i+nft
164 ie_loc = cel(ie)
165 iad1 = ale_connectivity%ee_connect%iad_connect(ie)
166 lgth = ale_connectivity%ee_connect%iad_connect(ie+1)-ale_connectivity%ee_connect%iad_connect(ie)
167 DO j = 1, lgth
168 iv = ale_connectivity%ee_connect%connected(iad1 + j - 1)
169 IF (iv>0) THEN
170 proc2 = cep(iv)
171 IF(proc2/=proc) THEN
172 IF(tage(iv)==0) THEN
173 tage(iv) = 1
174 nqvois = nqvois + 1
175 nervois=nervois+1
176 END IF
177 IF(tage_l(proc2+1,ie_loc)==0)THEN
178 nesvois = nesvois+1
179 tage_l(proc2+1,ie_loc)=1
180 END IF
181 ENDIF
182 ENDIF
183 ENDDO
184 ENDDO
185 ELSEIF (ity == 7 .AND. (n2d /= 0 .AND. multi_fvm%IS_USED)) THEN
186
187 DO i = 1, nel
188 ie = i + nft
189 ie_loc = cel(ie)
190 iad1 = ale_connectivity%ee_connect%iad_connect(ie)
191 lgth = ale_connectivity%ee_connect%iad_connect(ie+1)-ale_connectivity%ee_connect%iad_connect(ie)
192 DO j = 1, lgth
193 iv = ale_connectivity%ee_connect%connected(iad1 + j - 1)
194 IF (iv > 0) THEN
195 proc2 = cep(iv)
196 IF (proc2 /= proc) THEN
197 IF(tage(iv) == 0) THEN
198 tage(iv) = 1
199 ntgvois = ntgvois + 1
200 nervois = nervois + 1
201 ENDIF
202 IF(tage_l(proc2 + 1, ie_loc) == 0)THEN
203 nesvois = nesvois + 1
204 tage_l(proc2 + 1, ie_loc) = 1
205 ENDIF
206 ENDIF
207 ENDIF
208 ENDDO
209 ENDDO
210 ENDIF
211
212 ELSEIF(segindx>0.AND.proc==0)THEN
213 nel = iparg(2,ng)
214 nft = iparg(3,ng)
215 ity = iparg(5,ng)
216 p = iparg(32,ng)+1
217
218 isolnod = iparg(28,ng)
219 IF(ity==1) THEN
220 DO i = 1, nel
221 ie = i+nft
222
223 iad1 = ale_connectivity%ee_connect%iad_connect(ie)
224 lgth = ale_connectivity%ee_connect%iad_connect(ie+1)-ale_connectivity%ee_connect%iad_connect(ie)
225 DO j = 1, lgth
226 iv = ale_connectivity%ee_connect%connected(iad1 + j - 1)
227 IF(iv<0)THEN
228
229 IF(tags(p,-iv)==0)THEN
230 nsegfl_l = nsegfl_l + 1
231 tags(p,-iv) = 1
232 END IF
233 END IF
234 END DO
235 END DO
236 END IF
237 ENDIF
238 ENDDO
239
240
241
242! because it increases cpu time
243 DO i = 1, numels
244 iad1 = ale_connectivity%ee_connect%iad_connect(i)
245 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-iad1
246 DO l=1,8
247 ns = ixs(l+1,i)
248 IF(
nlocal(ns,proc+1)==1)
THEN
249 DO j = 1, lgth
250 ie = ale_connectivity%ee_connect%connected(iad1 + j - 1)
251 IF (ie>0) then
252 DO k=1,8
253 n = ixs(k+1,ie)
254 IF(tag(n)==0) THEN
255 IF (nodlocal(n)==0)THEN
256 nrcvvois = nrcvvois + 1
257 tag(n) = 1
258 nodlocal(n)=numnod_l+nrcvvois
259 END IF
260 ENDIF
261 ENDDO
262 END IF
263 END DO
264 END IF
265 ENDDO
266 ENDDO
267
268 DO ijk=1,size_ale_elm
269 i = ale_elm%SOL_ID(ijk)
270 iad1 = ale_connectivity%ee_connect%iad_connect(i)
271 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-ale_connectivity%ee_connect%iad_connect(i)
272 DO l = 1,8
273 nsol = ixs(l+1,i)
274 DO j= 1,lgth
275 ie = ale_connectivity%ee_connect%connected(iad1 + j - 1)
276 IF (ie>0) THEN
277 DO k=1,8
278 n = ixs(k+1,ie)
279 IF(nodlocal(n)>0 .AND. nodlocal(n) <= numnod_l)THEN
280 IF(
ifront%IENTRY(n) /=0)
THEN
282 ENDIF
283 psearch = .true.
285 IF(iad <= 0) psearch = .false.
286 DO WHILE(psearch)
288 IF(tag_l(p,nodlocal(n))==0.AND.p/=proc+1) THEN
290 nsndvois = nsndvois + 1
291 tag_l(p,nodlocal(n)) = 1
292 END IF
293 ENDIF
294 IF(
ifront%P(2,iad)==0) psearch = .false.
296 END DO
297 1111 CONTINUE
298 ENDIF
299 ENDDO
300 ENDIF
301 ENDDO
302 ENDDO
303 END DO
304
305 DO i = 1, numelq
306 iad1 = ale_connectivity%ee_connect%iad_connect(i)
307 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-iad1
308 DO l=1,4
309 ns = ixq(l+1,i)
310 IF(
nlocal(ns,proc+1)==1)
THEN
311 DO j = 1, lgth
312 ie = ale_connectivity%ee_connect%connected(iad1 + j - 1)
313 IF (ie>0) then
314 DO k=1,4
315 n = ixq(k+1,ie)
316 IF(tag(n)==0) THEN
317 IF (nodlocal(n)==0)THEN
318 nrcvvois = nrcvvois + 1
319 tag(n) = 1
320 nodlocal(n)=numnod_l+nrcvvois
321 END IF
322 ENDIF
323 ENDDO
324 END IF
325 END DO
326 END IF
327 ENDDO
328
329 DO l = 1,4
330 nsol = ixq(l+1,i)
331 DO j= 1,lgth
332 ie = ale_connectivity%ee_connect%connected(iad1 + j - 1)
333 IF (ie>0) THEN
334 DO k=1,4
335 n = ixq(k+1,ie)
336 IF(nodlocal(n)>0 .AND. nodlocal(n) <= numnod_l)THEN
337 DO proc2 = 1, proc
338 IF(
nlocal(n,proc2)==1)
GOTO 1112
339 END DO
340 DO p=1,nspmd
341 IF(tag_l(p,nodlocal(n))==0.AND.p/=proc+1) THEN
342 IF(
nlocal(nsol,p)==1)
THEN
344 nsndvois = nsndvois + 1
345 tag_l(p,nodlocal(n)) = 1
346 ENDIF
347 ENDIF
348 END IF
349 END DO
350 1112 CONTINUE
351 ENDIF
352 ENDDO
353 ENDIF
354 ENDDO
355 ENDDO
356 END DO
357
358
359
360 IF (n2d /= 0 .AND. multi_fvm%IS_USED) THEN
361 DO i = 1, numeltg
362 iad1 = ale_connectivity%ee_connect%iad_connect(i)
363 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-iad1
364 DO l=1,3
365 ns = ixtg(l+1,i)
366 IF(
nlocal(ns,proc+1)==1)
THEN
367 DO j = 1, lgth
368 ie = ale_connectivity%ee_connect%connected(iad1 + j - 1)
369 IF (ie>0) then
370 DO k=1,3
371 n = ixtg(k+1,ie)
372 IF(tag(n)==0) THEN
373 IF (
nlocal(n,proc+1)==0)
THEN
374 nrcvvois = nrcvvois + 1
375 tag(n) = 1
376 nodlocal(n)=numnod_l+nrcvvois
377 END IF
378 ENDIF
379 ENDDO
380 END IF
381 END DO
382 END IF
383 ENDDO
384
385 DO l = 1,3
386 nsol = ixtg(l+1,i)
387 DO j= 1,lgth
388 ie = ale_connectivity%ee_connect%connected(iad1 + j - 1)
389 IF (ie>0) THEN
390 DO k=1,3
391 n = ixtg(k+1,ie)
392 IF(
nlocal(n,proc+1)==1)
THEN
393 DO proc2 = 1, proc
394 IF(
nlocal(n,proc2)==1)
GOTO 1113
395 END DO
396 DO p=1,nspmd
397 IF(tag_l(p,nodlocal(n))==0.AND.p/=proc+1) THEN
398 IF(
nlocal(nsol,p)==1)
THEN
400 nsndvois = nsndvois + 1
401 tag_l(p,nodlocal(n)) = 1
402 ENDIF
403 ENDIF
404 END IF
405 END DO
406 1113 CONTINUE
407 ENDIF
408 ENDDO
409 ENDIF
410 ENDDO
411 ENDDO
412 END DO
413 ENDIF
414
415
416
417 DEALLOCATE( tage,tag )
418
419 DEALLOCATE( tage_l,tag_l )
420 DEALLOCATE( tags )
421
422 RETURN