OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m_flow.F File Reference
#include "implicit_f.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "flowcom.inc"
#include "units_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine m_flow (iflow, iflow_l, nodlocal, p, memflow)

Function/Subroutine Documentation

◆ m_flow()

subroutine m_flow ( integer, dimension(*) iflow,
integer, dimension(*) iflow_l,
integer, dimension(*) nodlocal,
integer p,
integer (kind=8), dimension(*) memflow )

Definition at line 28 of file m_flow.F.

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