MFIX  2016-1
drag_ss.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: DRAG_ss C
4 ! Purpose: This module computes the coefficient of drag between C
5 ! two solids phases (M and L). C
6 ! C
7 ! Author: M. Syamlal Date: 20-MAY-96 C
8 ! C
9 ! C
10 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
11  SUBROUTINE drag_ss(L, M)
12 
13 ! Modules
14 !---------------------------------------------------------------------//
15  use compar, only: mype
16  use exit, only: mfix_exit
17  use functions, only: funlm
18  use run, only: granular_energy, kt_type, kt_type_enum
19  use run, only: lun_1984, simonin_1996, ahmadi_1995
20  use run, only: ia_2005, gd_1999, ghd_2007, gtsh_2012
21  use usr_prop, only: usr_fss, calc_usr_prop
22  use usr_prop, only: solidssolids_drag
23  IMPLICIT NONE
24 
25 ! Dummy Arguments
26 !---------------------------------------------------------------------//
27 ! Index of solids phases
28  INTEGER, INTENT(IN) :: L, M
29 
30 ! Local Variables
31 !---------------------------------------------------------------------//
32 ! index for storing solids-solids drag coefficients in the upper
33 ! triangle of the matrix
34  INTEGER :: LM
35 
36 !---------------------------------------------------------------------//
37  lm = funlm(l,m)
38 
39  IF (usr_fss(lm)) THEN
40  CALL calc_usr_prop(solidssolids_drag,ll=l,lm=m)
41  ELSE
42  IF (granular_energy) THEN
43  SELECT CASE (kt_type_enum)
44  CASE(lun_1984, simonin_1996, ahmadi_1995)
45  CALL drag_ss_syam(l, m)
46  CASE (ia_2005)
47  CALL drag_ss_ia(l, m)
48  CASE (gd_1999, gtsh_2012)
49 ! strictly speaking gd and gtsh are monodisperse theories and so
50 ! do not have solids-solids drag
51  RETURN
52 ! ghd theory is a polydisperse theory but is self contained and does
53 ! not invoke this routine
54  CASE (ghd_2007)
55  RETURN
56  CASE DEFAULT
57 ! should never hit this
58  WRITE (*, '(A)') 'DRAG_SS'
59  WRITE (*, '(A,A)') 'Unknown KT_TYPE: ', kt_type
60  call mfix_exit(mype)
61  END SELECT
62  ELSE
63  CALL drag_ss_syam(l, m)
64  ENDIF
65  ENDIF
66 
67  RETURN
68  END SUBROUTINE drag_ss
69 
70 
71 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
72 ! C
73 ! Subroutine: DRAG_SS_SYAM C
74 ! Purpose: Calculate the solids-solids drag coefficient between a C
75 ! continuous solids phase and discrete solids C
76 ! C
77 ! Literature/Document References: C
78 ! M. Syamlal. 1987. The particle-particle drag term in a C
79 ! multiparticle model of fluidization. Technical Report. C
80 ! DOE/MC/21353-2373. Office of Fossil Energy, Morgantown C
81 ! Energy Technology Center, Morgantown, West Virginia. C
82 ! Gera, D., Syamlal, M., O'Brien T.J. 2004. International Journal C
83 ! of Multiphase Flow, 30, p419-428. C
84 ! C
85 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
86  SUBROUTINE drag_ss_syam(L,M)
87 
88 ! Modules
89 !---------------------------------------------------------------------//
90  use compar, only: mype, ijkstart3, ijkend3
92  USE drag, only: f_ss
93  USE fldvar, only: d_p, ro_s, rop_s, theta_m, p_star
94  USE fldvar, only: u_s, v_s, w_s
95  USE fun_avg, only: avg_x_e, avg_y_n, avg_z_t
96  use functions, only: wall_at, funlm
97  use functions, only: im_of, jm_of, km_of
98  USE indices, only: i_of
99  USE physprop, only: close_packed
100  USE rdf, only: g_0
101  IMPLICIT NONE
102 
103 ! Dummy arguments
104 !---------------------------------------------------------------------//
105 ! solids phase indices
106  INTEGER, INTENT(IN) :: M, L
107 
108 ! Local variables
109 !---------------------------------------------------------------------//
110 ! indices
111  INTEGER :: I, IJK, IMJK, IJMK, IJKM
112 ! index for storing solids-solids drag coefficients in the upper
113 ! triangle of the matrix
114  INTEGER :: LM
115 ! cell center value of U_sm, U_sl, V_sm, V_sl, W_sm, W_sl
116  DOUBLE PRECISION :: USCM, USCL, VSCM, VSCL, WSCM, WSCL
117 ! relative velocity between solids phase m and l
118  DOUBLE PRECISION :: VREL
119 ! particle diameters of phase M and phase L
120  DOUBLE PRECISION :: D_pm, D_pl
121 ! particle densities of phase M and phase L
122  DOUBLE PRECISION :: RO_M, RO_L
123 ! radial distribution function between phases M and L
124  DOUBLE PRECISION :: G0_ML
125 ! solid-solid drag coefficient
126  DOUBLE PRECISION :: lDss
127 
128 !---------------------------------------------------------------------//
129  lm = funlm(l,m)
130 
131  DO ijk = ijkstart3, ijkend3
132  IF (wall_at(ijk)) cycle
133 ! Evaluate at all flow boundaries and fluid cellls. This is unlike
134 ! calculation of the fluid-solid drag coefficient, which is only
135 ! evaluated in fluid cells and pressure inflow cells
136 
137  i = i_of(ijk)
138  imjk = im_of(ijk)
139  ijmk = jm_of(ijk)
140  ijkm = km_of(ijk)
141 
142 ! calculating velocity components at i, j, k (cell center)
143  uscl = avg_x_e(u_s(imjk,l),u_s(ijk,l),i)
144  vscl = avg_y_n(v_s(ijmk,l),v_s(ijk,l))
145  wscl = avg_z_t(w_s(ijkm,l),w_s(ijk,l))
146 
147  uscm = avg_x_e(u_s(imjk,m),u_s(ijk,m),i)
148  vscm = avg_y_n(v_s(ijmk,m),v_s(ijk,m))
149  wscm = avg_z_t(w_s(ijkm,m),w_s(ijk,m))
150 
151 ! magnitude of solids-solids relative velocity
152  vrel = sqrt((uscl - uscm)**2 + (vscl - vscm)**2 + &
153  (wscl - wscm)**2)
154 
155 ! setting aliases for easy reference
156  d_pm = d_p(ijk,m)
157  d_pl = d_p(ijk,l)
158  ro_m = ro_s(ijk,m)
159  ro_l = ro_s(ijk,l)
160  g0_ml = g_0(ijk,l,m)
161 
162 ! evaluating the solids-solids drag coefficient
163  CALL drag_ss_syam0(ldss, d_pm, d_pl, ro_m, ro_l, g0_ml, vrel)
164  f_ss(ijk,lm) = ldss*rop_s(ijk,m)*rop_s(ijk,l)
165 
166 ! Gera: accounting for particle-particle drag due to enduring contact
167 ! in a close-packed system.
168  IF(close_packed(m) .AND. close_packed(l)) &
169  f_ss(ijk,lm) = f_ss(ijk,lm) + &
171 
172  ENDDO ! end do (ijk=ijkstart3,ijkend3)
173 
174  RETURN
175  END SUBROUTINE drag_ss_syam
176 
177 
178 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
179 ! C
180 ! Subroutine: DRAG_SS_SYAM0 C
181 ! Purpose: Created as a work-around for des/hybrid cases that need C
182 ! to use this model while passing particle type information. C
183 ! C
184 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
185  SUBROUTINE drag_ss_syam0(ldss, d_pm, d_pl, ro_m, ro_l, g0_ml, vrel)
187 ! Modules
188 !---------------------------------------------------------------------//
189  use param1, only: one
190  use constant, only: c_e, c_f, pi
191  IMPLICIT NONE
192 
193 ! Dummy arguments
194 !---------------------------------------------------------------------//
195 ! solid-solid drag coefficient
196  DOUBLE PRECISION, INTENT(OUT) :: lDss
197 ! particle diameters of phase M and phase L
198  DOUBLE PRECISION, INTENT(IN) :: D_pm, D_pl
199 ! particle densities of phase M and phase L
200  DOUBLE PRECISION, INTENT(IN) :: RO_M, RO_L
201 ! radial distribution function between phases M and L
202  DOUBLE PRECISION, INTENT(IN) :: G0_ML
203 ! relative velocity between solids phase m and l
204  DOUBLE PRECISION, INTENT(IN) :: VREL
205 
206 ! Local variables
207 !---------------------------------------------------------------------//
208 ! Sum of particle diameters
209  DOUBLE PRECISION :: DPSUM
210 ! Intermediate calculation
211  DOUBLE PRECISION :: const
212 !---------------------------------------------------------------------//
213 
214  dpsum = d_pl + d_pm
215  const = 3.d0*(one + c_e)*(pi/2.d0 + c_f*pi*pi/8.d0)*&
216  dpsum**2/(2.d0*pi*(ro_l*d_pl**3+ro_m*d_pm**3))
217  ldss = const * g0_ml * vrel
218 
219  RETURN
220  END SUBROUTINE drag_ss_syam0
221 
222 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
223 ! !
224 ! Subroutine: DRAG_SS_IA !
225 ! Purpose: Compute collisional momentum source terms betweem solids !
226 ! phase M and solids phase L using Iddir Arastoopour (2005) kinetic !
227 ! theory mdoel that is proportional to the relative velocity between !
228 ! between the two phases (i.e. solids-solids drag). !
229 ! !
230 ! Literature/Document References: !
231 ! Iddir, Y.H., "Modeling of the multiphase mixture of particles !
232 ! using the kinetic theory approach," PhD Thesis, Illinois !
233 ! Institute of Technology, Chicago, Illinois, 2004 !
234 ! Iddir, Y.H., & H. Arastoopour, "Modeling of Multitype particle !
235 ! flow using the kinetic theory approach," AIChE J., Vol 51, !
236 ! no. 6, June 2005 !
237 ! Gera, D., Syamlal, M., O'Brien T.J. 2004. International Journal !
238 ! of Multiphase Flow, 30, p419-428. !
239 ! !
240 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
241  SUBROUTINE drag_ss_ia(L, M)
243 ! Modules
244 !---------------------------------------------------------------------//
245  use compar, only: ijkstart3, ijkend3
247  USE constant, only: c_e, pi
248  USE drag, only: f_ss
249  USE fldvar, only: d_p, ro_s, rop_s, theta_m, p_star
250  use functions, only: wall_at, funlm
251  USE param1, only: zero
252  USE physprop, only: close_packed
253  USE rdf, only: g_0
254  IMPLICIT NONE
255 
256 ! Dummy arguments
257 !---------------------------------------------------------------------//
258 ! solids phase indices
259  INTEGER, INTENT(IN) :: M, L
260 
261 ! Local variables
262 !---------------------------------------------------------------------//
263 ! indices
264  INTEGER :: IJK
265 ! index for storing solids-solids drag coefficients in the upper
266 ! triangle of the matrix
267  INTEGER :: LM
268 ! particle diameters of phase M and phase L
269  DOUBLE PRECISION :: D_pm, D_pl
270 ! particle densities of phase M and phase L
271  DOUBLE PRECISION :: RO_M, RO_L
272 ! radial distribution function between phases M and L
273  DOUBLE PRECISION :: G0_ML
274 ! granular temperature of phase M and phase L
275  DOUBLE PRECISION :: thetaM, thetaL
276 ! solid-solid drag coefficient
277  DOUBLE PRECISION :: lDss
278 ! Sum of particle diameters
279  DOUBLE PRECISION :: DPSUM
280 ! Intermediate calculation
281  DOUBLE PRECISION :: M_PM, M_PL, MPSUM, DPSUMo2
282  DOUBLE PRECISION :: Ap_lm, Dp_lm, Bp_lm, R2p_lm
283  DOUBLE PRECISION :: F_common_term
284 !---------------------------------------------------------------------//
285  lm = funlm(l,m)
286 
287  DO ijk = ijkstart3, ijkend3
288  IF (wall_at(ijk)) cycle
289 ! Evaluate at all flow boundaries and fluid cellls. This is unlike
290 ! calculation of the fluid-solid drag coefficient, which is only
291 ! evaluated in fluid cells and pressure inflow cells
292 
293 ! setting aliases for easy reference
294  d_pm = d_p(ijk,m)
295  d_pl = d_p(ijk,l)
296  ro_m = ro_s(ijk,m)
297  ro_l = ro_s(ijk,l)
298  thetam = theta_m(ijk,m)
299  thetal = theta_m(ijk,l)
300  g0_ml = g_0(ijk,l,m)
301 
302  dpsum = d_pl + d_pm
303  m_pm = (pi/6.d0) * d_pm**3 *ro_m
304  m_pl = (pi/6.d0) * d_pl**3 *ro_l
305  mpsum = m_pm + m_pl
306  dpsumo2 = dpsum/2.d0
307  ldss = zero
308 
309 ! evaluating the solids-solids drag coefficient
310  IF(thetam > zero .AND. thetal > zero) THEN
311  ap_lm = (m_pm*thetal+m_pl*thetam)/2.d0
312  bp_lm = (m_pm*m_pl*(thetal-thetam ))/(2.d0*mpsum)
313  dp_lm = (m_pl*m_pm*(m_pm*thetam+m_pl*thetal ))/&
314  (2.d0*mpsum*mpsum)
315 
316  r2p_lm = ( 1.d0/( 2.d0*ap_lm**1.5 * dp_lm*dp_lm ) )+&
317  ( (3.d0*bp_lm*bp_lm)/( ap_lm**2.5 * dp_lm**3 ) )+&
318  ( (15.d0*bp_lm**4)/( 2.d0*ap_lm**3.5 * dp_lm**4 ) )
319 
320  f_common_term = (dpsumo2*dpsumo2/4.d0)*(m_pm*m_pl/mpsum)*&
321  g0_ml*(1.d0+c_e)*(m_pm*m_pl)**1.5
322 
323 ! Momentum source associated with relative velocity between solids
324 ! phase m and solid phase l
325 ! Factor of rop_sm and rop_sl included in calling routine
326  ldss = f_common_term/(m_pm*m_pl)*dsqrt(pi)*r2p_lm*&
327  (thetam*thetal)**2
328  ENDIF
329  f_ss(ijk,lm) = ldss*rop_s(ijk,m)*rop_s(ijk,l)
330 
331 ! Gera: accounting for particle-particle drag due to enduring contact
332 ! in a close-packed system.
333  IF(close_packed(m) .AND. close_packed(l)) &
334  f_ss(ijk,lm) = f_ss(ijk,lm) + &
335  segregation_slope_coefficient*p_star(ijk)
336 
337  ENDDO ! end do (ijk=ijkstart3,ijkend3)
338 
339  RETURN
340  END SUBROUTINE drag_ss_ia
double precision c_e
Definition: constant_mod.f:105
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
subroutine drag_ss(L, M)
Definition: drag_ss.f:12
double precision, parameter one
Definition: param1_mod.f:29
double precision, dimension(:,:), allocatable f_ss
Definition: drag_mod.f:17
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision segregation_slope_coefficient
Definition: constant_mod.f:67
Definition: drag_mod.f:11
double precision function g_0(IJK, M1, M2)
Definition: rdf_mod.f:240
logical, dimension(dim_m) close_packed
Definition: physprop_mod.f:56
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
subroutine calc_usr_prop(lprop, lM, lL, lerr)
Definition: usr_prop_mod.f:49
double precision c_f
Definition: constant_mod.f:114
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
subroutine mfix_exit(myID, normal_termination)
Definition: exit.f:5
Definition: exit.f:2
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
Definition: run_mod.f:13
logical, dimension((dim_m *(dim_m-1)/2)+1) usr_fss
Definition: usr_prop_mod.f:22
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
integer mype
Definition: compar_mod.f:24
double precision, dimension(:), allocatable p_star
Definition: fldvar_mod.f:142
integer ijkstart3
Definition: compar_mod.f:80
Definition: rdf_mod.f:11
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
double precision, parameter pi
Definition: constant_mod.f:158
subroutine drag_ss_ia(L, M)
Definition: drag_ss.f:242
logical granular_energy
Definition: run_mod.f:112
subroutine drag_ss_syam(L, M)
Definition: drag_ss.f:87
double precision, parameter zero
Definition: param1_mod.f:27
subroutine drag_ss_syam0(ldss, d_pm, d_pl, ro_m, ro_l, g0_ml, vrel
Definition: drag_ss.f:186