OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m_flow.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!|| m_flow ../starter/source/restart/ddsplit/m_flow.F
25!||--- called by ------------------------------------------------------
26!|| ddsplit ../starter/source/restart/ddsplit/ddsplit.F
27!||====================================================================
28 SUBROUTINE m_flow(IFLOW, IFLOW_L, NODLOCAL, P, MEMFLOW)
29C-----------------------------------------------
30C I m p l i c i t T y p e s
31C-----------------------------------------------
32#include "implicit_f.inc"
33C-----------------------------------------------
34C C o m m o n B l o c k s
35C-----------------------------------------------
36#include "com01_c.inc"
37#include "com04_c.inc"
38#include "flowcom.inc"
39#include "units_c.inc"
40C-----------------------------------------------
41C D u m m y A r g u m e n t s
42C-----------------------------------------------
43 INTEGER IFLOW(*), IFLOW_L(*), NODLOCAL(*), P
44 INTEGER (KIND=8) :: MEMFLOW(*)
45C-----------------------------------------------
46C L o c a l V a r i a b l e s
47C-----------------------------------------------
48 INTEGER I, IADI, IADJ, NINOUT, NNO, NEL, NNN, IADL, NNO_L, J,
49 . JJ, J1, J2, J3, PJ1, PJ2, PJ3, IADMATI, IADMATR, ITYP,
50 . NR, NC, NPROW, NPCOL, NNR_P, NNC_P, NNE_P, NBLOC,
51 . NNN_L
52 INTEGER JFORM
53C
54 DO i=1,liflow
55 iflow_l(i)=iflow(i)
56 ENDDO
57C
58 iadi=0
59 iadmati=1
60 iadmatr=1
61 iadl = 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
70 IF (ityp==1) THEN
71 ninout=iflow(iadi+4)
72 nnn=iflow(iadi+7)
73C
74 iadj=iadi+niflow+nno+3*nel+ninout*niioflow
75 iadl=iadj+nnn+nel
76 nno_l=0
77 DO j=1,nno
78 jj=iflow(iadi+niflow+j)
79 iflow_l(iadi+niflow+j)=nodlocal(jj) ! IBUF
80 IF (nodlocal(jj)/=0) THEN
81 nno_l=nno_l+1
82 IF(nspmd == 1) THEN
83 iflow_l(iadl+nno_l)=j ! IBUFL
84 ELSE
85 iflow_l(iadl+2*nno+nno_l)=j
86 ENDIF
87 ENDIF
88 ENDDO
89 iflow_l(iadi+16)=nno_l
90 nnn_l=0
91 DO j=1,nnn
92 jj=iflow(iadj+j)
93 iflow_l(iadj+j)=nodlocal(jj) ! IBUFI
94 IF (nodlocal(jj)>0) THEN
95 nnn_l=nnn_l+1
96 IF(nspmd == 1) THEN
97 iflow_l(iadl+nno+nnn_l)=j ! IBUFIL
98 ELSE
99 iflow_l(iadl+4*nno+nnn_l)=j
100 ENDIF
101 ENDIF
102 ENDDO
103 iflow_l(iadi+22)=nnn_l
104C
105 IF(nspmd > 1) THEN
106 nr=(p-1)/npcol+1
107 nc=p-(nr-1)*npcol
108 nnr_p=0
109 DO j=1,nno
110 IF (iflow(iadl+j)==nr) THEN
111 nnr_p=nnr_p+1
112 iflow_l(iadl+j)=1 ! IBUFR
113 ELSE
114 iflow_l(iadl+j)=0
115 ENDIF
116 ENDDO
117 nnc_p=0
118 DO j=1,nno
119 IF (iflow(iadl+nno+j)==nc) THEN
120 nnc_p=nnc_p+1
121 iflow_l(iadl+nno+j)=1 ! IBUFC
122 ELSE
123 iflow_l(iadl+nno+j)=0
124 ENDIF
125 ENDDO
126 iadl=iadl+4*nno+2*nnn
127 DO j=1,nel
128 IF (iflow(iadl+j)==nr) THEN
129 iflow_l(iadl+j)=1 ! IBUFELR
130 ELSE
131 iflow_l(iadl+j)=0
132 ENDIF
133 ENDDO
134 nne_p=0
135 DO j=1,nel
136 IF (iflow(iadl+nel+j)==nc) THEN
137 nne_p=nne_p+1
138 iflow_l(iadl+nel+j)=1 ! IBUFELC
139 ELSE
140 iflow_l(iadl+nel+j)=0
141 ENDIF
142 ENDDO
143C
144 iflow_l(iadi+8)=nnr_p+nbloc
145 iflow_l(iadi+9)=nnr_p*nnc_p+nnr_p*nne_p
146 iflow_l(iadi+10)=iadmati
147 iflow_l(iadi+11)=iadmatr
148 iflow_l(iadi+20)=iadmatr+nnr_p*nnc_p
149C
150 memflow(1)=memflow(1)+iflow_l(iadi+8)
151 memflow(2)=memflow(2)+iflow_l(iadi+9)
152C
153 iadmati=iadmati+nnr_p+nbloc
154 iadmatr=iadmatr+nnr_p*nnc_p+nnr_p*nne_p
155 ENDIF
156
157 ELSEIF(ityp == 3) THEN
158 jform =iflow(iadi+4)
159 IF(jform == 1) iadl=iadi+niflow+nno+3*nel
160 IF(jform == 2) iadl=iadi+niflow+nno+5*nel
161 nno_l=0
162 DO j=1,nno
163 iflow_l(iadl+j)=0 ! IBUFL
164 ENDDO
165 DO j=1,nno
166 jj=iflow(iadi+niflow+j)
167 iflow_l(iadi+niflow+j)=nodlocal(jj) ! IBUF
168 IF (nodlocal(jj)/=0) THEN
169 nno_l=nno_l+1
170 iflow_l(iadl+nno_l)=j ! IBUFL
171 ENDIF
172 ENDDO
173 iflow_l(iadi+16)=nno_l
174
175 IF(nspmd > 1) THEN
176 nr=(p-1)/npcol+1
177 nc=p-(nr-1)*npcol
178 IF(jform == 1) iadl=iadl+nno+nno+nel
179 IF(jform == 2) iadl=iadl+nno+nbgauge+nno+nel
180 nnr_p=0
181 DO j=1,nel
182 IF (iflow(iadl+j)==nr) THEN
183 nnr_p=nnr_p+1
184 iflow_l(iadl+j)=1 ! IBUFELR
185 ELSE
186 iflow_l(iadl+j)=0
187 ENDIF
188 ENDDO
189 iadl=iadl+nel
190 nnc_p=0
191 DO j=1,nel
192 IF (iflow(iadl+j)==nc) THEN
193 nnc_p=nnc_p+1
194 iflow_l(iadl+j)=1 ! IBUFELC
195 ELSE
196 iflow_l(iadl+j)=0
197 ENDIF
198 ENDDO
199C
200 IF(p == 1) THEN
201 WRITE(iout,1000) nprow, npcol, nbloc
202 WRITE(iout,'(4X,A)') 'proc nb of rows nb of columns'
203 ENDIF
204 WRITE(IOUT,'(3i10)') P,NNR_P,NNC_P
205
206 IFLOW_L(IADI+8) = NNR_P+NBLOC
207 IFLOW_L(IADI+9) = NNR_P*NNC_P
208 IFLOW_L(IADI+10)= IADMATI
209 IFLOW_L(IADI+11)= IADMATR
210 IFLOW_L(IADI+20)= NNR_P
211C
212 MEMFLOW(1)=MEMFLOW(1)+IFLOW_L(IADI+8)
213 MEMFLOW(2)=MEMFLOW(2)+IFLOW_L(IADI+9)
214C
215 IADMATI=IADMATI+IFLOW_L(IADI+8)
216 IADMATR=IADMATR+IFLOW_L(IADI+9)
217 ENDIF
218 ENDIF
219 IADI=IADI+IFLOW(IADI+14)
220 ENDDO
221C
222 1000 FORMAT(/4X,'parallel solver parameters(scalapack)'
223 . /4X,'--------------------------------------'
224 . /4X,'number of row of process grid ',I10
225 . /4X,'number of columns of process grid ',I10
226 . /4X,'2d-cyclic decomposition block-SIZE ',I10)
227 RETURN
228 END
subroutine m_flow(iflow, iflow_l, nodlocal, p, memflow)
Definition m_flow.F:29