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
46 use element_mod , only : nixs,nixq,nixtg
47C-----------------------------------------------
48C I m p l i c i t T y p e s
49C-----------------------------------------------
50#include "implicit_f.inc"
51C-----------------------------------------------
52C C o m m o n B l o c k s
53C-----------------------------------------------
54#include "com01_c.inc"
55#include "com04_c.inc"
56#include "param_c.inc"
57C-----------------------------------------------
58C D u m m y A r g u m e n t s
59C-----------------------------------------------
60 INTEGER NSVOIS,NQVOIS,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
69C-----------------------------------------------
70C F u n c t i o n
71C-----------------------------------------------
72 INTEGER NLOCAL
73 EXTERNAL NLOCAL
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
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 IAD, IAD1, LGTH
85C-----------------------------------------------
86! allocate 1d array
87 ALLOCATE( tage(numel),tag(numnod) )
88! allocate 2d array
89 ALLOCATE( tage_l(nspmd,numel_l),tag_l(nspmd,numnod_l) )
90 ALLOCATE( tags(nspmd,segindx) )
91! ------------------------------------
92C
93 DO i = 1, numnod
94 tag(i) = 0
95 ENDDO
96 DO i = 1, numel
97 tage(i) = 0
98 ENDDO
99C
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
116C
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)
127C See other solid types
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)
135C IVOIS
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
152C IV < 0 : SEGMENT INT12
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
161C 2D
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
186C 2D Triangulaire
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
211C
212 ELSEIF(segindx>0.AND.proc==0)THEN ! IPARG(32,NG)+1/=PROC
213 nel = iparg(2,ng)
214 nft = iparg(3,ng)
215 ity = iparg(5,ng)
216 p = iparg(32,ng)+1
217C See other solid types
218 isolnod = iparg(28,ng)
219 IF(ity==1) THEN
220 DO i = 1, nel
221 ie = i+nft
222C IVOIS
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
228C IV < 0 : SEGMENT INT12
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
239C
240C
241C Additional treatment Fluid coupling/structure
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 ! nlocal(n) = 0
260 ENDIF ! tag(n) = 0
261 ENDDO
262 END IF
263 END DO
264 END IF
265 ENDDO
266 ENDDO
267C
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
281 IF( ifront%P(1,ifront%IENTRY(n)) < proc+1) GOTO 1111
282 ENDIF
283 psearch = .true.
284 iad = ifront%IENTRY(nsol)
285 IF(iad <= 0) psearch = .false.
286 DO WHILE(psearch)
287 p = ifront%P(1,iad)
288 IF(tag_l(p,nodlocal(n))==0.AND.p/=proc+1) THEN
289 IF(nlocal(n,p)==0) THEN
290 nsndvois = nsndvois + 1
291 tag_l(p,nodlocal(n)) = 1
292 END IF ! nlocal(n) = 0
293 ENDIF ! tag_l(p) == 0 .and. ...
294 IF(ifront%P(2,iad)==0) psearch = .false.
295 iad = ifront%P(2,iad)
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 ! nlocal(n) = 0
322 ENDIF ! tag(n) = 0
323 ENDDO
324 END IF
325 END DO
326 END IF
327 ENDDO
328C
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
343 IF(nlocal(n,p)==0) THEN
344 nsndvois = nsndvois + 1
345 tag_l(p,nodlocal(n)) = 1
346 ENDIF ! nlocal(n) = 0
347 ENDIF ! nlocal(nsol)
348 END IF ! tag_l(p).and. ...
349 END DO
350 1112 CONTINUE
351 ENDIF
352 ENDDO
353 ENDIF
354 ENDDO
355 ENDDO
356 END DO
357
358C Triangle 2D
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 ! nlocal(n) = 0
378 ENDIF ! tag(n) = 0
379 ENDDO
380 END IF
381 END DO
382 END IF
383 ENDDO
384C
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
399 IF(nlocal(n,p)==0) THEN
400 nsndvois = nsndvois + 1
401 tag_l(p,nodlocal(n)) = 1
402 ENDIF ! nlocal(n) = 0
403 ENDIF ! nlocal(nsol)
404 END IF ! tag_l(p).and. ...
405 END DO
406 1113 CONTINUE
407 ENDIF
408 ENDDO
409 ENDIF
410 ENDDO
411 ENDDO
412 END DO
413 ENDIF
414C
415! ------------------------------------
416! deallocate 1d array
417 DEALLOCATE( tage,tag )
418! deallocate 2d array
419 DEALLOCATE( tage_l,tag_l )
420 DEALLOCATE( tags )
421! ------------------------------------
422 RETURN
423 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