MFIX  2016-1
kintheory_mod.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module: kintheory C
4 ! Purpose: Common block containing constants, variables, functions C
5 ! used by various kinetic theory models C
6 ! C
7 ! Literature/Document References: C
8 ! C
9 ! Garzo, V., Tenneti, S., Subramaniam, S., and Hrenya, C. M., C
10 ! "Enskog kinetic theory for monodisperse gas-solid flows", JFM, C
11 ! Vol. 712, 2012, pp. 129-168 C
12 ! C
13 ! C
14 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
15 
16  MODULE kintheory
17 
18 
19 ! coefficient terms needed for stress (in addition to
20 ! mu_s and lambda_s which are defined in visc_s_mod, allocated
21 ! in allocate_arrays and initialized in set_constprop; and
22 ! P_s which is defined in fldvar_mod, allocated in
23 ! allocate_arrays, and initialized in init_fvars)
24 ! stress term with gradient in particle M velocity
25  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: mu_sm_ip
26 ! stress term with gradient in particle L velocity
27  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: mu_sl_ip
28 ! stress term with trace in particle M velocity
29  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: xi_sm_ip
30 ! stress term with trace in particle L velocity
31  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: xi_sl_ip
32 
33 
34 ! coefficient terms needed for momentum source (in addition to
35 ! F_SS which is defined in drag_mod, allocated in allocate_arrays
36 ! and initialized in set_constprop)
37 ! momentum source term with gradient in number density
38  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: fnu_s_ip
39 ! momentum source term with gradient in mixture temperature or
40 ! with the gradient in temperature of species M
41  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: ft_sm_ip
42 ! momentum source term with gradient in temperature of species L
43  DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: ft_sl_ip
44 
45 
46 ! coefficient terms needed for heat flux (in addition to
47 ! kth_s which is defined in set_constprop, allocated
48 ! allocate_arrays and initialized in init_fvars)
49 ! heat flux term with gradient in granular temperature of species L
50  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: kth_sl_ip
51 ! heat flux term with gradient in number density of species M
52  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: knu_sm_ip
53 ! heat flux term with gradient in number density of species L
54  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: knu_sl_ip
55 ! heat flux term with velocity difference
56  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: kvel_s_ip
57 
58 
59 ! coefficient terms needed for energy dissipation
60 ! energy dissipation with difference in species granular
61 ! temperature: transfer between solid solid phases
62  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ed_ss_ip
63 ! energy dissipation term
64  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: edt_s_ip
65 ! energy dissipation with divergence of velocity of species M
66  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: edvel_sm_ip
67 ! energy dissipation with divergence of velocity of species L
68  DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: edvel_sl_ip
69 ! coefficient A2, xsi used in multiple places in GTSH theory
70  DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: a2_gtsh
71  DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: xsi_gtsh
72 
73 ! Solids source terms needed for Iddir & Arastoopour (2005)
74 ! kinetic theory model
75  DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: ktmom_u_s
76  DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: ktmom_v_s
77  DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: ktmom_w_s
78 
79 ! parameter in the theory of GTSH that is related to length scale
80 ! of lubrication effects. For details see GTSH, 2012.
81  DOUBLE PRECISION, PARAMETER :: epm = 0.01d0
82 
83 
84 
85  CONTAINS
86 
87 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
88 ! C
89 ! Purpose: Calculate the magnitude of the gas-solids relative C
90 ! velocity at i, j, k C
91 ! C
92 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
93  DOUBLE PRECISION FUNCTION kt_rvel(IJK, m)
94 
95 ! Modules
96 !---------------------------------------------------------------------//
97  use fldvar, only: u_s, v_s, w_s
98  use fldvar, only: u_g, v_g, w_g
99  use run, only: shear
100  use vshear, only: vsh
101  use indices, only: i_of
102  use functions, only: im_of, jm_of, km_of
103  use functions, only: fluid_at
104  use fun_avg, only: avg_x_e, avg_y_n, avg_z_t
105  IMPLICIT NONE
106 
107 ! Dummy arguments
108 !---------------------------------------------------------------------//
109 ! ijk index
110  INTEGER, INTENT(IN) :: ijk
111 ! solids phase index
112  INTEGER, INTENT(IN) :: M
113 
114 ! Local variables
115 !---------------------------------------------------------------------//
116 ! cell indices
117  INTEGER :: I, IMJK, IJMK, IJKM
118 ! Cell center value of solids and gas velocities
119  DOUBLE PRECISION :: USCM, VSCM, WSCM, &
120  UGC, VGC, WGC
121 ! y-component of velocity with 'shear' applied
122  DOUBLE PRECISION :: vs_j, vs_jm
123 !---------------------------------------------------------------------//
124  i = i_of(ijk)
125  imjk = im_of(ijk)
126  ijmk = jm_of(ijk)
127  ijkm = km_of(ijk)
128 
129 ! Awkward here but captures what was done in early version of
130 ! calc_mu_s. Otherwise any call to this routine must be done with
131 ! 'shear' already applied to v_s.
132  vs_j = v_s(ijk,m)
133  vs_jm = v_s(ijmk,m)
134  IF (shear) THEN
135  vs_j = v_s(ijk,m)+vsh(ijk)
136  IF(fluid_at(ijmk)) THEN
137  vs_jm = v_s(ijmk,m)+vsh(ijmk)
138  ELSE
139  vs_jm = v_s(ijmk,m)
140  ENDIF
141  ENDIF
142 
143 ! Start calculation for relative velocity
144 ! Calculate velocity components at i, j, k
145  ugc = avg_x_e(u_g(imjk),u_g(ijk),i)
146  vgc = avg_y_n(v_g(ijmk),v_g(ijk))
147  wgc = avg_z_t(w_g(ijkm),w_g(ijk))
148 
149  uscm = avg_x_e(u_s(imjk,m),u_s(ijk,m),i)
150  vscm = avg_y_n(vs_jm, vs_j)
151  wscm = avg_z_t(w_s(ijkm,m),w_s(ijk,m))
152 
153 ! Magnitude of gas-solids relative velocity
154  kt_rvel = sqrt((ugc - uscm)**2 + (vgc - vscm)**2 + &
155  (wgc - wscm)**2)
156 
157  RETURN
158  END FUNCTION kt_rvel
159 
160 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
161 ! C
162 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
163  DOUBLE PRECISION FUNCTION kt_cos_theta(ijk, M)
165 ! Modules
166 !---------------------------------------------------------------------//
167  USE param1, only: zero, small_number
168  USE fldvar, only: u_g, v_g, w_g
169  USE fldvar, only: u_s, v_s, w_s
170  USE fldvar, only: ep_s
171  USE run, only: shear
172  USE vshear, only: vsh
173  USE toleranc, only: zero_ep_s
174  USE indices, only: i_of
175  USE functions, only: im_of, jm_of, km_of
176  USE functions, only: fluid_at
177  USE fun_avg, only: avg_x_e, avg_y_n, avg_z_t
178  IMPLICIT NONE
179 
180 ! Dummy arguments
181 !---------------------------------------------------------------------//
182 ! ijk index
183  INTEGER, INTENT(IN) :: ijk
184 ! solids phase index
185  INTEGER, INTENT(IN) :: M
186 
187 ! Local variables
188 !---------------------------------------------------------------------//
189 ! cell indices
190  INTEGER :: I, IMJK, IJMK, IJKM
191 ! Cell center value of solids and gas velocities
192  DOUBLE PRECISION :: USCM, VSCM, WSCM, &
193  UGC, VGC, WGC
194  DOUBLE PRECISION :: vs_j, vs_jm, speed, rvel
195 !---------------------------------------------------------------------//
196 
197  i = i_of(ijk)
198  imjk = im_of(ijk)
199  ijmk = jm_of(ijk)
200  ijkm = km_of(ijk)
201 
202 ! Awkward here but captures what was done in early version of
203 ! calc_mu_s. Otherwise any call to this routine must be done with
204 ! 'shear' already applied to v_s.
205  vs_j = v_s(ijk,m)
206  vs_jm = v_s(ijmk,m)
207  IF (shear) THEN
208  vs_j = v_s(ijk,m)+vsh(ijk)
209  IF(fluid_at(ijmk)) THEN
210  vs_jm = v_s(ijmk,m)+vsh(ijmk)
211  ELSE
212  vs_jm = v_s(ijmk,m)
213  ENDIF
214  ENDIF
215 
216  ugc = avg_x_e(u_g(imjk),u_g(ijk),i)
217  vgc = avg_y_n(v_g(ijmk),v_g(ijk))
218  wgc = avg_z_t(w_g(ijkm),w_g(ijk))
219 
220  uscm = avg_x_e(u_s(imjk,m),u_s(ijk,m),i)
221  vscm = avg_y_n(vs_jm, vs_j)
222  wscm = avg_z_t(w_s(ijkm,m),w_s(ijk,m))
223 
224  rvel = sqrt((ugc - uscm)**2 + (vgc - vscm)**2 + &
225  (wgc - wscm)**2)
226 
227  speed = sqrt(uscm**2+vscm**2+wscm**2)
228 
229 ! motion viewed by the particles (crossing trajectory effect)
230  IF(speed > small_number .AND. rvel > small_number .AND. &
231  ep_s(ijk,m) > zero_ep_s) THEN
232  kt_cos_theta = ( (ugc-uscm)*uscm + (vgc-vscm)*vscm + &
233  (wgc-wscm)*wscm )/(rvel*speed)
234  ELSE
236  ENDIF
237 
238  RETURN
239  END FUNCTION kt_cos_theta
240 
241 
242 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
243 ! C
244 ! Purpose: Calculate a single particle drag coefficient/ep_s, which C
245 ! is used in evaluting limiting values of certain granular kinetic C
246 ! theory terms C
247 ! C
248 ! Comments: This is currently based on wen-yu but in the the future C
249 ! we may want to make this consistent with drag_gs (that is, replace C
250 ! this function call and assign appropriate variable within drag_gs C
251 ! C
252 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
253  DOUBLE PRECISION FUNCTION kt_dga(IJK, m)
255 ! Modules
256 !---------------------------------------------------------------------//
257  use param1, only: zero, one, small_number, large_number
258  use fldvar, only: rop_g
259  use fldvar, only: d_p
260  use physprop, only: mu_g
261  IMPLICIT NONE
262 
263 ! Dummy arguments
264 !---------------------------------------------------------------------//
265 ! ijk index
266  INTEGER, INTENT(IN) :: IJK
267 ! solids phase index
268  INTEGER, INTENT(IN) :: M
269 
270 ! Local variables
271 !---------------------------------------------------------------------//
272 ! single particle drag coefficient, reynolds number
273  DOUBLE PRECISION :: C_d, Re
274 ! local value for relative velocity
275  DOUBLE PRECISION :: rvel
276 !---------------------------------------------------------------------//
277 
278 ! initialization
279  kt_dga = zero
280  rvel = zero
281  rvel = kt_rvel(ijk, m)
282 
283 ! Defining single particle drag coefficient dgA based on Wen-Yu
284 ! correlation
285  re = d_p(ijk,m)*rvel*rop_g(ijk)/(mu_g(ijk) + small_number)
286  IF(re .LE. 1000.d0)THEN
287  c_d = (24.d0/(re+small_number)) * &
288  (one + 0.15d0 * re**0.687d0)
289  ELSE
290  c_d = 0.44d0
291  ENDIF
292 
293 ! dga_s is local to this routine as is lrvel
294  kt_dga = 0.75d0 * c_d * rvel * rop_g(ijk) / d_p(ijk,m)
295 
296 ! set value for 1st iteration and 1st time step
297  IF(rvel == zero) kt_dga = large_number
298 
299  RETURN
300  END FUNCTION kt_dga
301 
302 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
303 ! C
304 ! Subroutine: CALC_IA_ENERGY_DISSIPATION_SS C
305 ! C
306 ! Purpose: Implement kinetic theory of Iddir & Arastoopour (2005) C
307 ! for calculation of source terms in granular energy equation C
308 ! C
309 ! Author: Janine E. Galvin, Univeristy of Colorado C
310 ! C
311 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
312  SUBROUTINE calc_ia_energy_dissipation_ss(M)
314 ! Modules
315 !---------------------------------------------------------------------//
316  USE constant, only: pi
317  USE constant, only: c_e
318  USE fldvar, only: ro_s, rop_s, d_p
319  USE fldvar, only: theta_m
320  USE physprop, only: mmax
321  USE rdf, only: g_0
322  USE param1, only: zero
323 
324  USE functions, only: fluid_at, funlm
325  USE compar, only: ijkstart3, ijkend3
326  IMPLICIT NONE
327 
328 ! Dummy arguments
329 !---------------------------------------------------------------------//
330 ! Solids phase index
331  INTEGER, INTENT(IN) :: M
332 
333 ! Local variables
334 !---------------------------------------------------------------------//
335 ! Index
336  INTEGER :: IJK
337 ! Solids phase index
338  INTEGER :: L
339 ! Index for storing solids-solids drag coefficients
340 ! in the upper triangle of the matrix
341  INTEGER :: LM
342 ! variables for IA theory
343  DOUBLE PRECISION :: ED_common_term
344  DOUBLE PRECISION :: EDvel_sL, EDvel_sM
345  DOUBLE PRECISION :: M_PM, M_PL, MPSUM, NU_PL, NU_PM, D_PM, &
346  D_PL, DPSUMo2
347  DOUBLE PRECISION :: Ap_lm, Dp_lm, R1p_lm, R10p_lm, R3p_lm, &
348  R4p_lm, R5p_lm, Bp_lm
349 !---------------------------------------------------------------------//
350 
351  DO ijk = ijkstart3, ijkend3
352  IF ( fluid_at(ijk) ) THEN
353 
354  d_pm = d_p(ijk,m)
355  m_pm = (pi/6.d0)*(d_pm**3)*ro_s(ijk,m)
356  nu_pm = rop_s(ijk,m)/m_pm
357 
358  DO l = 1, mmax
359  lm = funlm(l,m)
360  d_pl = d_p(ijk,l)
361  m_pl = (pi/6.d0)*(d_pl**3)*ro_s(ijk,l)
362 
363  mpsum = m_pm + m_pl
364  dpsumo2 = (d_pm+d_pl)/2.d0
365  nu_pl = rop_s(ijk,l)/m_pl
366 
367  ed_common_term = (3.d0/4.d0)*(dpsumo2*dpsumo2)*&
368  (1.d0+c_e)*g_0(ijk,m,l)*nu_pm*nu_pl*(m_pm*&
369  m_pl/mpsum)*((m_pm*m_pl)**1.5)
370 
371  IF (m .eq. l) THEN
372  ap_lm = mpsum/(2.d0)
373  dp_lm = m_pl*m_pm/(2.d0*mpsum)
374  r1p_lm = 1.d0/( (ap_lm**1.5)*(dp_lm**3) )
375  r3p_lm = 1.d0/( (ap_lm**1.5)*(dp_lm**3.5) )
376 
377 ! Dissipation associated with the difference in temperature
378 ! (e.g. interphase transfer term). For the case case (L=M)
379 ! the term ED_s * (TL-TM) cancels. Therefore, explicity set
380 ! the term to zero for this case.
381  ed_ss_ip(ijk,lm) = zero
382 
383 ! Dissipation associated with temperature
384  edt_s_ip(ijk,m,l) = -ed_common_term* (1.d0-c_e)*&
385  (m_pl/mpsum)*(dsqrt(pi)/6.d0)*r1p_lm*&
386  (theta_m(ijk,m)**1.5)
387 
388 ! Dissipation associated with divergence of
389 ! velocity of solid phase L: do not explicity include
390 ! terms that cancel when EDvel_sL is summed with EDvel_sM
391  edvel_sl = ed_common_term*((1.d0-c_e)*(m_pl/mpsum)*&
392  (dpsumo2*pi/48.d0)*(m_pm*m_pl/mpsum)*r3p_lm)
393  edvel_sl_ip(ijk,m,l) = edvel_sl*(theta_m(ijk,l))
394 
395 ! Dissipation associated with divergence of
396 ! velocity of solid phase M: do not explicity include
397 ! terms that cancel when EDvel_sL is summed with EDvel_sM
398 ! commented by sof, no need to re-do computation
399  !EDvel_sM = ED_common_term*((1.d0-C_E)*(M_PL/MPSUM)*&
400  ! (DPSUMo2*PI/48.d0)*(M_PM*M_PL/MPSUM)*R3p_lm)
401  !EDvel_sM_ip(IJK,M,L) = EDvel_sM*(Theta_m(IJK,M)) ! M=L
402 
403  edvel_sm_ip(ijk,m,l) = edvel_sl_ip(ijk,m,l)
404 
405  ELSE
406 
407  ap_lm = (m_pm*theta_m(ijk,l)+m_pl*theta_m(ijk,m))/&
408  2.d0
409  bp_lm = (m_pm*m_pl*(theta_m(ijk,l)-&
410  theta_m(ijk,m) ))/(2.d0*mpsum)
411  dp_lm = (m_pl*m_pm*(m_pm*theta_m(ijk,m)+m_pl*&
412  theta_m(ijk,l) ))/(2.d0*mpsum*mpsum)
413 
414  r1p_lm = (1.d0/((ap_lm**1.5)*(dp_lm**3)))+ &
415  ((9.d0*bp_lm*bp_lm)/(ap_lm**2.5 * dp_lm**4))+&
416  ((30.d0*bp_lm**4)/(2.d0*ap_lm**3.5 * dp_lm**5))
417 
418  r3p_lm = (1.d0/((ap_lm**1.5)*(dp_lm**3.5)))+&
419  ((21.d0*bp_lm*bp_lm)/(2.d0 * ap_lm**2.5 * dp_lm**4.5))+&
420  ((315.d0*bp_lm**4)/(8.d0 * ap_lm**3.5 *dp_lm**5.5))
421 
422  r4p_lm = (3.d0/( ap_lm**2.5 * dp_lm**3.5))+&
423  ((35.d0*bp_lm*bp_lm)/(2.d0 * ap_lm**3.5 * dp_lm**4.5))+&
424  ((441.d0*bp_lm**4)/(8.d0 * ap_lm**4.5 * dp_lm**5.5))
425 
426  r5p_lm = (1.d0/(ap_lm**2.5 * dp_lm**3))+ &
427  ((5.d0*bp_lm*bp_lm)/(ap_lm**3.5 * dp_lm**4))+&
428  ((14.d0*bp_lm**4)/( ap_lm**4.5 * dp_lm**5))
429 
430  r10p_lm = (1.d0/(ap_lm**2.5 * dp_lm**2.5))+&
431  ((25.d0*bp_lm*bp_lm)/(2.d0* ap_lm**3.5 * dp_lm**3.5))+&
432  ((1225.d0*bp_lm**4)/(24.d0* ap_lm**4.5 * dp_lm**4.5))
433 
434 ! Dissipation associated with the difference in temperature
435 ! (e.g. interphase transfer term). to solved using PEA
436  ed_ss_ip(ijk,lm) = ed_common_term*dsqrt(pi)*(m_pm*m_pl/&
437  (2.d0*mpsum))*r5p_lm*( (theta_m(ijk,m)*theta_m(ijk,l))**3 )
438 
439 ! Dissipation associated with temperature
440  edt_s_ip(ijk,m,l) = -ed_common_term* (1.d0-c_e)*(m_pl/mpsum)*&
441  (dsqrt(pi)/6.d0)*r1p_lm*( (theta_m(ijk,m)*theta_m(ijk,l))**3 )
442 
443 ! Dissipation associated with divergence of
444 ! velocity of solid phase L
445  edvel_sl = ed_common_term*( ((3.d0*dpsumo2*pi/40.d0)*m_pl*&
446  r10p_lm)+( (dpsumo2*pi/4.d0)*(m_pm*m_pl/mpsum)*bp_lm*&
447  r4p_lm)-( (1.d0-c_e)*(m_pl/mpsum)*(dpsumo2*pi/16.d0)*&
448  m_pl*bp_lm*r4p_lm)+( (1.d0-c_e)*(m_pl/mpsum)*&
449  (dpsumo2*pi/48.d0)*(m_pm*m_pl/mpsum)*r3p_lm))
450 
451  edvel_sl_ip(ijk,m,l) = edvel_sl*( theta_m(ijk,m)**3.5 *&
452  theta_m(ijk,l)**2.5 )
453 
454 ! Dissipation associated with divergence of
455 ! velocity of solid phase M
456  edvel_sm = ed_common_term*( (-(3.d0*dpsumo2*pi/40.d0)*m_pm*&
457  r10p_lm)+( (dpsumo2*pi/4.d0)*(m_pm*m_pl/mpsum)*bp_lm*&
458  r4p_lm)+( (1.d0-c_e)*(m_pl/mpsum)*(dpsumo2*pi/16.d0)*&
459  m_pm*bp_lm*r4p_lm)+( (1.d0-c_e)*(m_pl/mpsum)*&
460  (dpsumo2*pi/48.d0)*(m_pm*m_pl/mpsum)*r3p_lm))
461 
462  edvel_sm_ip(ijk,m,l) = edvel_sm*( theta_m(ijk,m)**2.5 *&
463  theta_m(ijk,l)**3.5 )
464 
465  ENDIF ! end if/else (m.eq.l)
466 
467  ENDDO ! end do (l=1,mmax)
468 
469  ENDIF ! end if(fluid_at)
470  ENDDO ! end do ijk
471 
472  RETURN
473  END SUBROUTINE calc_ia_energy_dissipation_ss
474 
475 
476 
477 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
478 ! C
479 ! Subroutine: CALC_GD_99_ENERGY_DISSIPATION_SS C
480 ! C
481 ! Purpose: Implement kinetic theory of Garzo & Dufty (1999) C
482 ! for calculation of source terms in granular energy equation C
483 ! C
484 ! Author: Janine E. Galvin C
485 ! C
486 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
489 ! Modules
490 !---------------------------------------------------------------------//
491  USE constant, only: pi
492  USE constant, only: c_e
493  USE fldvar, only: rop_s, d_p
494  USE fldvar, only: theta_m, ep_s
495  USE rdf, only: g_0
496 
497  USE functions, only: fluid_at
498  USE compar, only: ijkstart3, ijkend3
499  IMPLICIT NONE
500 
501 ! Dummy arguments
502 !---------------------------------------------------------------------//
503 ! Solids phase index
504  INTEGER, INTENT(IN) :: M
505 
506 ! Local variables
507 !---------------------------------------------------------------------//
508 ! Indices
509  INTEGER :: IJK
510 ! variables for GD model
511  DOUBLE PRECISION :: press_star, c_star, zeta0_star, &
512  nu_gamma_star, &
513  lambda_num, cd_num, zeta1
514  DOUBLE PRECISION :: D_PM, EP_SM
515  DOUBLE PRECISION :: nu0, Chi
516 !---------------------------------------------------------------------//
517 
518  DO ijk = ijkstart3, ijkend3
519  IF ( fluid_at(ijk) ) THEN
520 
521 ! Note: k_boltz = M_PM
522 
523 ! local aliases
524  chi = g_0(ijk,m,m)
525  ep_sm = ep_s(ijk,m)
526  d_pm = d_p(ijk,m)
527 
528 ! nu0=p_k/eta0
529  nu0 = (96.d0/5.d0)*(ep_sm/d_pm)*dsqrt(theta_m(ijk,m)/pi)
530 
531  press_star = 1.d0 + 2.d0*(1.d0+c_e)*ep_sm*chi
532 
533  c_star = 32.0d0*(1.0d0 - c_e)*(1.d0 - 2.0d0*c_e*c_e) &
534  / (81.d0 - 17.d0*c_e + 30.d0*c_e*c_e*(1.0d0-c_e))
535 
536  zeta0_star = (5.d0/12.d0)*chi*(1.d0 - c_e*c_e) &
537  * (1.d0 + (3.d0/32.d0)*c_star)
538 
539  nu_gamma_star = ((1.d0+c_e)/48.d0)*chi*(128.d0-96.d0*c_e + &
540  15.d0*c_e*c_e-15.d0*c_e*c_e*c_e+ (c_star/64.d0) * (15.d0* &
541  c_e*c_e*c_e-15.d0*c_e*c_e+498.d0*c_e-434.d0))
542 
543  lambda_num = (3.d0/8.d0)*( (1.d0-c_e)*(5.d0*c_e*c_e+4.d0*c_e-1.d0)+ &
544  (c_star/12.d0)*(159.d0*c_e+3.d0*c_e*c_e-19.d0*c_e- &
545  15.d0*c_e*c_e*c_e) ) * (1.d0+c_e)
546 
547 ! does not include factor of 1/nu0. the factor 1/nu0 in cD will cancel
548 ! with the factor of nu0 used to obtain zeta1 from zeta1_star
549  cd_num = ( (4.d0/15.d0)*lambda_num*ep_sm*chi + &
550  (press_star-1.d0)*(2.d0/3.d0-c_e)*c_star ) / &
551  ( 0.5d0*zeta0_star+nu_gamma_star + (5.d0*c_star/64.d0) * &
552  (1.d0+(3.d0*c_star/64.d0))*chi*(1.d0-c_e*c_e))
553 
554 ! does not include factor of 1/nu0 in the first term. the factor 1/nu0
555 ! will cancel with the factor of nu0 used to obtain zeta1 from zeta1_star
556 ! zeta1 = nu0*zeta1_star
557  zeta1 = -(1.d0-c_e)*(press_star-1.d0) + (5.d0/32.d0) * &
558  (1.d0-c_e*c_e)*(1.d0+(3.d0*c_star/64.d0))*chi*cd_num
559 
560 ! in the energy equation this term is multiplied by 3/2*n*kboltz*T
561 ! leave multiplication of theta for source routine
562  edvel_sm_ip(ijk,m,m) = (3.d0/2.d0)*rop_s(ijk,m)*zeta1
563 
564 ! in the energy equation this term is multiplied by 3/2*n*kboltz*T
565 ! leave multiplication of theta for source routine
566  edt_s_ip(ijk,m,m) = (3.d0/2.d0)*rop_s(ijk,m)*nu0*zeta0_star
567 
568  ENDIF ! end if (fluid_at)
569  ENDDO ! end do (ijk=ijkstart3,ijkend3)
570 
571  RETURN
572  END SUBROUTINE calc_gd_99_energy_dissipation_ss
573 
574 
575 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
576 ! C
577 ! Subroutine: CALC_GTSH_ENERGY_DISSIPATION_SS C
578 ! C
579 ! Purpose: Implement kinetic theory of Garzo, Tenneti, Subramaniam C
580 ! Hrenya (2012) for calculation of source terms in granular C
581 ! energy equation C
582 ! C
583 ! Author: Sofiane Benyahia C
584 ! C
585 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
586  SUBROUTINE calc_gtsh_energy_dissipation_ss(M)
588 ! Modules
589 !---------------------------------------------------------------------//
590  USE constant, only: pi
591  USE constant, only: c_e
592  USE fldvar, only: ep_s
593  USE fldvar, only: ro_g, rop_g
594  USE fldvar, only: ro_s, d_p
595  USE fldvar, only: theta_m
596  USE physprop, only: mu_g
597  USE rdf, only: g_0
598  USE param1, only: zero, one, small_number
599 
600  USE functions, only: fluid_at
601  USE compar, only: ijkstart3, ijkend3
602  IMPLICIT NONE
603 
604 ! Dummy arguments
605 !---------------------------------------------------------------------//
606 ! Solids phase index
607  INTEGER, INTENT(IN) :: M
608 
609 ! Local variables
610 !---------------------------------------------------------------------//
611 ! Indices
612  INTEGER :: IJK
613 ! variables
614  DOUBLE PRECISION :: D_PM, EP_SM, V_p, N_p, M_p
615  DOUBLE PRECISION :: nu0, Chi
616  DOUBLE PRECISION :: VREL
617  DOUBLE PRECISION :: Re_m, Re_T
618  DOUBLE PRECISION :: zeta_star, mu2_0, mu4_0, mu4_1
619  DOUBLE PRECISION :: omega, nu_j, rho_10, rho_11
620 
621 !---------------------------------------------------------------------//
622 
623  DO ijk = ijkstart3, ijkend3
624  IF ( fluid_at(ijk) ) THEN
625 
626 ! Local aliases
627  chi = g_0(ijk,m,m)
628  ep_sm = ep_s(ijk,m)
629  d_pm = d_p(ijk,m)
630  v_p = pi*d_pm**3/6d0
631  n_p = ep_sm/v_p
632  m_p = v_p * ro_s(ijk,m)
633 
634  nu0 = (96.d0/5.d0)*(ep_sm/d_pm)*dsqrt(theta_m(ijk,m)/pi)
635 
636 ! First calculate the Re number (Re_m, Re_T) in eq. 3.1 in GTSH theory
637  vrel = kt_rvel(ijk, m)
638 ! Note: rop_g = ro_g * (1-phi)
639  re_m = d_pm*vrel*rop_g(ijk)/mu_g(ijk)
640  re_t = ro_g(ijk)*d_pm*dsqrt(theta_m(ijk,m)) / mu_g(ijk)
641 
642 ! Now calculate and store xsi (used in many spots) in eq. 8.2 in
643 ! GTSH theory.
644  xsi_gtsh(ijk) = one/6d0*d_pm*vrel**2*(3d0*pi*mu_g(ijk)*&
645  d_pm/m_p)**2 / dsqrt(pi*theta_m(ijk,m)) * &
646  s_star(ep_sm, chi)
647 
648 ! eq. (6.22) GTSH theory
649  mu2_0 = dsqrt(2d0*pi) * chi * (one-c_e**2)
650 
651 ! eq. (6.23) GTSH theory
652  mu4_0 = (4.5d0+c_e**2) * mu2_0
653 
654 ! eq. (6.24) GTSH theory
655 ! mu4_1 = (6.46875d0+0.3125d0*C_E**2 + 2d0/(one-C_E)) * mu2_0
656 ! this is done to avoid /0 in case c_e = 1.0
657  mu4_1 = (6.46875d0+0.9375d0*c_e**2)*mu2_0 + &
658  2d0*dsqrt(2d0*pi)* chi*(one+c_e)
659 
660  a2_gtsh(ijk) = zero ! for EP_SM = zero
661  if(ep_sm> small_number) then ! avoid singularity
662 ! Now calculate zeta_star in eq. 8.10 in GTSH theory
663  zeta_star = 4.5d0*dsqrt(2d0*pi)*&
664  (ro_g(ijk)/ro_s(ijk,m))**2*re_m**2 * &
665  s_star(ep_sm,chi) / (ep_sm*(one-ep_sm)**2 * re_t**4)
666 
667 ! Now calculate important parameter A2. This is used in many transport
668 ! coefficients so that it's best to store it in an array instead of
669 ! having many function calls.
670  a2_gtsh(ijk) = (5d0*mu2_0 - mu4_0) / (mu4_1 - 5d0* &
671  (19d0/16d0*mu2_0 - 1.5d0*zeta_star))
672  endif
673 
674 ! Now calculate first term rho_0 in cooling rate rho, eq (6.26) in GTSH
675 ! theory.
676 ! note that theta_(ijk,m) does't contain mass m, so that T/m = theta_m.
677 ! note that edt_s_ip will need to be multiplied by 3/2 rop_s(ijk,m) in
678 ! source_granular_energy to have the same meaning as in GD_99 theory.
679  edt_s_ip(ijk,m,m) = 4d0/3d0*dsqrt(pi)*(one-c_e**2)*chi* &
680  (one+0.1875d0*a2_gtsh(ijk))*n_p*d_pm**2*dsqrt(theta_m(ijk,m))
681 
682 ! Calculate the second term in cooling rate, eq (7.25) in GTSH theory.
683 ! First calculate eq (7.28, 7.29) of GTSH theory.
684  omega = (one+c_e)*nu0*((one-c_e**2)*(5d0*c_e-one) - &
685  a2_gtsh(ijk)/ 6d0 * (15d0*c_e**3-3d0*c_e**2+81d0*c_e-61d0))
686  nu_j = (one+c_e)/192d0*chi*nu0* &
687  (241d0-177d0*c_e+30d0*c_e**2-30d0*c_e**3)
688 
689 ! Now calculate eq (7.26, 7.27) of GTSH theory. ! corrected by W. Fullmer
690  rho_10 = 2d0*chi*ep_sm*(c_e**2-one)
691  rho_11 = 25d0/1024d0*ep_sm*chi**2*(one-c_e**2)* &
692  (one+3d0/128d0*a2_gtsh(ijk)) * (omega/10d0 - &
693  (one+c_e)*nu0*(one/3d0-c_e)*a2_gtsh(ijk)/2d0) / &
694  (nu_j + g_gtsh(ep_sm, chi, ijk, m)/m_p + 1.5d0* &
695  xsi_gtsh(ijk)/theta_m(ijk,m) -1.5d0*edt_s_ip(ijk,m,m))
696 
697 ! note that EDvel_sM_ip will later need to be multiplied by 3/2 rop_s(ijk,m).
698  edvel_sm_ip(ijk,m,m) = rho_10 + rho_11
699 
700  ENDIF ! end if (fluid_at)
701  ENDDO ! end do (ijk=ijkstart3,ijkend3)
702 
703  RETURN
704  END SUBROUTINE calc_gtsh_energy_dissipation_ss
705 
706 
707 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
708 ! C
709 ! Functions: G_tsh, K_phi, R_d, S_star C
710 ! C
711 ! Purpose: Implement kinetic theory of Garzo, Tenneti, Subramaniam C
712 ! Hrenya (2012) for calculation of source terms in granular C
713 ! energy equation C
714 ! C
715 ! Author: Sofiane Benyahia C
716 ! C
717 ! Comments: C
718 ! these functions are needed only for gtsh theory C
719 ! Function gamma, eq. (8.1) in GTSH theory C
720 ! C
721 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
722  DOUBLE PRECISION FUNCTION g_gtsh (EP_SM, Chi, IJK, M)
724 ! Modules
725 !---------------------------------------------------------------------//
726  USE constant, only: pi
727  USE param1, only: one
728  USE physprop, only: mu_g
729  USE fldvar, only: ro_g
730  USE fldvar, only: d_p, theta_m
731  IMPLICIT NONE
732 
733 ! Dummy arguments
734 !---------------------------------------------------------------------//
735 ! solids volume fraction of phase m at ijk
736  DOUBLE PRECISION, INTENT(IN) :: EP_SM
737 ! radial distribution function of phase M at ijk
738  DOUBLE PRECISION, INTENT(IN) :: Chi
739 ! Index
740  INTEGER, INTENT(IN) :: IJK
741 ! Solids phase index. Note M should be equal to 1 since theory
742 ! valid for only mmax = 1.
743  INTEGER, INTENT(IN) :: M
744 
745 ! Local variables
746 !---------------------------------------------------------------------//
747  DOUBLE PRECISION :: Re_T
748  DOUBLE PRECISION :: Rdiss, RdissP
749 
750 !---------------------------------------------------------------------//
751 
752  if(ep_sm <= 0.1d0) then
753  rdissp = one+3d0*dsqrt(ep_sm/2d0)
754  else
755  rdissp = &
756  one + 3d0*dsqrt(ep_sm/2d0) + 135d0/64d0*ep_sm*dlog(ep_sm) + &
757  11.26d0*ep_sm*(one-5.1d0*ep_sm+16.57d0*ep_sm**2-21.77d0* &
758  ep_sm**3) - ep_sm*chi*dlog(epm)
759  endif
760 
761  re_t = ro_g(ijk)*d_p(ijk,m)*dsqrt(theta_m(ijk,m)) / mu_g(ijk)
762 
763  rdiss = rdissp + re_t * k_phi(ep_sm)
764 
765  g_gtsh = 3d0*pi*mu_g(ijk)*d_p(ijk,m)*rdiss ! eq. (8.1) in GTSH theory
766 
767  RETURN
768  END FUNCTION g_gtsh
769 
770 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
771 ! C
772 ! Comments: C
773 ! Function K(phi), eq. (2.7) in Yi/Zenk/Mitrano/Hrenya JFM (2013) C
774 ! C
775 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
776  DOUBLE PRECISION FUNCTION k_phi (phi)
777  IMPLICIT NONE
778 
779 ! Dummy Arguments
780 !---------------------------------------------------------------------//
781 ! solids volume fraction
782  DOUBLE PRECISION, INTENT(IN) :: phi
783 !---------------------------------------------------------------------//
784 
785  k_phi = (0.096d0 + 0.142d0*phi**0.212d0) / (1d0-phi)**4.454d0
786  k_phi = 0.0d0 ! set to zero for compatibility with GTSH JFM (2012)
787  RETURN
788  END FUNCTION k_phi
789 
790 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
791 ! C
792 ! Comments: C
793 ! Function R_d, eq. (8.6) in GTSH theory C
794 ! C
795 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
796  DOUBLE PRECISION FUNCTION r_d (phi)
797  IMPLICIT NONE
798 
799 ! Dummy arguments
800 !---------------------------------------------------------------------//
801 ! solids volume fraction
802  DOUBLE PRECISION, INTENT(IN) :: phi
803 !---------------------------------------------------------------------//
804 
805  r_d = 1.0d0 ! this avoids singularity at phi = 0.0
806  if((phi > 1d-15) .and. (phi <= 0.4d0)) then
807  r_d = (1d0+3d0*dsqrt(phi/2d0)+135d0/64d0*phi*dlog(phi)+17.14d0*phi) / &
808  (1d0+0.681d0*phi-8.48*phi**2+8.16d0*phi**3)
809  elseif(phi > 0.4d0) then
810  r_d = 10d0*phi/(1d0-phi)**3 + 0.7d0
811  endif
812  RETURN
813  END FUNCTION r_d
814 
815 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
816 ! C
817 ! Comments: C
818 ! Function S_Star(phi), eq. (8.3, 8.5) in GTSH theory C
819 ! C
820 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
821  DOUBLE PRECISION FUNCTION s_star (phi, Chi)
822  IMPLICIT NONE
823 
824 ! Dummy arguments
825 !---------------------------------------------------------------------//
826 ! solids volume fraction
827  DOUBLE PRECISION, INTENT(IN) :: phi
828 ! radial distribution function
829  DOUBLE PRECISION, INTENT(IN) :: Chi
830 
831 !---------------------------------------------------------------------//
832 
833  s_star = 1.0d0
834  if(phi >= 0.1d0) &
835  s_star = r_d(phi)**2/(chi*(1d0+3.5d0*dsqrt(phi)+5.9*phi))
836  RETURN
837  END FUNCTION s_star
838 
839  END MODULE kintheory
double precision c_e
Definition: constant_mod.f:105
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
double precision, dimension(:,:,:), allocatable kvel_s_ip
Definition: kintheory_mod.f:56
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
logical shear
Definition: run_mod.f:175
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 ft_sm_ip
Definition: kintheory_mod.f:41
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision, dimension(:,:,:), allocatable knu_sm_ip
Definition: kintheory_mod.f:52
subroutine calc_gtsh_energy_dissipation_ss(M)
double precision, dimension(:,:,:), allocatable xi_sm_ip
Definition: kintheory_mod.f:29
double precision function g_0(IJK, M1, M2)
Definition: rdf_mod.f:240
double precision function s_star(phi, Chi)
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
double precision, dimension(:), allocatable vsh
Definition: vshear_mod.f:3
double precision, dimension(:), allocatable xsi_gtsh
Definition: kintheory_mod.f:71
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
subroutine calc_gd_99_energy_dissipation_ss(M)
integer mmax
Definition: physprop_mod.f:19
double precision function r_d(phi)
double precision, parameter small_number
Definition: param1_mod.f:24
double precision, dimension(:,:,:), allocatable xi_sl_ip
Definition: kintheory_mod.f:31
double precision, dimension(:,:), allocatable ktmom_v_s
Definition: kintheory_mod.f:76
double precision, parameter zero_ep_s
Definition: toleranc_mod.f:15
double precision function g_gtsh(EP_SM, Chi, IJK, M)
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
double precision, dimension(:,:), allocatable ktmom_w_s
Definition: kintheory_mod.f:77
double precision, dimension(:), allocatable v_g
Definition: fldvar_mod.f:99
double precision function kt_cos_theta(ijk, M)
double precision, dimension(:), allocatable a2_gtsh
Definition: kintheory_mod.f:70
double precision, dimension(:), allocatable w_g
Definition: fldvar_mod.f:111
Definition: run_mod.f:13
double precision function kt_rvel(IJK, m)
Definition: kintheory_mod.f:94
double precision, parameter large_number
Definition: param1_mod.f:23
double precision, dimension(:,:,:), allocatable knu_sl_ip
Definition: kintheory_mod.f:54
double precision function kt_dga(IJK, m)
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
double precision function k_phi(phi)
double precision, dimension(:), allocatable mu_g
Definition: physprop_mod.f:68
integer ijkstart3
Definition: compar_mod.f:80
double precision, parameter epm
Definition: kintheory_mod.f:81
double precision, dimension(:,:,:), allocatable mu_sm_ip
Definition: kintheory_mod.f:25
double precision, dimension(:), allocatable u_g
Definition: fldvar_mod.f:87
double precision function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
double precision, dimension(:,:), allocatable ed_ss_ip
Definition: kintheory_mod.f:62
double precision, dimension(:,:,:), allocatable kth_sl_ip
Definition: kintheory_mod.f:50
Definition: rdf_mod.f:11
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
double precision, dimension(:,:,:), allocatable edt_s_ip
Definition: kintheory_mod.f:64
subroutine calc_ia_energy_dissipation_ss(M)
double precision, parameter pi
Definition: constant_mod.f:158
double precision, dimension(:,:,:), allocatable edvel_sl_ip
Definition: kintheory_mod.f:68
double precision, dimension(:), allocatable ro_g
Definition: fldvar_mod.f:32
double precision, dimension(:), allocatable rop_g
Definition: fldvar_mod.f:38
double precision, dimension(:,:), allocatable ktmom_u_s
Definition: kintheory_mod.f:75
double precision, parameter zero
Definition: param1_mod.f:27
double precision, dimension(:,:,:), allocatable edvel_sm_ip
Definition: kintheory_mod.f:66