MFIX  2016-1
calc_mu_g.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CALC_MU_g C
4 ! Purpose: Calculate the effective viscosity for a turbulent flow, C
5 ! which is the sum of molecular and eddy viscosities C
6 ! C
7 ! C
8 ! Comments: This routine is called even if mu_g0 is defined C
9 ! C
10 ! C
11 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
12  SUBROUTINE calc_mu_g()
13 
14 ! Modules
15 !---------------------------------------------------------------------//
16  use constant, only: l_scale0
17  use param1, only: undefined, zero
18  use physprop, only: mu_g0
19  use run, only: k_epsilon
20 ! invoke user defined quantity
21  USE usr_prop, only: usr_mug, calc_usr_prop
22  USE usr_prop, only: gas_viscosity
23  IMPLICIT NONE
24 
25 ! Local variables
26 !---------------------------------------------------------------------//
27 ! Cell indices
28  INTEGER :: IJK
29 !---------------------------------------------------------------------//
30 
31  IF (usr_mug) THEN
32  CALL calc_usr_prop(gas_viscosity,lm=0)
33  ELSEIF (mu_g0 == undefined) THEN
34 ! this is a necessary check as calc_mu_g is called at least once for
35 ! initialization and for other possible reasons (turbulence, ishii, etc)
36  CALL calc_default_mug
37  ENDIF
38 
39 ! adjust viscosity for tubulence
40  IF (k_epsilon) THEN
42  ELSEIF (l_scale0 /= zero) THEN
43  CALL calc_lscale_mu
44  ENDIF
45 
46  CALL set_epmug_values
47 
48  RETURN
49  END SUBROUTINE calc_mu_g
50 
51 
52 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
53 ! C
54 ! Subroutine: SET_EPMUG_VALUES C
55 ! Purpose: This routine sets the internal variables epmu_g and C
56 ! eplambda_g that are used in the stress calculations. If the C
57 ! keyword Ishii is invoked then these quantities represent the C
58 ! viscosity and second viscosity multiplied by the volume fraction C
59 ! otherwise they are simply viscosity/second viscosity (i.e. are C
60 ! multipled by one). C
61 ! C
62 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
63  SUBROUTINE set_epmug_values
64 
65 ! Modules
66 !---------------------------------------------------------------------//
67  USE compar, only: ijkstart3, ijkend3
68  USE fldvar, only: epg_ifac
69  USE functions, only: fluid_at
70  use mms, only: use_mms
71  USE param1, only: zero
73 ! Local variables
74 !---------------------------------------------------------------------//
75 ! cell index
76  INTEGER :: IJK
77 !---------------------------------------------------------------------//
78 
79 ! EPMU_GT(:) = EPG_IFAC(:)*MU_gt(:)
80 ! EPLAMBDA_GT(:) = EPG_IFAC(:)*LAMBDA_gt(:)
81 
82 ! Assign and update ep_g*mu_gt and ep_g*lambda_gt. This is needed even
83 ! for a constant viscosity case
84  DO ijk = ijkstart3, ijkend3
85 ! MMS: Force constant gas viscosity at all cells including ghost cells.
86  IF (fluid_at(ijk) .OR. use_mms) THEN
87 
88 ! if ishii then multiply by void fraction otherwise multiply by 1
89  epmu_gt(ijk)= epg_ifac(ijk)*mu_gt(ijk)
90  eplambda_gt(ijk) = epg_ifac(ijk)*lambda_gt(ijk)
91  ELSE
92  epmu_gt(ijk) = zero
93  eplambda_gt(ijk) = zero
94  ENDIF ! end if (fluid_at(ijk) .or. use_mms)
95  ENDDO ! end do (ijk=ijkstart3,ijkend3)
96 
97  RETURN
98  END SUBROUTINE set_epmug_values
99 
100 
101 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
102 ! C
103 ! Purpose: Compute a default value of gas viscosity where gas is C
104 ! assumed to be air C
105 ! Author: W. Sams/M. Syamlal Date: 18-JUL-94 C
106 ! C
107 ! Literature/Document References: C
108 ! Perry, R. H., and Chilton, C. H., Chemical Engineers' Handbook, C
109 ! 5th Edition, McGraw-Hill Inc., 1973, pp. 248, eqn. 3-133. C
110 ! Arnold, J. H., Vapor viscosities and the Sutherland equation, C
111 ! Journal of Chemical Physics, 1 (2), 1933, pp. 170-176. C
112 ! Sutherland, W., The Viscosity of Gases and Molecular Force, C
113 ! Phil. Mag. 5:507-531, 1893. C
114 ! C
115 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
116  SUBROUTINE calc_default_mug
118 ! Modules
119 !---------------------------------------------------------------------//
120  use compar, only: ijkstart3, ijkend3
121  use constant, only: to_si
122  use fldvar, only: t_g
123  use functions, only: fluid_at
124  use param1, only: zero
125  use physprop, only: mu_g
126  use visc_g, only: mu_gt
127  use visc_g, only: lambda_gt
128  IMPLICIT NONE
129 
130 ! Local parameters
131 !---------------------------------------------------------------------//
132  DOUBLE PRECISION, PARAMETER :: F2O3 = 2.d0/3.d0
133 
134 ! Local variables
135 !---------------------------------------------------------------------//
136 ! Cell indices
137  INTEGER :: IJK
138 !---------------------------------------------------------------------//
139 
140 !!$omp parallel do private(ijk) schedule(dynamic,chunk_size)
141  DO ijk = ijkstart3, ijkend3
142  IF (fluid_at(ijk)) THEN
143 
144 ! Gas viscosity (in Poise or Pa.s)
145 ! Calculating gas viscosity using Sutherland's formula with
146 ! Sutherland's constant (C) given by Vogel's equation C = 1.47*Tb.
147 ! For air C = 110 (Tb=74.82)
148 ! mu = 1.71*10-4 poise at T = 273K
149  mu_g(ijk) = to_si*1.7d-4 * &
150  (t_g(ijk)/273.0d0)**1.5d0 * (383.d0/(t_g(ijk)+110.d0))
151 
152 ! assign values to quantities used throughout code
153  mu_gt(ijk) = mu_g(ijk)
154  lambda_gt(ijk) = -f2o3*mu_gt(ijk)
155  ELSE
156  mu_g(ijk) = zero
157  mu_gt(ijk) = zero
158  lambda_gt(ijk) = zero
159  ENDIF
160  ENDDO
161 
162  RETURN
163  END SUBROUTINE calc_default_mug
164 
165 
166 
167 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
168 ! C
169 ! Purpose: compute turbulent eddy viscosity C
170 ! Author: S. Benyahia Date: May-13-04 C
171 ! C
172 ! C
173 ! Literature/Document References: C
174 ! Cao, J. and Ahmadi, G., 1995, Gas-particle two-phase turbulent C
175 ! flow in a vertical duct. Int. J. Multiphase Flow, vol. 21, C
176 ! No. 6, pp. 1203-1228. C
177 ! C
178 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
179  SUBROUTINE calc_k_epsilon_mu
181 ! Modules
182 !---------------------------------------------------------------------//
183  use compar, only: ijkstart3, ijkend3
184  use constant, only: mu_gmax
185  use drag, only: f_gs
186  use fldvar, only: k_turb_g, e_turb_g, ro_g
187  use fldvar, only: ep_s, ro_s
188  use functions, only: fluid_at
189  use param1, only: zero, one, small_number
190  use physprop, only: mu_g
191  use run, only: kt_type_enum, ahmadi_1995
192  use turb, only: tau_1
193  use visc_g, only: mu_gt, lambda_gt
194  use visc_s, only: ep_star_array
195  IMPLICIT NONE
196 
197 ! Local parameters
198 !---------------------------------------------------------------------//
199  DOUBLE PRECISION, PARAMETER :: F2O3 = 2.d0/3.d0
200 
201 ! Local variables
202 !---------------------------------------------------------------------//
203 ! Solids phase index
204  INTEGER :: M
205 ! Constant in turbulent viscosity formulation
206  DOUBLE PRECISION :: C_MU
207 ! particle relaxation time
208  DOUBLE PRECISION :: Tau_12_st
209 ! cell index
210  INTEGER :: IJK
211 !---------------------------------------------------------------------//
212 
213  c_mu = 9d-02
214 
215  DO ijk = ijkstart3, ijkend3
216  IF (fluid_at(ijk)) THEN
217 
218 ! Correction in Ahmadi paper (Cao and Ahmadi)
219  IF(kt_type_enum == ahmadi_1995 .AND.&
220  f_gs(ijk,1) > small_number) THEN
221 ! solids phase index used throughout routine...
222  m = 1 ! for solids phase
223  tau_12_st = ep_s(ijk,m)*ro_s(ijk,m)/f_gs(ijk,1)
224  c_mu = c_mu/(one+ tau_12_st/tau_1(ijk) * &
225  (ep_s(ijk,m)/(one-ep_star_array(ijk)))**3)
226  ENDIF
227 
228 ! I'm not very confident about this correction in Peirano paper,
229 ! but it's made available here, uncomment to use it.
230 ! sof@fluent.com --> 02/01/05
231 ! IF(KT_TYPE_ENUM==SIMONIN_1996 .AND.&
232 ! F_GS(IJK,1) > SMALL_NUMBER) THEN
233 ! solids phase index used throughout routine...
234 ! M = 1 ! for solids phase
235 ! Tau_12_st = Ep_s(IJK,M)*RO_S(IJK,M)/F_GS(IJK,1)
236 ! X_21 = Ep_s(IJK,M)*RO_S(IJK,M)/(EP_g(IJK)*RO_g(IJK))
237 ! new definition of C_mu (equation A.12, Peirano et al. (2002),
238 ! Powder tech. 122,69-82)
239 ! IF( K_12(IJK)/(2.0D0*K_Turb_G(IJK)) < ONE) &
240 ! C_MU = C_MU/(ONE+ 0.314D0*X_21*Tau_12_st / Tau_1(IJK) * &
241 ! (ONE - K_12(IJK)/(2.0D0*K_Turb_G(IJK))) )
242 ! ENDIF
243 
244 ! Definition of the turbulent viscosity
245  mu_gt(ijk) = mu_g(ijk) + ro_g(ijk)*c_mu*&
246  k_turb_g(ijk)**2 / (e_turb_g(ijk) + small_number)
247 
248  mu_gt(ijk) = min(mu_gmax, mu_gt(ijk))
249  lambda_gt(ijk) = -f2o3*mu_gt(ijk)
250  ELSE
251  mu_gt(ijk) = zero
252  lambda_gt(ijk) = zero
253  ENDIF
254  ENDDO
255 
256  RETURN
257  END SUBROUTINE calc_k_epsilon_mu
258 
259 
260 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
261 ! C
262 ! Purpose: compute l_scale0 model C
263 ! C
264 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
265  SUBROUTINE calc_lscale_mu
267 ! Modules
268 !---------------------------------------------------------------------//
269  use compar, only: ijkstart3, ijkend3
270  use constant, only: mu_gmax
271  use fldvar, only: ro_g
272  use functions, only: fluid_at
273  use param1, only: zero
274  use physprop, only: mu_g
275  use visc_g, only: mu_gt, lambda_gt
276  use visc_g, only: l_scale
277  IMPLICIT NONE
278 
279 ! Local parameters
280 !---------------------------------------------------------------------//
281  DOUBLE PRECISION, PARAMETER :: F2O3 = 2.d0/3.d0
282 
283 ! Local variables
284 !---------------------------------------------------------------------//
285  DOUBLE PRECISION :: D_g(3,3)
286 ! Gas velocity gradient
287  DOUBLE PRECISION :: DelV_g(3,3)
288 ! Second invariant of the deviator of D_g
289  DOUBLE PRECISION :: I2_devD_g
290 ! cell index
291  INTEGER :: IJK
292 !---------------------------------------------------------------------//
293 
294  DO ijk = ijkstart3, ijkend3
295  IF (fluid_at(ijk)) THEN
296 ! Calculate the rate of strain tensor D_g
297  CALL calc_deriv_vel_gas(ijk, delv_g, d_g)
298 
299 ! Calculate the second invariant of the deviator of D_g
300  i2_devd_g = ((d_g(1,1)-d_g(2,2))**2+(d_g(2,2)-d_g(3,3))**2+&
301  (d_g(3,3)-d_g(1,1))**2)/6.d0 + &
302  d_g(1,2)**2 + d_g(2,3)**2 + d_g(3,1)**2
303 
304  mu_gt(ijk) = mu_g(ijk)+2.0*l_scale(ijk)*l_scale(ijk)*&
305  ro_g(ijk)*sqrt(i2_devd_g)
306 
307  mu_gt(ijk) = min(mu_gmax, mu_gt(ijk))
308  lambda_gt(ijk) = -f2o3*mu_gt(ijk)
309  ELSE
310  mu_gt(ijk) = zero
311  lambda_gt(ijk) = zero
312  ENDIF
313  ENDDO
314 
315  RETURN
316  END SUBROUTINE calc_lscale_mu
double precision l_scale0
Definition: constant_mod.f:177
subroutine calc_default_mug
Definition: calc_mu_g.f:117
double precision to_si
Definition: constant_mod.f:146
double precision, dimension(:), allocatable tau_1
Definition: turb_mod.f:19
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable k_turb_g
Definition: fldvar_mod.f:161
subroutine calc_mu_g()
Definition: calc_mu_g.f:13
subroutine calc_k_epsilon_mu
Definition: calc_mu_g.f:180
double precision, parameter one
Definition: param1_mod.f:29
double precision, dimension(:), allocatable mu_gt
Definition: visc_g_mod.f:8
double precision, dimension(:), allocatable t_g
Definition: fldvar_mod.f:63
double precision mu_g0
Definition: physprop_mod.f:62
Definition: drag_mod.f:11
logical usr_mug
Definition: usr_prop_mod.f:13
double precision mu_gmax
Definition: constant_mod.f:180
double precision, parameter undefined
Definition: param1_mod.f:18
subroutine calc_lscale_mu
Definition: calc_mu_g.f:266
double precision, dimension(:), allocatable l_scale
Definition: visc_g_mod.f:24
subroutine calc_usr_prop(lprop, lM, lL, lerr)
Definition: usr_prop_mod.f:49
double precision, dimension(:), allocatable ep_star_array
Definition: visc_s_mod.f:54
Definition: turb_mod.f:2
subroutine calc_deriv_vel_gas(IJK, lVelGradG, lRateStrainG)
Definition: calc_trd_g.f:431
double precision, parameter small_number
Definition: param1_mod.f:24
double precision, dimension(:), allocatable epmu_gt
Definition: visc_g_mod.f:13
Definition: mms_mod.f:12
Definition: run_mod.f:13
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
double precision, dimension(:), allocatable epg_ifac
Definition: fldvar_mod.f:19
double precision, dimension(:), allocatable eplambda_gt
Definition: visc_g_mod.f:21
logical k_epsilon
Definition: run_mod.f:97
double precision, dimension(:), allocatable mu_g
Definition: physprop_mod.f:68
double precision, dimension(:), allocatable lambda_gt
Definition: visc_g_mod.f:17
integer ijkstart3
Definition: compar_mod.f:80
logical use_mms
Definition: mms_mod.f:15
subroutine set_epmug_values
Definition: calc_mu_g.f:64
double precision function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
double precision, dimension(:,:), allocatable f_gs
Definition: drag_mod.f:14
double precision, dimension(:), allocatable e_turb_g
Definition: fldvar_mod.f:162
double precision, dimension(:), allocatable ro_g
Definition: fldvar_mod.f:32
double precision, parameter zero
Definition: param1_mod.f:27