OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
c_vois.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23C
24!||====================================================================
25!|| c_vois ../starter/source/restart/ddsplit/c_vois.F
26!||--- called by ------------------------------------------------------
27!|| ddsplit ../starter/source/restart/ddsplit/ddsplit.F
28!||--- calls -----------------------------------------------------
29!|| nlocal ../starter/source/spmd/node/ddtools.F
30!||--- uses -----------------------------------------------------
31!|| front_mod ../starter/share/modules1/front_mod.F
32!|| split_cfd_mod ../starter/share/modules1/split_cfd_mod.F
33!||====================================================================
34 SUBROUTINE c_vois(NSVOIS ,NQVOIS ,NTGVOIS, NRCVVOIS,NSNDVOIS,ILAW11 ,
35 2 NSEGFL_L,IPARG ,CEP ,ALE_CONNECTIVITY ,NUMEL ,
36 3 PROC ,IXS ,IXQ ,IXTG,
37 4 NERVOIS ,NESVOIS,NODLOCAL,NUMNOD_L,NUMEL_L,
38 5 CEL, MULTI_FVM,ALE_ELM,SIZE_ALE_ELM)
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
42 USE front_mod
43 USE multi_fvm_mod
46C-----------------------------------------------
47C I m p l i c i t T y p e s
48C-----------------------------------------------
49#include "implicit_f.inc"
50C-----------------------------------------------
51C C o m m o n B l o c k s
52C-----------------------------------------------
53#include "com01_c.inc"
54#include "com04_c.inc"
55#include "param_c.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59 INTEGER NSVOIS,NQVOIS,NTGVOIS,NRCVVOIS,NSNDVOIS,ILAW11,PROC,NUMEL,
60 . NERVOIS,NESVOIS,NUMNOD_L,NUMEL_L,
61 . NSEGFL_L,IPARG(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(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
68C-----------------------------------------------
69C F u n c t i o n
70C-----------------------------------------------
71 INTEGER NLOCAL
72 EXTERNAL NLOCAL
73C-----------------------------------------------
74C L o c a l V a r i a b l e s
75C-----------------------------------------------
76 INTEGER I, J, K, N, NG, IE_LOC,
77 . ISOLNOD,ILAW,JTUR,JTHE,ITY,IE,NFT,NEL,IV,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
84C-----------------------------------------------
85! allocate 1d array
86 ALLOCATE( tage(numel),tag(numnod) )
87! allocate 2d array
88 ALLOCATE( tage_l(nspmd,numel_l),tag_l(nspmd,numnod_l) )
89 ALLOCATE( tags(nspmd,segindx) )
90! ------------------------------------
91C
92 DO i = 1, numnod
93 tag(i) = 0
94 ENDDO
95 DO i = 1, numel
96 tage(i) = 0
97 ENDDO
98C
99 tage_l(1:nspmd,1:numel_l) = 0
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
115C
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)
126C voir autres types solides
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)
134C IVOIS
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
151C IV < 0 : SEGMENT INT12
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
160C 2D
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
185C 2D Triangulaire
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
210C
211 ELSEIF(segindx>0.AND.proc==0)THEN ! IPARG(32,NG)+1/=PROC
212 nel = iparg(2,ng)
213 nft = iparg(3,ng)
214 ity = iparg(5,ng)
215 p = iparg(32,ng)+1
216C voir autres types solides
217 isolnod = iparg(28,ng)
218 IF(ity==1) THEN
219 DO i = 1, nel
220 ie = i+nft
221C IVOIS
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
227C IV < 0 : SEGMENT INT12
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
238C
239C
240C Traitement supplementaire Couplage Fluide/Structure
241! because it increases cpu time
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 ! nlocal(n) = 0
259 ENDIF ! tag(n) = 0
260 ENDDO
261 END IF
262 END DO
263 END IF
264 ENDDO
265 ENDDO
266C
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
280 IF( ifront%P(1,ifront%IENTRY(n)) < proc+1) GOTO 1111
281 ENDIF
282 psearch = .true.
283 iad = ifront%IENTRY(nsol)
284 IF(iad <= 0) psearch = .false.
285 DO WHILE(psearch)
286 p = ifront%P(1,iad)
287 IF(tag_l(p,nodlocal(n))==0.AND.p/=proc+1) THEN
288 IF(nlocal(n,p)==0) THEN
289 nsndvois = nsndvois + 1
290 tag_l(p,nodlocal(n)) = 1
291 END IF ! nlocal(n) = 0
292 ENDIF ! tag_l(p) == 0 .and. ...
293 IF(ifront%P(2,iad)==0) psearch = .false.
294 iad = ifront%P(2,iad)
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 ! nlocal(n) = 0
321 ENDIF ! tag(n) = 0
322 ENDDO
323 END IF
324 END DO
325 END IF
326 ENDDO
327C
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
342 IF(nlocal(n,p)==0) THEN
343 nsndvois = nsndvois + 1
344 tag_l(p,nodlocal(n)) = 1
345 ENDIF ! nlocal(n) = 0
346 ENDIF ! nlocal(nsol)
347 END IF ! tag_l(p).and. ...
348 END DO
349 1112 CONTINUE
350 ENDIF
351 ENDDO
352 ENDIF
353 ENDDO
354 ENDDO
355 END DO
356
357C Triangle 2D
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 ! nlocal(n) = 0
377 ENDIF ! tag(n) = 0
378 ENDDO
379 END IF
380 END DO
381 END IF
382 ENDDO
383C
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
398 IF(nlocal(n,p)==0) THEN
399 nsndvois = nsndvois + 1
400 tag_l(p,nodlocal(n)) = 1
401 ENDIF ! nlocal(n) = 0
402 ENDIF ! nlocal(nsol)
403 END IF ! tag_l(p).and. ...
404 END DO
405 1113 CONTINUE
406 ENDIF
407 ENDDO
408 ENDIF
409 ENDDO
410 ENDDO
411 END DO
412 ENDIF
413C
414! ------------------------------------
415! deallocate 1d array
416 DEALLOCATE( tage,tag )
417! deallocate 2d array
418 DEALLOCATE( tage_l,tag_l )
419 DEALLOCATE( tags )
420! ------------------------------------
421 RETURN
422 END
subroutine c_vois(nsvois, nqvois, ntgvois, nrcvvois, nsndvois, ilaw11, nsegfl_l, iparg, cep, ale_connectivity, numel, proc, ixs, ixq, ixtg, nervois, nesvois, nodlocal, numnod_l, numel_l, cel, multi_fvm, ale_elm, size_ale_elm)
Definition c_vois.F:39
type(my_front) ifront
Definition front_mod.F:93