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