MFIX  2016-1
kintheory_w_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CALC_IA_MOMSOURCE_W_S C
4 ! Purpose: Determine source terms for W_S momentum equation arising C
5 ! from IA kinetic theory constitutive relations for stress C
6 ! and solid-solid drag C
7 ! C
8 ! Literature/Document References: C
9 ! Idir, Y.H., "Modeling of the multiphase mixture of particles C
10 ! using the kinetic theory approach," PhD Thesis, Illinois C
11 ! Institute of Technology, Chicago, Illinois, 2004 C
12 ! Iddir, Y.H., & H. Arastoopour, "Modeling of multitype particle C
13 ! flow using the kinetic theory approach," AIChE J., Vol 51, C
14 ! No 6, June 2005 C
15 ! C
16 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
17 
18  SUBROUTINE calc_ia_momsource_w_s(M)
19 
20 !-----------------------------------------------
21 ! Modules
22 !-----------------------------------------------
23  USE param1, only: half, zero, undefined
24  USE constant, only: pi
25 
26 ! trace of D_s at i, j, k
27  USE visc_s, only: trd_s
28 
29 ! number of solids phases
30  USE physprop, only: mmax
31 
32 ! x,y,z-components of solids velocity
33  USE fldvar, only: u_s, v_s, w_s
34 ! particle diameter, bulk density, material density
35  USE fldvar, only: d_p, rop_s, ro_s
36 ! granular temperature
37  USE fldvar, only: theta_m, ep_s
38 ! dilute threshold
39  USE toleranc, only: dil_ep_s
40 
41  Use kintheory
42 
43  USE geometry
44  USE indices
45  USE compar
46  USE fun_avg
47  USE functions
48 
49  IMPLICIT NONE
50 !-----------------------------------------------
51 ! Dummy arguments
52 !-----------------------------------------------
53 ! solids phase index
54  INTEGER, INTENT(IN) :: M
55 !-----------------------------------------------
56 ! Local variables
57 !-----------------------------------------------
58 ! Temporary variable
59  DOUBLE PRECISION :: STRESS_TERMS, DRAG_TERMS
60 ! Indices
61  INTEGER :: IJK, J, I, IM, IJKP, IMJK, IJKN, IJKNT, IJKS,&
62  IJKST, IJMKP, IJMK, IJKE, IJKTE, IJKW, IJKTW,&
63  IMJKP, K, IJKT, JM, KP, IJKM, IPJK,&
64  IJPK
65 ! Phase index
66  INTEGER :: L
67 ! Viscosity values
68  DOUBLE PRECISION :: MU_sL_pE, MU_sL_pW, MU_sL_pN, MU_sL_pS, MU_sL_pT,&
69  MU_sL_pB, MU_sL_p
70 ! Bulk viscosity values
71  DOUBLE PRECISION :: XI_sL_pT, XI_sL_pB, LAMBDA_sL_pT, LAMBDA_sL_pB
72 ! Variables for drag calculations
73  DOUBLE PRECISION :: M_PM, M_PL, D_PM, D_PL, NU_PM_pT, NU_PM_pB, NU_PM_p, &
74  NU_PL_pT, NU_PL_pB, NU_PL_p, T_PM_pT, T_PM_pB,&
75  T_PL_pT, T_PL_pB, Fnu_s_p, FT_sM_p, FT_sL_p
76 ! Average velocity gradients
77  DOUBLE PRECISION :: duodz
78 ! Average volume fraction
79  DOUBLE PRECISION :: EPSA
80 ! Source terms (Surface)
81  DOUBLE PRECISION :: sswx, sswy, sswz, ssx, ssy, ssz, ssbv, tauxz_x
82 ! Source terms (Volumetric)
83  DOUBLE PRECISION :: tauxz_ox, DS1, DS2, DS3, DS4, DS1plusDS2
84 !-----------------------------------------------
85 
86 ! section largely based on tau_w_g:
87 
88  DO ijk = ijkstart3, ijkend3
89 
90 ! Skip walls where some values are undefined.
91  IF(wall_at(ijk)) cycle
92 
93  d_pm = d_p(ijk,m)
94  m_pm = (pi/6d0)*(d_pm**3.)*ro_s(ijk,m)
95 
96  k = k_of(ijk)
97  ijkt = top_of(ijk)
98  epsa = avg_z(ep_s(ijk,m),ep_s(ijkt,m),k)
99  IF ( .NOT.sip_at_t(ijk) .AND. epsa>dil_ep_s) THEN
100 
101  j = j_of(ijk)
102  i = i_of(ijk)
103  kp = kp1(k)
104  im = im1(i)
105  jm = jm1(j)
106  imjk = im_of(ijk)
107  ijmk = jm_of(ijk)
108  ijkm = km_of(ijk)
109  ijkp = kp_of(ijk)
110  ijmkp = jm_of(ijkp)
111  imjkp = kp_of(imjk)
112 
113  ijkn = north_of(ijk)
114  ijks = south_of(ijk)
115  ijknt = top_of(ijkn)
116  ijkst = top_of(ijks)
117 
118  ijke = east_of(ijk)
119  ijkw = west_of(ijk)
120  ijkte = east_of(ijkt)
121  ijktw = west_of(ijkt)
122 
123 ! additional required quantities:
124  ipjk = ip_of(ijk)
125  ijpk = jp_of(ijk)
126 
127 ! initialize variable
128  stress_terms = zero
129  drag_terms = zero
130 
131  DO l = 1, mmax
132  IF (m .ne. l) THEN
133 
134 !--------------------- Sources from Stress Terms ---------------------
135 ! Surface Forces
136 ! standard shear stress terms (i.e. ~diffusion)
137  mu_sl_pe = avg_z_h(avg_x_h(mu_sl_ip(ijk,m,l),mu_sl_ip(ijke,m,l),i),&
138  avg_x_h(mu_sl_ip(ijkt,m,l),mu_sl_ip(ijkte,m,l),i),k)
139  mu_sl_pw = avg_z_h(avg_x_h(mu_sl_ip(ijkw,m,l),mu_sl_ip(ijk,m,l),im),&
140  avg_x_h(mu_sl_ip(ijktw,m,l),mu_sl_ip(ijkt,m,l),im),k)
141  sswx = mu_sl_pe*(w_s(ipjk,l)-w_s(ijk,l))*ayz_w(ijk)*odx_e(i)&
142  -mu_sl_pw*(w_s(ijk,l)-w_s(imjk,l))*ayz_w(imjk)*odx_e(im)
143 
144  mu_sl_pn = avg_z_h(avg_y_h(mu_sl_ip(ijk,m,l),mu_sl_ip(ijkn,m,l), j),&
145  avg_y_h(mu_sl_ip(ijkt,m,l),mu_sl_ip(ijknt,m,l), j), k)
146  mu_sl_ps = avg_z_h(avg_y_h(mu_sl_ip(ijks,m,l),mu_sl_ip(ijk,m,l), jm),&
147  avg_y_h(mu_sl_ip(ijkst,m,l),mu_sl_ip(ijkt,m,l), jm), k)
148  sswy = mu_sl_pn*(w_s(ijpk,l)-w_s(ijk,l))*axz_w(ijk)*ody_n(j)&
149  -mu_sl_ps*(w_s(ijk,l)-w_s(ijmk,l))*axz_w(ijkm)*ody_n(jm)
150 
151  mu_sl_pt = mu_sl_ip(ijkt,m,l)
152  mu_sl_pb = mu_sl_ip(ijk,m,l)
153  sswz = mu_sl_pt*(w_s(ijkp,l)-w_s(ijk,l))*axy_w(ijk)*odz(kp)*ox(i)&
154  -mu_sl_pb*(w_s(ijk,l)-w_s(ijkm,l))*axy_w(ijkm)*odz(k)*ox(i)
155 
156 ! bulk viscosity term
157  xi_sl_pt = xi_sl_ip(ijkt,m,l)
158  xi_sl_pb = xi_sl_ip(ijk,m,l)
159  lambda_sl_pt = -(2d0/3d0)*mu_sl_pt + xi_sl_pt
160  lambda_sl_pb = -(2d0/3d0)*mu_sl_pb + xi_sl_pb
161  ssbv = (lambda_sl_pt*trd_s(ijkt,l)-lambda_sl_pb*trd_s(ijk,l))*axy(ijk)
162 
163 ! off diagonal shear stress terms
164  ssx = mu_sl_pe*(u_s(ijkp,l)-u_s(ijk,l))*ox_e(i)*ayz_w(ijk)*odz_t(k)&
165  -mu_sl_pw*(u_s(imjkp,l)-u_s(imjk,l))*(dy(j)*half*(dz(k)+&
166  dz(kp)))*odz_t(k)
167  !same as oX_E(IM)*AYZ_W(IMJK), but avoids singularity
168 
169  ssy = mu_sl_pn*(v_s(ijkp,l)-v_s(ijk,l))*axz_w(ijk)*odz_t(k)*ox(i)&
170  -mu_sl_ps*(v_s(ijmkp,l)-v_s(ijmk,l))*axz_w(ijmk)*odz_t(k)*ox(i)
171 
172  ssz = sswz
173 
174 ! special terms for cylindrical coordinates
175  IF (cylindrical) THEN
176 ! tau_zz term: modify Ssz: (1/x) (d/dz) (tau_zz)
177 ! integral of (1/x) (d/dz) (2mu*(u/x))
178 ! (normally part of tau_w_s) - explicit
179  ssz = ssz +(&
180  (mu_sl_pt*(u_s(ijkp,l)+u_s(imjkp,l))*ox(i)*axy_w(ijk))-&
181  (mu_sl_pb*(u_s(ijk,l)+u_s(imjk,l))*ox(i)*axy_w(ijkm)))
182 
183  mu_sl_p = avg_z(mu_sl_ip(ijk,m,l),mu_sl_ip(ijkt,m,l),k)
184 ! tau_xz/x terms: (tau_xz/x)
185 ! integral of (1/x)*(mu/x)*du/dz
186 ! (normally part of tau_w_s) - explicit
187  IF (ox_e(im) /= undefined) THEN
188  duodz = (u_s(imjkp,l)-u_s(imjk,l))*ox_e(im)*odz_t(k)
189  ELSE
190  duodz = zero
191  ENDIF
192 
193  tauxz_ox = mu_sl_p*ox(i)*half*(&
194  (ox_e(i)*(u_s(ijkp,l)-u_s(ijk,l))*odz_t(k))+&
195  duodz)
196 
197 ! integral of (1/x)*mu*dw/dx
198 ! (normally part of source_w_s)
199  tauxz_ox = tauxz_ox + (mu_sl_p*ox(i)*half*&
200  ( (w_s(ipjk,l)-w_s(ijk,l))*odx_e(i) + &
201  (w_s(ijk,l)-w_s(imjk,l))*odx_e(im) ) )
202 
203 ! integral of (1/x)*(-mu/x)*w
204 ! (normally part of source_w_s)
205  tauxz_ox = tauxz_ox - (ox(i)*ox(i)*mu_sl_p*w_s(ijk,l))
206 
207 ! multiply all tau_xz/x terms by volume:
208  tauxz_ox = tauxz_ox*vol_w(ijk)
209 
210 ! x*tau_xz term: (1/x) (d/dz) (x*tau_xz)
211 ! integral of (1/x)*d( (-x)*(mu/x)*w )/dx
212 ! (normally part of source_w_s)
213  tauxz_x = -( ( mu_sl_pe*ox_e(i)*half*(w_s(ipjk,l)+&
214  w_s(ijk,l))*ayz_w(ijk) )-( mu_sl_pw*half*&
215  (w_s(ijk,l)+w_s(imjk,l))*&
216  (dy(j)*half*(dz(k)+dz(kp)) ) ) )
217  !same as oX_E(IM)*AYZ_W(IMJK), but avoids singularity
218  ELSE
219  tauxz_ox = zero
220  tauxz_x = zero
221  ENDIF
222 !--------------------- End Sources from Stress Term ---------------------
223 
224 
225 !--------------------- Sources from Momentum Source Term ---------------------
226 ! Momentum source associated with the difference in the gradients in
227 ! number density of solids phase m and all other solids phases
228  d_pl = d_p(ijk,l)
229  m_pl = (pi/6d0)*(d_pl**3.)*ro_s(ijk,l)
230 
231  nu_pm_pt = rop_s(ijkt,m)/m_pm
232  nu_pm_pb = rop_s(ijk,m)/m_pm
233  nu_pm_p = avg_z(nu_pm_pb,nu_pm_pt,k)
234 
235  nu_pl_pt = rop_s(ijkt,l)/m_pl
236  nu_pl_pb = rop_s(ijk,l)/m_pl
237  nu_pl_p = avg_z(nu_pl_pb,nu_pl_pt,k)
238 
239  fnu_s_p = avg_z(fnu_s_ip(ijk,m,l),fnu_s_ip(ijkt,m,l),k)
240  ds1 = fnu_s_p*nu_pl_p*(nu_pm_pt-nu_pm_pb)*ox(i)*odz_t(k)
241  ds2 = -fnu_s_p*nu_pm_p*(nu_pl_pt-nu_pl_pb)*ox(i)*odz_t(k)
242  ds1plusds2 = ds1 + ds2
243 
244 ! Momentum source associated with the gradient in granular
245 ! temperature of species M
246  t_pm_pt = theta_m(ijkt,m)
247  t_pm_pb = theta_m(ijk,m)
248 
249  ft_sm_p = avg_z(ft_sm_ip(ijk,m,l),ft_sm_ip(ijkt,m,l),k)
250  ds3 = ft_sm_p*(t_pm_pt-t_pm_pb)*ox(i)*odz_t(k)
251 
252 ! Momentum source associated with the gradient in granular
253 ! temperature of species L
254  t_pl_pt = theta_m(ijkt,l)
255  t_pl_pb = theta_m(ijk,l)
256 
257  ft_sl_p = avg_z(ft_sl_ip(ijk,m,l),ft_sl_ip(ijkt,m,l),k)
258  ds4 = ft_sl_p*(t_pl_pt-t_pl_pb)*ox(i)*odz_t(k)
259 !--------------------- End Sources from Momentum Source Term ---------------------
260 
261 
262 ! Add the terms
263  stress_terms = stress_terms + sswx + sswy + sswz + &
264  ssbv + ssx + ssy + ssz + tauxz_ox + tauxz_x
265  drag_terms = drag_terms + (ds1plusds2+ds3+ds4)*vol_w(ijk)
266 
267  ELSE ! if m .ne. L
268 ! for m = l all stress terms should already be handled in existing routines
269 ! for m = l all drag terms should become zero
270  stress_terms = stress_terms + zero
271  drag_terms = drag_terms + zero
272  ENDIF ! if m .ne. L
273  ENDDO ! over L
274 
275  ktmom_w_s(ijk,m) = stress_terms + drag_terms
276  ELSE
277  ktmom_w_s(ijk,m) = zero
278  ENDIF ! dilute
279  ENDDO ! over ijk
280 
281  RETURN
282  END SUBROUTINE calc_ia_momsource_w_s
double precision, dimension(:,:), allocatable trd_s
Definition: visc_s_mod.f:63
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
double precision, dimension(:), allocatable vol_w
Definition: geometry_mod.f:242
double precision, dimension(:,:,:), allocatable fnu_s_ip
Definition: kintheory_mod.f:38
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:,:,:), allocatable mu_sl_ip
Definition: kintheory_mod.f:27
double precision, dimension(:), allocatable ox_e
Definition: geometry_mod.f:143
double precision, dimension(:,:,:), allocatable ft_sl_ip
Definition: kintheory_mod.f:43
double precision, dimension(:,:,:), allocatable ft_sm_ip
Definition: kintheory_mod.f:41
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
subroutine calc_ia_momsource_w_s(M)
Definition: kintheory_w_s.f:19
integer, dimension(:), allocatable im1
Definition: indices_mod.f:50
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:), allocatable ody_n
Definition: geometry_mod.f:123
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
integer mmax
Definition: physprop_mod.f:19
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, dimension(:), allocatable odx_e
Definition: geometry_mod.f:121
integer, dimension(:), allocatable jm1
Definition: indices_mod.f:51
double precision, dimension(:,:,:), allocatable xi_sl_ip
Definition: kintheory_mod.f:31
double precision, dimension(:), allocatable ox
Definition: geometry_mod.f:140
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
double precision, dimension(:,:), allocatable ktmom_w_s
Definition: kintheory_mod.f:77
integer, dimension(:), allocatable kp1
Definition: indices_mod.f:52
double precision, parameter half
Definition: param1_mod.f:28
double precision, dimension(:), allocatable ayz_w
Definition: geometry_mod.f:236
double precision, parameter dil_ep_s
Definition: toleranc_mod.f:24
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
double precision, dimension(:), allocatable axz_w
Definition: geometry_mod.f:238
double precision, dimension(:), allocatable odz
Definition: geometry_mod.f:118
logical cylindrical
Definition: geometry_mod.f:168
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable axy_w
Definition: geometry_mod.f:240
double precision function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
double precision, parameter pi
Definition: constant_mod.f:158
double precision, dimension(:), allocatable odz_t
Definition: geometry_mod.f:125
double precision, parameter zero
Definition: param1_mod.f:27