26 use functions, only: fluid_at, wall_at, zmax
42 use run, only: kt_type_enum, lun_1984, ahmadi_1995, simonin_1996
43 use run, only: kt_type, gd_1999, gtsh_2012, ghd_2007, ia_2005
64 DOUBLE PRECISION :: apo
67 DOUBLE PRECISION :: sourcelhs, sourcerhs
73 DOUBLE PRECISION :: M_PM,D_PM
81 DOUBLE PRECISION :: smallTheta
90 INTEGER :: Err_l(0:
numpes-1)
91 INTEGER :: Err_g(0:
numpes-1)
120 SELECT CASE (kt_type_enum)
121 CASE(lun_1984, ahmadi_1995, simonin_1996, gd_1999, gtsh_2012)
127 IF(.NOT.added_mass .OR. m /= m_am)
THEN 128 cpxflux_e(ijk) = 1.5d0 * flux_se(ijk,m)
129 cpxflux_n(ijk) = 1.5d0 * flux_sn(ijk,m)
130 cpxflux_t(ijk) = 1.5d0 * flux_st(ijk,m)
132 cpxflux_e(ijk) = 1.5d0 * flux_sse(ijk)
133 cpxflux_n(ijk) = 1.5d0 * flux_ssn(ijk)
134 cpxflux_t(ijk) = 1.5d0 * flux_sst(ijk)
137 IF (fluid_at(ijk))
THEN 139 IF (kt_type_enum == gd_1999 .OR. &
140 kt_type_enum == gtsh_2012)
THEN 147 apo = 1.5d0*rop_so(ijk,m)*
vol(ijk)*odt
148 s_p(ijk) = apo + sourcelhs + 1.5d0* &
150 s_c(ijk) = apo*theta_mo(ijk,m) + sourcerhs + 1.5d0* &
151 theta_m(ijk,m)*zmax((-
sum_r_s(ijk,m))) *
vol(ijk)
152 eps(ijk) = ep_s(ijk,m)
154 IF(
use_mms) s_c(ijk) = s_c(ijk) + &
160 IF(
use_mms) eps(ijk) = ep_s(ijk,m)
165 CALL conv_dif_phi (theta_m(1,m), kth_s(1,m), discretize(8),
180 IF (call_usr_source(8))
CALL calc_usr_source(gran_energy,&
188 IF (fluid_at(ijk) .AND. &
198 b_m(ijk,m) = -smalltheta
226 IF(ier == -2) err_l(
mype) = 140
231 IF (ier /= 0) err_l(
mype) = 141
243 IF(wall_at(ijk)) cycle
246 m_pm = (
pi/6.d0)*(d_pm**3)*
ro_s(ijk,m)
250 IF(.NOT.added_mass .OR. m /= m_am)
THEN 251 cpxflux_e(ijk) = (1.5d0/m_pm) * flux_se(ijk,m)
252 cpxflux_n(ijk) = (1.5d0/m_pm) * flux_sn(ijk,m)
253 cpxflux_t(ijk) = (1.5d0/m_pm) * flux_st(ijk,m)
255 cpxflux_e(ijk) = (1.5d0/m_pm) * flux_sse(ijk)
256 cpxflux_n(ijk) = (1.5d0/m_pm) * flux_ssn(ijk)
257 cpxflux_t(ijk) = (1.5d0/m_pm) * flux_sst(ijk)
260 IF (fluid_at(ijk))
THEN 264 apo = (1.5d0/m_pm)*rop_so(ijk,m)*
vol(ijk)*odt
265 s_p(ijk) = apo + sourcelhs + (1.5d0/m_pm)*&
267 s_c(ijk) = apo*theta_mo(ijk,m) + sourcerhs + &
268 (1.50d0/m_pm)*theta_m(ijk,m)*&
270 eps(ijk) = ep_s(ijk,m)
279 CALL conv_dif_phi (theta_m(1,m), kth_s(1,m), discretize(8),&
280 u_s(1,m), v_s(1,m), w_s(1,m), &
281 cpxflux_e, cpxflux_n, cpxflux_t, m,
a_m,
b_m)
294 IF (call_usr_source(8))
CALL calc_usr_source(gran_energy,&
311 IF (fluid_at(ijk) .AND. &
315 m_pm = (
pi/6.d0)*(d_pm**3)*
ro_s(ijk,m)
327 b_m(ijk,m) = -smalltheta*m_pm
348 IF(ier == -2) err_l(
mype) = 140
353 IF (ier /= 0) err_l(
mype) = 141
375 cpxflux_e(ijk) = 1.5d0 *
flux_ne(ijk)
376 cpxflux_n(ijk) = 1.5d0 *
flux_nn(ijk)
377 cpxflux_t(ijk) = 1.5d0 *
flux_nt(ijk)
379 IF (fluid_at(ijk))
THEN 381 m_pm = (
pi/6.d0)*(
d_p(ijk,l)**3)*
ro_s(ijk,l)
382 tot_sum_rs(ijk) = tot_sum_rs(ijk) +
sum_r_s(ijk,l)/m_pm
383 tot_no(ijk) = tot_no(ijk) + rop_so(ijk,l)/m_pm
384 tot_eps(ijk) = tot_eps(ijk) + ep_s(ijk,l)
390 apo = 1.5d0 * tot_no(ijk)*
vol(ijk)*odt
391 s_p(ijk) = apo + sourcelhs + 1.5d0 *&
392 zmax(tot_sum_rs(ijk)) *
vol(ijk)
393 s_c(ijk) = apo*theta_mo(ijk,m) + sourcerhs + 1.50d0 *&
394 theta_m(ijk,m)*zmax(-tot_sum_rs(ijk)) *
vol(ijk)
395 eps(ijk) = tot_eps(ijk)
404 CALL conv_dif_phi (theta_m(1,m), kth_s(1,m), discretize(8),&
405 u_s(1,m), v_s(1,m), w_s(1,m), &
406 cpxflux_e, cpxflux_n, cpxflux_t, m,
a_m,
b_m)
419 IF (call_usr_source(8))
CALL calc_usr_source(gran_energy,&
436 IF(ier == -2) err_l(
mype) = 140
442 IF (ier /= 0) err_l(
mype) = 141
449 WRITE (*,
'(A)')
'ADJUST_THETA' 450 WRITE (*,
'(A,A)')
'Unknown KT_TYPE: ', kt_type
double precision, dimension(:,:,:), allocatable a_m
double precision, dimension(:), allocatable flux_ne
double precision, dimension(:,:), allocatable v_s
double precision, dimension(dim_eqs) ur_fac
double precision, dimension(:), allocatable ep_g
double precision, dimension(:), allocatable mms_theta_m_src
double precision, dimension(:,:), allocatable flux_st
subroutine source_granular_energy_ia(SOURCELHS, SOURCERHS, IJK, M)
subroutine calc_usr_source(lEQ_NO, A_M, B_M, lB_MMAX, lM, lN)
double precision, parameter one
subroutine init_ab_m(A_M, B_M, IJKMAX2A, M)
double precision, dimension(:,:), allocatable w_s
double precision, dimension(:,:), allocatable den_resid
subroutine solve_granular_energy(IER)
double precision, dimension(:), allocatable flux_ssn
subroutine under_relax_s(VAR, A_M, B_M, M, UR)
double precision, dimension(:,:), allocatable sum_r_s
subroutine calc_resid_s(VAR, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID, TOL)
double precision, dimension(:,:), allocatable num_resid
character(len=4), dimension(dim_eqs) leq_sweep
double precision, dimension(:,:), allocatable kth_s
subroutine source_granular_energy(SOURCELHS, SOURCERHS, IJK, M)
double precision, dimension(:,:), allocatable u_s
double precision, dimension(:,:), allocatable max_resid
double precision, dimension(dimension_bc, dim_m) bc_thetaw_m
double precision, dimension(:,:), allocatable theta_mo
double precision, dimension(dimension_bc, dim_m) bc_c_theta_m
integer, parameter resid_th
subroutine partial_elim_ia(VAR_S, VXTCSS, A_M, B_M)
double precision, dimension(:,:), allocatable d_p
subroutine mfix_exit(myID, normal_termination)
integer, dimension(dim_eqs) leq_it
subroutine source_ghd_granular_energy(SOURCELHS, SOURCERHS, IJK)
double precision, parameter zero_ep_s
subroutine bc_phi(VAR, BC_PHIF, BC_PHIW, BC_HW_PHI, BC_C_PHI, M, A_M, B_M)
double precision, dimension(:,:), allocatable theta_m
double precision, dimension(:), allocatable ep_g_blend_start
subroutine adjust_leq(RESID, LEQ_ITL, LEQ_METHODL, LEQI, LEQM)
double precision, dimension(dim_eqs) leq_tol
double precision, dimension(:,:), allocatable rop_so
double precision, dimension(:,:), allocatable ro_s
integer, dimension(:,:), allocatable ijk_resid
subroutine adjust_theta(M, IER)
double precision, dimension(:), allocatable flux_nt
subroutine conv_dif_phi(PHI, DIF, DISC, UF, VF, WF, Flux_E, Flux_N, Flux_T, M, A_M, B_M)
subroutine source_granular_energy_gd(SOURCELHS, SOURCERHS, IJK, M)
double precision function ep_s(IJK, xxM)
double precision, dimension(dimension_bc, dim_m) bc_hw_theta_m
double precision, dimension(dimension_bc, dim_m) bc_theta_m
integer, dimension(dim_eqs) discretize
integer, dimension(dim_eqs) leq_method
double precision, dimension(:,:), allocatable flux_se
subroutine source_phi(S_P, S_C, EP, PHI, M, A_M, B_M)
logical, dimension(dim_eqs) call_usr_source
double precision, dimension(:,:), allocatable resid
double precision, dimension(:,:), allocatable b_m
double precision, parameter pi
double precision, dimension(:), allocatable flux_nn
double precision, dimension(:), allocatable vol
double precision, dimension(:,:), allocatable flux_sn
double precision, parameter zero
double precision, dimension(:), allocatable flux_sst
subroutine bc_theta(M, A_m, B_m)
subroutine calc_vtc_ss(VXTC_SS)
double precision, dimension(:), allocatable flux_sse
subroutine solve_lin_eq(VNAME, Vno, VAR, A_M, B_M, M, ITMAX, METHOD, SWEEP, TOL1, PC, IER)
character(len=4), dimension(dim_eqs) leq_pc