MFIX  2016-1
set_constprop.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: set_constprop C
4 ! Purpose: This routine serves two purposes: C
5 ! 1) initializes various variables everywhere in the domain with C
6 ! a zero value. the real need for this is unclear. undefined C
7 ! may be a better approach... C
8 ! 2) if defined, sets physical properties to their specified C
9 ! constant value in the fluid domain. cannot set in flow C
10 ! boundaries or later checks will also complain (may be C
11 ! overly strict check) C
12 ! C
13 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
14  SUBROUTINE set_constprop
15 
16 ! Modules
17 !-----------------------------------------------
18  USE param1, only: zero, half, one, undefined
19 
20  use discretelement, only: des_mmax
21 
22  USE fldvar, only: ro_g
23  USE fldvar, only: ro_s, d_p
24  use fldvar, only: p_s
25 
28  USE visc_s, only: ep_star_array
30 
31  USE physprop, only: nmax, mmax, smax
32  USE physprop, only: ro_s0, ro_g0, d_p0
33  USE physprop, only: mu_g0, mu_g, mu_s0
34  USE physprop, only: mw_avg, mw_mix_g
35  USE physprop, only: c_pg0, k_g0, c_pg, k_g, dif_g0, dif_g
36  USE physprop, only: c_ps0, k_s0, c_ps, k_s, dif_s0, dif_s
37  USE physprop, only: cv
38 
40  use constant, only: ep_star
41 
42  USE run, only: call_dqmom
43  USE run, only: yu_standish, fedors_landel
44  USE run, only: kt_type_enum, ia_2005, gd_1999, gtsh_2012
46 
47  USE drag, only: f_gs, f_ss
48 
50  use kintheory, only: fnu_s_ip, ft_sm_ip, ft_sl_ip
53  use kintheory, only: a2_gtsh, xsi_gtsh
54 
55  use mms, only: use_mms
56 
57  USE compar, only: ijkstart3, ijkend3
58  use functions, only: wall_at, fluid_at
59 
60  IMPLICIT NONE
61 !-----------------------------------------------
62 ! Local variables
63 !-----------------------------------------------
64 ! indices
65  INTEGER :: IJK, M, I, J
66  DOUBLE PRECISION :: old_value, DP_TMP(smax)
67 !-----------------------------------------------
68 
69 ! First, initialize certain transport coefficients, physical
70 ! properties, and other variable types everywhere in the
71 ! domain to zero. Then, set these to their specified value
72 ! (if defined) in fluid cells. Some are also set in flow cells.
73 ! NOTE: DO NOT simply zero existing field variables.
74  ro_g = zero
75  mu_g = zero
76  mu_gt = zero
77  epmu_gt = zero
78  lambda_gt = zero
80  k_g = zero
81  c_pg = zero
82  mw_mix_g = zero
83  dif_g = zero
84  f_gs = zero
85 
86  ro_s = zero
87  d_p = zero ! this is done in init_fvars
88  mu_s = zero
89  epmu_s = zero
90  lambda_s_c = zero
91  lambda_s = zero
92  eplambda_s = zero
93 ! not defining p_s in flow cells can become a problem for certain
94 ! cases as gradients in P_s are used (e.g., when a PO is west of a
95 ! MI...?). Simply assigning it a zero value may not be the best
96 ! approach but it is currently used....
97  p_s = zero
98  k_s = zero
99  c_ps = zero
100  dif_s = zero
101  f_ss = zero
102 
103 ! Set the flag for recalculating gas viscosity.
104 ! RECALC_VISC_G = (MU_g0==UNDEFINED .OR. L_SCALE0/=ZERO .OR.&
105 ! K_EPSILON .OR. ISHII)
106 
107 ! Set default value for virtual mass coefficient
108  cv = half
109 
110 ! Variables specific to various kinetic theory models
111  IF (kt_type_enum == ia_2005) THEN
112  mu_sm_ip = zero
113  mu_sl_ip = zero
114  xi_sm_ip = zero
115  xi_sl_ip = zero
116  fnu_s_ip = zero
117  ft_sm_ip = zero
118  ft_sl_ip = zero
119  kth_sl_ip = zero
120  knu_sm_ip = zero
121  knu_sl_ip = zero
122  kvel_s_ip = zero
123  ed_ss_ip = zero
124  edvel_sl_ip = zero
125  ENDIF
126 
127  IF (kt_type_enum == ia_2005 .OR. &
128  kt_type_enum == gd_1999 .OR. &
129  kt_type_enum == gtsh_2012) THEN
130  edt_s_ip = zero
131  edvel_sm_ip = zero
132  ENDIF
133 
134  IF(kt_type_enum == gtsh_2012) THEN
135  a2_gtsh = zero
136  xsi_gtsh = zero
137  ENDIF
138 
139 ! Set specified constant physical properties values
140  DO ijk = ijkstart3, ijkend3
141 
142  IF (.NOT.wall_at(ijk)) THEN
143 ! Fluid and inflow/outflow cells: FLAG < 100
144  IF (ro_g0 /= undefined) ro_g(ijk) = ro_g0
145  IF (c_pg0 /= undefined) c_pg(ijk) = c_pg0
146  IF (mw_avg /= undefined) mw_mix_g(ijk) = mw_avg
147  ENDIF
148 
149  IF (fluid_at(ijk)) THEN
150 ! Strictly Fluid cells: FLAG = 1
151  IF (mu_g0 /= undefined) THEN
152  mu_g(ijk) = mu_g0
153  mu_gt(ijk) = mu_g0
154  epmu_gt(ijk) = mu_g0
155  lambda_gt(ijk) = -(2.0d0/3.0d0)*mu_g0
156  eplambda_gt(ijk) = -(2.0d0/3.0d0)*mu_g0
157  ENDIF
158  IF (k_g0 /= undefined) k_g(ijk) = k_g0
159  IF (dif_g0 /= undefined) dif_g(ijk,:nmax(0)) = dif_g0
160  ENDIF
161 
162  IF (use_mms) THEN
163  IF (mu_g0 /= undefined) THEN
164  mu_g(ijk) = mu_g0
165  mu_gt(ijk) = mu_g0
166  epmu_gt(ijk) = mu_g0
167  lambda_gt(ijk) = -(2.0d0/3.0d0)*mu_g0
168  eplambda_gt(ijk) = -(2.0d0/3.0d0)*mu_g0
169  ENDIF
170  IF (k_g0 /= undefined) k_g(ijk) = k_g0
171  IF (dif_g0 /= undefined) dif_g(ijk,:nmax(0)) = dif_g0
172  ENDIF
173 
174  ENDDO
175 
176 ! ensure ro_s(ijk,m) is assigned to ro_s0(m) or ro_s(np) so that the
177 ! function ep_s works for discrete phases. might be able to move this
178 ! to set_ic_dem and set_ic_mppic. also required d_p(ijk,m) for hybrid
179 ! use. note check_solids_common_all ensures d_p0 is set for all
180 ! solids defined also either ro_s0 must be set or ro_s0
181  DO m = 1, mmax+des_mmax
182  DO ijk = ijkstart3, ijkend3
183  IF(.NOT.wall_at(ijk)) THEN
184 ! Fluid and inflow/outflow cells: FLAG < 100
185  IF (ro_s0(m) /= undefined) ro_s(ijk,m) = ro_s0(m)
186  IF (c_ps0(m) /= undefined) c_ps(ijk,m) = c_ps0(m)
187  IF (d_p0(m) /= undefined) d_p(ijk,m) = d_p0(m)
188  ENDIF
189 
190  IF (fluid_at(ijk)) THEN
191 ! Strictly fluid cells: FLAG = 1
192  IF (mu_s0(m) /= undefined) THEN
193  mu_s(ijk,m) = mu_s0(m)
194  epmu_s(ijk,m) = mu_s0(m)
195  lambda_s(ijk,m) = (-2./3.)*mu_s(ijk,m)
196  eplambda_s(ijk,m) = (-2./3.)*mu_s(ijk,m)
197  ENDIF
198  IF (k_s0(m) /= undefined) k_s(ijk,m) = k_s0(m)
199  IF (dif_s0(m) /= undefined) dif_s(ijk,m,:nmax(m)) = dif_s0(m)
200  ENDIF
201 
202  IF (use_mms) THEN
203  IF (mu_s0(m) /= undefined) THEN
204  mu_s(ijk,m) = mu_s0(m)
205  epmu_s(ijk,m) = mu_s0(m)
206  lambda_s(ijk,m) = (-2./3.)*mu_s(ijk,m)
207  eplambda_s(ijk,m) = (-2./3.)*mu_s(ijk,m)
208  ENDIF
209  IF (k_s0(m) /= undefined) k_s(ijk,m) = k_s0(m)
210  IF (dif_s0(m) /= undefined) dif_s(ijk,m,:nmax(m)) = dif_s0(m)
211  ENDIF
212 
213 ! set ep_star_array to user input ep_star in all cells.
214  ep_star_array(ijk) = ep_star
215 ! initializing blending stress parameters
216  IF(blending_stress.AND.tanh_blend) THEN
217  ep_g_blend_start(ijk) = ep_star_array(ijk) * 0.99d0
218  ep_g_blend_end(ijk) = ep_star_array(ijk) * 1.01d0
219  ELSE IF(blending_stress.AND.sigm_blend) THEN
220  ep_g_blend_start(ijk) = ep_star * 0.97d0
221  ep_g_blend_end(ijk) = ep_star * 1.01d0
222  ELSE
223  ep_g_blend_start(ijk) = ep_star_array(ijk)
224  ep_g_blend_end(ijk) = ep_star_array(ijk)
225  ENDIF
226 
227  ENDDO ! end loop over ijk
228  ENDDO ! end loop over MMAX
229 
230 
231 ! Initializing parameters needed if a correlation is used to compute
232 ! ep_star: initializing the indexing system.
233  IF(yu_standish .OR. fedors_landel) THEN
234  DO m = 1, smax
235  IF(ep_s_max(m) == undefined) ep_s_max(m) = one-ep_star
236  ENDDO
237 
238  IF (.NOT.call_dqmom) THEN
239 
240 ! refer to Syam's dissertation
241  IF (smax == 2) THEN
242  ep_s_max_ratio(1,2) = ep_s_max(1)/ &
243  (ep_s_max(1)+(1.-ep_s_max(1))*ep_s_max(2))
244  ENDIF
245 
246 ! initialize local variables
247  DO i = 1, smax
248  dp_tmp(i) = d_p0(i)
249  m_max(i) = i
250  ENDDO
251 
252 ! Rearrange the indices from coarsest particles to finest to be
253 ! used in CALC_ep_star. Done here because it may need to be done
254 ! for auto_restart
255  DO i = 1, smax
256  DO j = i, smax
257  IF(dp_tmp(i) < dp_tmp(j)) THEN
258  old_value = dp_tmp(i)
259  dp_tmp(i) = dp_tmp(j)
260  dp_tmp(j) = old_value
261  ENDIF
262  ENDDO
263  ENDDO
264 
265  DO i = 1, smax
266  DO j = 1, smax
267  IF(dp_tmp(i) == d_p0(j) .AND. d_p0(i) .NE. d_p0(j)) THEN
268  m_max(i) = j
269  ENDIF
270  ENDDO
271  ENDDO
272  ENDIF ! if .not. call_dqmom
273  ELSE ! if .not. Yu-standish or Fedors-Landel
274  ep_s_max(:) = zero
275  ep_s_max_ratio(:,:) = zero
276  d_p_ratio(:,:) = zero
277  m_max(:) = 0
278  ENDIF
279 
280  RETURN
281  END SUBROUTINE set_constprop
double precision cv
Definition: physprop_mod.f:65
double precision, dimension(dim_m) c_ps0
Definition: physprop_mod.f:83
double precision, dimension(:,:), allocatable c_ps
Definition: physprop_mod.f:86
double precision, dimension(:,:,:), allocatable kvel_s_ip
Definition: kintheory_mod.f:56
double precision, dimension(:,:), allocatable mu_s
Definition: visc_s_mod.f:5
double precision, dimension(:,:,:), allocatable fnu_s_ip
Definition: kintheory_mod.f:38
double precision, dimension(dim_m) d_p0
Definition: physprop_mod.f:25
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:,:,:), allocatable mu_sl_ip
Definition: kintheory_mod.f:27
double precision, dimension(:,:), allocatable dif_g
Definition: physprop_mod.f:110
double precision c_pg0
Definition: physprop_mod.f:74
double precision, parameter one
Definition: param1_mod.f:29
double precision, dimension(:,:,:), allocatable ft_sl_ip
Definition: kintheory_mod.f:43
double precision, dimension(:), allocatable mu_gt
Definition: visc_g_mod.f:8
double precision, dimension(:,:,:), allocatable ft_sm_ip
Definition: kintheory_mod.f:41
logical sigm_blend
Definition: run_mod.f:163
double precision, dimension(:,:), allocatable f_ss
Definition: drag_mod.f:17
double precision, dimension(dim_m) dif_s0
Definition: physprop_mod.f:113
double precision, dimension(:,:,:), allocatable knu_sm_ip
Definition: kintheory_mod.f:52
double precision mu_g0
Definition: physprop_mod.f:62
Definition: drag_mod.f:11
double precision, dimension(:,:,:), allocatable xi_sm_ip
Definition: kintheory_mod.f:29
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(dim_m) ep_s_max
Definition: constant_mod.f:38
double precision, dimension(:,:), allocatable epmu_s
Definition: visc_s_mod.f:9
double precision, dimension(:,:), allocatable lambda_s_c
Definition: visc_s_mod.f:51
double precision, dimension(:), allocatable ep_star_array
Definition: visc_s_mod.f:54
double precision, dimension(:,:), allocatable eplambda_s
Definition: visc_s_mod.f:35
integer, dimension(dim_m) m_max
Definition: constant_mod.f:41
subroutine set_constprop
Definition: set_constprop.f:15
double precision, dimension(:), allocatable xsi_gtsh
Definition: kintheory_mod.f:71
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
double precision, dimension(:), allocatable ep_g_blend_end
Definition: visc_s_mod.f:60
integer mmax
Definition: physprop_mod.f:19
double precision, dimension(dim_m, dim_m) d_p_ratio
Definition: constant_mod.f:34
double precision ro_g0
Definition: physprop_mod.f:59
double precision, dimension(:,:,:), allocatable xi_sl_ip
Definition: kintheory_mod.f:31
double precision, dimension(dim_m) k_s0
Definition: physprop_mod.f:95
double precision, dimension(:), allocatable epmu_gt
Definition: visc_g_mod.f:13
Definition: mms_mod.f:12
double precision, dimension(:), allocatable a2_gtsh
Definition: kintheory_mod.f:70
double precision, dimension(:), allocatable ep_g_blend_start
Definition: visc_s_mod.f:57
double precision, dimension(:,:,:), allocatable dif_s
Definition: physprop_mod.f:116
logical call_dqmom
Definition: run_mod.f:127
double precision, parameter half
Definition: param1_mod.f:28
Definition: run_mod.f:13
double precision k_g0
Definition: physprop_mod.f:89
double precision, dimension(:,:), allocatable lambda_s
Definition: visc_s_mod.f:31
logical yu_standish
Definition: run_mod.f:180
double precision, dimension(:,:,:), allocatable knu_sl_ip
Definition: kintheory_mod.f:54
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
double precision ep_star
Definition: constant_mod.f:29
double precision, dimension(:), allocatable eplambda_gt
Definition: visc_g_mod.f:21
double precision, dimension(:), allocatable mw_mix_g
Definition: physprop_mod.f:130
logical blending_stress
Definition: run_mod.f:161
integer, dimension(0:dim_m) nmax
Definition: physprop_mod.f:119
double precision, dimension(dim_m, dim_m) ep_s_max_ratio
Definition: constant_mod.f:34
double precision, dimension(:,:), allocatable p_s
Definition: fldvar_mod.f:123
double precision, dimension(:), allocatable mu_g
Definition: physprop_mod.f:68
double precision mw_avg
Definition: physprop_mod.f:71
double precision, dimension(:), allocatable lambda_gt
Definition: visc_g_mod.f:17
logical fedors_landel
Definition: run_mod.f:183
integer ijkstart3
Definition: compar_mod.f:80
logical use_mms
Definition: mms_mod.f:15
double precision, dimension(:,:,:), allocatable mu_sm_ip
Definition: kintheory_mod.f:25
double precision, dimension(:,:), allocatable ed_ss_ip
Definition: kintheory_mod.f:62
double precision, dimension(:,:), allocatable f_gs
Definition: drag_mod.f:14
double precision, dimension(:), allocatable k_g
Definition: physprop_mod.f:92
double precision, dimension(:,:,:), allocatable kth_sl_ip
Definition: kintheory_mod.f:50
integer smax
Definition: physprop_mod.f:22
logical tanh_blend
Definition: run_mod.f:162
double precision, dimension(dim_m) ro_s0
Definition: physprop_mod.f:28
double precision, dimension(dim_m) mu_s0
Definition: physprop_mod.f:53
double precision, dimension(:,:,:), allocatable edt_s_ip
Definition: kintheory_mod.f:64
double precision dif_g0
Definition: physprop_mod.f:107
double precision, dimension(:,:,:), allocatable edvel_sl_ip
Definition: kintheory_mod.f:68
double precision, dimension(:,:), allocatable k_s
Definition: physprop_mod.f:98
double precision, dimension(:), allocatable ro_g
Definition: fldvar_mod.f:32
double precision, parameter zero
Definition: param1_mod.f:27
double precision, dimension(:), allocatable c_pg
Definition: physprop_mod.f:80
double precision, dimension(:,:,:), allocatable edvel_sm_ip
Definition: kintheory_mod.f:66