OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
flowdec.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/.
23!||====================================================================
24!|| flowdec ../starter/source/fluid/flowdec.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| nlocal ../starter/source/spmd/node/ddtools.F
29!||====================================================================
30 SUBROUTINE flowdec(IFLOW )
31C-----------------------------------------------
32C M o d u l e s
33C-----------------------------------------------
34
35C-----------------------------------------------
36C I m p l i c i t T y p e s
37C-----------------------------------------------
38#include "implicit_f.inc"
39C-----------------------------------------------
40C C o m m o n B l o c k s
41C-----------------------------------------------
42#include "com01_c.inc"
43#include "com04_c.inc"
44#include "flowcom.inc"
45C-----------------------------------------------
46C D u m m y A r g u m e n t s
47C-----------------------------------------------
48 INTEGER IFLOW(*)
49C-----------------------------------------------
50C E x t e r n a l F u n c t i o n s
51C-----------------------------------------------
52 INTEGER NLOCAL
53 EXTERNAL nlocal
54C-----------------------------------------------
55C L o c a l V a r i a b l e s
56C-----------------------------------------------
57 INTEGER IADI, I, ITYP, NINOUT, NNO, NEL, NNN, NBLOC, IADL, PP,
58 . JJ, J, NPROW, NPCOL, K, P, JFORM
59 INTEGER PGRID(NSPMD,NSPMD)
60C
61 iadi=0
62 DO i=1,nflow
63 ityp =iflow(iadi+2)
64 nno =iflow(iadi+5)
65 nel =iflow(iadi+6)
66 nbloc=iflow(iadi+12)
67 nprow=iflow(iadi+18)
68 npcol=iflow(iadi+19)
69 pp=0
70 DO j=1,nprow
71 DO k=1,npcol
72 pp=pp+1
73 pgrid(j,k)=pp
74 ENDDO
75 ENDDO
76
77 IF (ityp==1) THEN
78C
79 ninout=iflow(iadi+4)
80 nnn=iflow(iadi+7)
81 iadl=iadi+niflow+nno+3*nel+ninout*niioflow+nnn+nel
82 pp=1
83 jj=0
84 DO j=1,nno
85 jj=jj+1
86 IF (jj==nbloc+1) THEN
87 pp=pp+1
88 IF (pp==nprow+1) pp=1
89 jj=1
90 ENDIF
91 iflow(iadl+j)=pp !IBUFR
92 ENDDO
93 pp=1
94 jj=0
95 DO j=1,nno
96 jj=jj+1
97 IF (jj==nbloc+1) THEN
98 pp=pp+1
99 IF (pp==npcol+1) pp=1
100 jj=1
101 ENDIF
102 iflow(iadl+nno+j)=pp !IBUFC
103 ENDDO
104C
105 iadl=iadl+4*nno+2*nnn
106 pp=1
107 jj=0
108 DO j=1,nel
109 jj=jj+1
110 IF (jj==nbloc+1) THEN
111 pp=pp+1
112 IF (pp==nprow+1) pp=1
113 jj=1
114 ENDIF
115 iflow(iadl+j)=pp !IBUFELR
116 ENDDO
117 pp=1
118 jj=0
119 DO j=1,nel
120 jj=jj+1
121 IF (jj==nbloc+1) THEN
122 pp=pp+1
123 IF (pp==npcol+1) pp=1
124 jj=1
125 ENDIF
126 iflow(iadl+nel+j)=pp !IBUFELC
127 ENDDO
128C CNP nombre de processeurs possedant chaque noeud
129 iadl=iadi+niflow+nno+3*nel+ninout*niioflow+nnn+nel+3*nno
130 DO j=1,nno
131 iflow(iadl+j)=0
132 ENDDO
133 DO p=1,nspmd
134 DO j=1,nno
135 jj=iflow(iadi+niflow+j)
136 IF (nlocal(jj,p)==1) iflow(iadl+j)=iflow(iadl+j)+1
137 ENDDO
138 ENDDO
139C CNPI nombre de processeurs possedant chaque noeud auxiliaire
140 iadl=iadl+nno+nnn
141 DO j=1,nnn
142 iflow(iadl+j)=0
143 ENDDO
144 DO p=1,nspmd
145 DO j=1,nnn
146 jj=iflow(iadi+niflow+nno+3*nel+ninout*niioflow+j)
147 IF (nlocal(jj,p)==1) iflow(iadl+j)=iflow(iadl+j)+1
148 ENDDO
149 ENDDO
150C
151 ELSEIF(ityp == 3) THEN
152 jform=iflow(iadi+4)
153C CNP nombre de processeurs possedant chaque noeud
154 iadl = 0
155 IF(jform==1) iadl=iadi+niflow+nno+3*nel+nno
156 IF(jform==2) iadl=iadi+niflow+nno+5*nel+nno+nbgauge
157 DO j=1,nno
158 iflow(iadl+j)=0
159 ENDDO
160 DO p=1,nspmd
161 DO j=1,nno
162 jj=iflow(iadi+niflow+j)
163 IF (nlocal(jj,p)==1) iflow(iadl+j)=iflow(iadl+j)+1
164 ENDDO
165 ENDDO
166C IBUFELR ligne des elements dans la Process Grid
167 iadl=iadl+nno+nel
168 pp=1
169 jj=0
170 DO j=1,nel
171 jj=jj+1
172 IF (jj==nbloc+1) THEN
173 pp=pp+1
174 IF (pp==nprow+1) pp=1
175 jj=1
176 ENDIF
177 iflow(iadl+j)=pp !IBUFELR
178 ENDDO
179C IBUFELC colonne des elements dans la Process Grid
180 iadl=iadl+nel
181 pp=1
182 jj=0
183 DO j=1,nel
184 jj=jj+1
185 IF (jj==nbloc+1) THEN
186 pp=pp+1
187 IF (pp==npcol+1) pp=1
188 jj=1
189 ENDIF
190 iflow(iadl+j)=pp !IBUFELC
191 ENDDO
192 ENDIF
193 iadi=iadi+iflow(iadi+14)
194 ENDDO
195C
196 RETURN
197 END
subroutine flowdec(iflow)
Definition flowdec.F:31