MFIX  2016-1
calc_mflux.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CALC_MFLUX C
4 ! Purpose: Calculate the convection fluxes. Master routine. C
5 ! C
6 ! Author: M. Syamlal Date: 31-MAY-05 C
7 ! C
8 ! C
9 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
10  SUBROUTINE calc_mflux()
11 
12 ! Modules
13 !---------------------------------------------------------------------//
14  USE fldvar, only: u_g, v_g, w_g
15  USE fldvar, only: u_s, v_s, w_s
16  USE mflux, only: rop_ge, rop_gn, rop_gt
17  USE mflux, only: rop_se, rop_sn, rop_st
18  USE mflux, only: flux_ge, flux_gn, flux_gt
19  USE mflux, only: flux_se, flux_sn, flux_st
20  USE mflux, only: flux_gse, flux_gsn, flux_gst
21  USE mflux, only: flux_sse, flux_ssn, flux_sst
22  USE physprop, only: mmax
23  USE run, only: added_mass, m_am
24  IMPLICIT NONE
25 
26 ! Local variables
27 !---------------------------------------------------------------------//
28 ! solids phase index
29  INTEGER :: M
30 !---------------------------------------------------------------------//
31 
32  IF(.NOT.added_mass) THEN
33  CALL calc_mflux0 (u_g, v_g, w_g, rop_ge, rop_gn, rop_gt, &
34  flux_ge, flux_gn, flux_gt)
35  DO m = 1, mmax
36  CALL calc_mflux0 (u_s(1,m), v_s(1,m), w_s(1,m), &
37  rop_se(1,m), rop_sn(1,m), rop_st(1,m), &
38  flux_se(1,m), flux_sn(1,m), flux_st(1,m))
39  ENDDO
40 
41  ELSE
42 ! New fluxes are defined for gas based on added mass
43  CALL calc_mflux_am (u_g, v_g, w_g, rop_ge, rop_gn, rop_gt, &
44  rop_se(1,m_am), rop_sn(1,m_am), rop_st(1,m_am), &
45  flux_ge, flux_gn, flux_gt, m_am)
46 
47  CALL calc_mflux0 (u_g, v_g, w_g, rop_ge, rop_gn, rop_gt, &
48  flux_gse, flux_gsn, flux_gst)
49  DO m = 1, mmax
50 ! New fluxes are defined for M = M_am where virtual mass force is added.
51  IF(m==m_am) THEN
52  CALL calc_mflux_am (u_s(1,m), v_s(1,m), w_s(1,m), &
53  rop_se(1,m), rop_sn(1,m), rop_st(1,m), &
54  rop_ge, rop_gn, rop_gt, &
55  flux_se(1,m), flux_sn(1,m), flux_st(1,m),&
56  m_am)
57  CALL calc_mflux0 (u_s(1,m), v_s(1,m), w_s(1,m), &
58  rop_se(1,m), rop_sn(1,m), rop_st(1,m), &
60  ELSE
61  CALL calc_mflux0 (u_s(1,m), v_s(1,m), w_s(1,m), &
62  rop_se(1,m), rop_sn(1,m), rop_st(1,m), &
63  flux_se(1,m), flux_sn(1,m), flux_st(1,m))
64  ENDIF
65  ENDDO
66  ENDIF
67 
68  RETURN
69  END SUBROUTINE calc_mflux
70 
71 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
72 ! C
73 ! Subroutine:: CALC_MFLUX0 C
74 ! Purpose: Calculate the convection fluxes. C
75 ! C
76 ! Author: M. Syamlal Date: 31-MAY-05 C
77 ! C
78 ! C
79 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
80  SUBROUTINE calc_mflux0(U, V, W, ROP_E, ROP_N, ROP_T,&
81  flux_e, flux_n, flux_t)
82 
83 ! Modules
84 !---------------------------------------------------------------------//
85  USE compar, only: ijkstart3, ijkend3
86  USE functions, only: fluid_at
87  USE functions, only: im_of, jm_of, km_of
88  USE geometry, only: do_k
89  USE geometry, only: ayz, axz, axy
90  USE param, only: dimension_3
91  IMPLICIT NONE
92 
93 ! Dummy arguments
94 !---------------------------------------------------------------------//
95 ! Velocity components
96  DOUBLE PRECISION, INTENT(IN) :: U(dimension_3)
97  DOUBLE PRECISION, INTENT(IN) :: V(dimension_3)
98  DOUBLE PRECISION, INTENT(IN) :: W(dimension_3)
99 ! Face value of density (for calculating convective fluxes)
100  DOUBLE PRECISION, INTENT(IN) :: ROP_E(dimension_3)
101  DOUBLE PRECISION, INTENT(IN) :: ROP_N(dimension_3)
102  DOUBLE PRECISION, INTENT(IN) :: ROP_T(dimension_3)
103 ! Convective mass fluxes
104  DOUBLE PRECISION, INTENT(OUT) :: Flux_E(dimension_3)
105  DOUBLE PRECISION, INTENT(OUT) :: Flux_N(dimension_3)
106  DOUBLE PRECISION, INTENT(OUT) :: Flux_T(dimension_3)
107 
108 ! Local variables
109 !---------------------------------------------------------------------//
110 ! Indices
111  INTEGER :: IJK, IMJK, IJMK, IJKM
112 !---------------------------------------------------------------------//
113 
114 !$omp parallel do default(none) private( IJK, IMJK, IJMK, IJKM) &
115 !$omp shared(ijkstart3, ijkend3, flux_e, flux_n, flux_t,&
116 !$omp rop_e, rop_n, rop_t, axz, axy, ayz, u, v, w, do_k)
117 
118  DO ijk = ijkstart3, ijkend3
119  IF (fluid_at(ijk)) THEN
120 
121  imjk = im_of(ijk)
122  ijmk = jm_of(ijk)
123 
124 ! East face (i+1/2, j, k)
125  flux_e(ijk) = rop_e(ijk)*ayz(ijk)*u(ijk)
126 ! West face (i-1/2, j, k)
127  IF (.NOT.fluid_at(imjk)) THEN
128  flux_e(imjk) = rop_e(imjk)*ayz(imjk)*u(imjk)
129  ENDIF
130 
131 ! North face (i, j+1/2, k)
132  flux_n(ijk) = rop_n(ijk)*axz(ijk)*v(ijk)
133 ! South face (i, j-1/2, k)
134  IF (.NOT.fluid_at(ijmk)) THEN
135  flux_n(ijmk) = rop_n(ijmk)*axz(ijmk)*v(ijmk)
136  ENDIF
137 
138  IF (do_k) THEN
139  ijkm = km_of(ijk)
140 ! Top face (i, j, k+1/2)
141  flux_t(ijk) = rop_t(ijk)*axy(ijk)*w(ijk)
142 ! Bottom face (i, j, k-1/2)
143  IF (.NOT.fluid_at(ijkm)) THEN
144  flux_t(ijkm) = rop_t(ijkm)*axy(ijkm)*w(ijkm)
145  ENDIF
146  ENDIF ! end if do_k
147  ENDIF ! end if fluid_at
148  ENDDO ! end do ijk
149 
150  RETURN
151  END SUBROUTINE calc_mflux0
152 
153 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
154 ! C
155 ! C
156 ! Subroutine: CALC_MFLUX_AM C
157 ! Purpose: Calculate the convection fluxes for case with added_mass. C
158 ! C
159 ! Author: S. Benyahia Date: C
160 ! C
161 ! C
162 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
163  SUBROUTINE calc_mflux_am(U, V, W, ROP_E, ROP_N, ROP_T, &
164  ropa_e, ropa_n, ropa_t, flux_e, &
165  flux_n, flux_t, m_am)
167 ! Modules
168 !---------------------------------------------------------------------//
169  USE compar, only: ijkstart3, ijkend3
170  USE functions, only: fluid_at
171  USE functions, only: im_of, jm_of, km_of
172  USE fldvar, only: ro_s
173  USE geometry, only: do_k
174  USE geometry, only: ayz, axz, axy
175  USE param, only: dimension_3
176  USE param1, only: one
177  USE physprop, only: cv
178  IMPLICIT NONE
179 
180 ! Dummy arguments
181 !---------------------------------------------------------------------//
182 ! Velocity components
183  DOUBLE PRECISION, INTENT(IN) :: U(dimension_3)
184  DOUBLE PRECISION, INTENT(IN) :: V(dimension_3)
185  DOUBLE PRECISION, INTENT(IN) :: W(dimension_3)
186 ! Face value of density (for calculating convective fluxes)
187  DOUBLE PRECISION, INTENT(IN) :: ROP_E(dimension_3)
188  DOUBLE PRECISION, INTENT(IN) :: ROP_N(dimension_3)
189  DOUBLE PRECISION, INTENT(IN) :: ROP_T(dimension_3)
190 ! Face value of density of added mass phase
191  DOUBLE PRECISION, INTENT(IN) :: ROPa_E(dimension_3)
192  DOUBLE PRECISION, INTENT(IN) :: ROPa_N(dimension_3)
193  DOUBLE PRECISION, INTENT(IN) :: ROPa_T(dimension_3)
194 ! Convective mass fluxes
195  DOUBLE PRECISION, INTENT(OUT) :: Flux_E(dimension_3)
196  DOUBLE PRECISION, INTENT(OUT) :: Flux_N(dimension_3)
197  DOUBLE PRECISION, INTENT(OUT) :: Flux_T(dimension_3)
198 ! phase index for phase of added_mass
199  INTEGER, INTENT(IN) :: M_AM
200 
201 ! Local variables
202 !---------------------------------------------------------------------//
203 ! Indices
204  INTEGER :: IJK, IMJK, IJMK, IJKM
205 !---------------------------------------------------------------------//
206 
207 !!!$omp parallel do private( IJK, IMJK, IJMK, IJKM) &
208 !!!$omp& schedule(static)
209  DO ijk = ijkstart3, ijkend3
210 
211  IF (fluid_at(ijk)) THEN
212 
213  imjk = im_of(ijk)
214  ijmk = jm_of(ijk)
215 
216 ! East face (i+1/2, j, k)
217  flux_e(ijk) = rop_e(ijk)* &
218  (one + cv*ropa_e(ijk)/ro_s(ijk,m_am))*&
219  ayz(ijk)*u(ijk)
220 ! West face (i-1/2, j, k)
221  IF (.NOT.fluid_at(imjk)) THEN
222  flux_e(imjk) = rop_e(imjk)*&
223  (one + cv*ropa_e(imjk)/ro_s(ijk,m_am))*&
224  ayz(imjk)*u(imjk)
225  ENDIF
226 
227 ! North face (i, j+1/2, k)
228  flux_n(ijk) = rop_n(ijk)*&
229  (one + cv*ropa_n(ijk)/ro_s(ijk,m_am))*&
230  axz(ijk)*v(ijk)
231 ! South face (i, j-1/2, k)
232  IF (.NOT.fluid_at(ijmk)) THEN
233  flux_n(ijmk) = rop_n(ijmk)*&
234  (one + cv*ropa_n(ijmk)/ro_s(ijk,m_am))*&
235  axz(ijmk)*v(ijmk)
236  ENDIF
237 
238  IF (do_k) THEN
239  ijkm = km_of(ijk)
240 
241 ! Top face (i, j, k+1/2)
242  flux_t(ijk) = rop_t(ijk)*&
243  (one + cv*ropa_t(ijk)/ro_s(ijk,m_am))*&
244  axy(ijk)*w(ijk)
245 ! Bottom face (i, j, k-1/2)
246  IF (.NOT.fluid_at(ijkm)) THEN
247  flux_t(ijkm) = rop_t(ijkm)*&
248  (one + cv*ropa_t(ijkm)/ro_s(ijk,m_am))*&
249  axy(ijkm)*w(ijkm)
250  ENDIF
251  ENDIF ! end if do_k
252  ENDIF ! end if fluid_at
253  ENDDO ! end do ijk
254 
255  RETURN
256  END SUBROUTINE calc_mflux_am
double precision, dimension(:,:), allocatable rop_st
Definition: mflux_mod.f:46
double precision cv
Definition: physprop_mod.f:65
double precision, dimension(:), allocatable flux_ge
Definition: mflux_mod.f:13
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable flux_gst
Definition: mflux_mod.f:32
double precision, dimension(:,:), allocatable flux_st
Definition: mflux_mod.f:24
double precision, parameter one
Definition: param1_mod.f:29
integer dimension_3
Definition: param_mod.f:11
subroutine calc_mflux0(U, V, W, ROP_E, ROP_N, ROP_T, Flux_E, Flux_N, Flux_T)
Definition: calc_mflux.f:82
double precision, dimension(:), allocatable rop_gn
Definition: mflux_mod.f:38
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
logical added_mass
Definition: run_mod.f:91
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision, dimension(:), allocatable flux_ssn
Definition: mflux_mod.f:31
subroutine calc_mflux()
Definition: calc_mflux.f:11
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
double precision, dimension(:), allocatable flux_gse
Definition: mflux_mod.f:28
integer mmax
Definition: physprop_mod.f:19
double precision, dimension(:), allocatable flux_gn
Definition: mflux_mod.f:15
integer m_am
Definition: run_mod.f:94
double precision, dimension(:), allocatable v_g
Definition: fldvar_mod.f:99
double precision, dimension(:), allocatable rop_ge
Definition: mflux_mod.f:36
double precision, dimension(:), allocatable w_g
Definition: fldvar_mod.f:111
Definition: run_mod.f:13
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
subroutine calc_mflux_am(U, V, W, ROP_E, ROP_N, ROP_T, ROPa_E, ROPa_N, ROPa_T, Flux_E, Flux_N, Flux_T, M_AM)
Definition: calc_mflux.f:166
Definition: param_mod.f:2
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
double precision, dimension(:), allocatable flux_gt
Definition: mflux_mod.f:17
double precision, dimension(:), allocatable rop_gt
Definition: mflux_mod.f:40
logical do_k
Definition: geometry_mod.f:30
double precision, dimension(:,:), allocatable rop_se
Definition: mflux_mod.f:44
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable u_g
Definition: fldvar_mod.f:87
double precision, dimension(:,:), allocatable rop_sn
Definition: mflux_mod.f:42
double precision, dimension(:,:), allocatable flux_se
Definition: mflux_mod.f:22
double precision, dimension(:), allocatable flux_gsn
Definition: mflux_mod.f:30
double precision, dimension(:,:), allocatable flux_sn
Definition: mflux_mod.f:20
double precision, dimension(:), allocatable flux_sst
Definition: mflux_mod.f:33
double precision, dimension(:), allocatable flux_sse
Definition: mflux_mod.f:29