23 use discretelement
, only: des_continuum_hybrid, discrete_element, des_continuum_coupled
34 use run, only: kt_type_enum, ghd_2007
42 use usr_src, only: gas_u_mom, gas_v_mom, gas_w_mom
43 use usr_src, only: solids_u_mom, solids_v_mom, solids_w_mom
49 INTEGER,
INTENT(INOUT) :: IER
56 DOUBLE PRECISION,
DIMENSION(:),
allocatable :: U_gtmp, V_gtmp, W_gtmp
57 DOUBLE PRECISION,
DIMENSION(:,:),
allocatable :: U_stmp, V_stmp, W_stmp
86 CALL init(u_gtmp, v_gtmp, w_gtmp, u_stmp, v_stmp, w_stmp)
88 do_solids = .NOT.(discrete_element .OR.
qmomk) .OR. &
99 CALL save(u_gtmp, v_gtmp, w_gtmp, u_stmp, v_stmp, w_stmp)
102 IF(kt_type_enum == ghd_2007)
THEN 126 SUBROUTINE init(U_g_tmp, V_g_tmp, W_g_tmp, U_s_tmp, V_s_tmp, W_s_tmp)
129 DOUBLE PRECISION,
DIMENSION(:),
intent(out) :: U_g_tmp, V_g_tmp
130 DOUBLE PRECISION,
DIMENSION(:,:),
intent(out) :: U_s_tmp, V_s_tmp
139 u_g_tmp(ijk) =
u_g(ijk)
140 v_g_tmp(ijk) =
v_g(ijk)
141 w_g_tmp(ijk) =
w_g(ijk)
144 IF(kt_type_enum /= ghd_2007 .OR. &
145 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 147 u_s_tmp(ijk, m) =
u_s(ijk, m)
148 v_s_tmp(ijk, m) =
v_s(ijk, m)
149 w_s_tmp(ijk, m) =
w_s(ijk, m)
159 SUBROUTINE save(U_g_tmp, V_g_tmp, W_g_tmp, U_s_tmp, V_s_tmp, W_s_tmp)
162 DOUBLE PRECISION,
DIMENSION(:),
intent(in) :: U_g_tmp, V_g_tmp,
163 DOUBLE PRECISION,
DIMENSION(:,:),
intent(in) :: U_s_tmp, V_s_tmp
171 u_g(ijk) = u_g_tmp(ijk)
172 v_g(ijk) = v_g_tmp(ijk)
173 w_g(ijk) = w_g_tmp(ijk)
176 IF(kt_type_enum /= ghd_2007 .OR. &
177 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 179 u_s(ijk, m) = u_s_tmp(ijk, m)
180 v_s(ijk, m) = v_s_tmp(ijk, m)
181 w_s(ijk, m) = w_s_tmp(ijk, m)
191 SUBROUTINE u_m_star(U_g_tmp, U_s_tmp)
194 DOUBLE PRECISION,
DIMENSION(:),
INTENT(OUT) :: U_g_tmp
195 DOUBLE PRECISION,
DIMENSION(:, :),
INTENT(OUT) :: U_s_tmp
199 DOUBLE PRECISION,
DIMENSION(:, :),
ALLOCATABLE :: VXF_GS, VXF_SS
200 DOUBLE PRECISION,
DIMENSION(:, :, :),
ALLOCATABLE :: A_M
212 IF (m >= 1) vxf_gs(:,m) =
zero 224 IF(call_usr_source(3))
CALL calc_usr_source(gas_u_mom, a_m, b_m)
228 IF(call_usr_source(3))
CALL calc_usr_source(solids_u_mom, a_m, b_m
236 IF(do_solids .AND. (kt_type_enum /= ghd_2007))
THEN 241 IF(kt_type_enum == ghd_2007)
THEN 253 IF(kt_type_enum == ghd_2007)
THEN 266 IF(des_continuum_coupled)
THEN 268 IF (des_continuum_hybrid) &
291 IF(kt_type_enum /= ghd_2007 .OR. &
292 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 315 CALL solve_lin_eq (
'U_g', 3, u_g_tmp, a_m, b_m, 0, leqi, leqm,
322 IF(kt_type_enum /= ghd_2007 .OR. &
323 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 350 SUBROUTINE v_m_star(V_g_tmp, V_s_tmp)
353 DOUBLE PRECISION,
DIMENSION(:),
INTENT(OUT) :: V_g_tmp
354 DOUBLE PRECISION,
DIMENSION(:, :),
INTENT(OUT) :: V_s_tmp
358 DOUBLE PRECISION,
DIMENSION(:, :),
ALLOCATABLE :: VXF_GS, VXF_SS
359 DOUBLE PRECISION,
DIMENSION(:, :, :),
ALLOCATABLE :: A_M
371 IF (m >= 1) vxf_gs(:,m) =
zero 382 IF(call_usr_source(4))
CALL calc_usr_source(gas_v_mom, a_m, b_m)
387 IF(call_usr_source(4))
CALL calc_usr_source(solids_v_mom, a_m, b_m
392 IF(do_solids .AND. (kt_type_enum /= ghd_2007))
THEN 397 IF(kt_type_enum == ghd_2007)
THEN 409 IF(kt_type_enum == ghd_2007)
THEN 423 IF(des_continuum_coupled)
THEN 425 IF (des_continuum_hybrid) &
449 IF(kt_type_enum /= ghd_2007 .OR. &
450 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 472 CALL solve_lin_eq (
'V_g', 4, v_g_tmp, a_m, b_m, 0, leqi, leqm,
479 IF(kt_type_enum /= ghd_2007 .OR. &
480 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 507 SUBROUTINE w_m_star(W_g_tmp, W_s_tmp)
510 DOUBLE PRECISION,
DIMENSION(:),
INTENT(OUT) :: W_g_tmp
511 DOUBLE PRECISION,
DIMENSION(:, :),
INTENT(OUT) :: W_s_tmp
515 DOUBLE PRECISION,
DIMENSION(:, :),
ALLOCATABLE :: VXF_GS, VXF_SS
516 DOUBLE PRECISION,
DIMENSION(:, :, :),
ALLOCATABLE :: A_M
529 IF (m >= 1) vxf_gs(:,m) =
zero 539 IF(call_usr_source(5))
CALL calc_usr_source(gas_w_mom, a_m, b_m
544 IF(call_usr_source(5))
CALL calc_usr_source(solids_w_mom, a_m
550 IF(do_solids .AND. (kt_type_enum /= ghd_2007))
THEN 555 IF(kt_type_enum == ghd_2007)
THEN 567 IF(kt_type_enum == ghd_2007)
THEN 581 IF(des_continuum_coupled)
THEN 583 IF (discrete_element .AND. des_continuum_hybrid) &
605 IF(kt_type_enum /= ghd_2007 .OR. &
606 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN 629 CALL solve_lin_eq (
'W_g', 5, w_g_tmp, a_m, b_m, 0, leqi,&
636 IF(kt_type_enum /= ghd_2007 .OR. &
637 (kt_type_enum == ghd_2007 .AND. m==
mmax))
THEN subroutine calc_resid_u(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
subroutine vf_gs_y(VXF_GS)
subroutine partial_elim_u(VAR_G, VAR_S, VXF, A_M, B_M)
logical, dimension(0:dim_m) momentum_y_eq
subroutine calc_d_ghd_e(A_M, VXF_GS, D_E)
double precision, dimension(:,:), allocatable v_s
double precision, dimension(dim_eqs) ur_fac
subroutine partial_elim_ghd_w(VAR_G, VAR_S, VXF, A_M, B_M)
double precision, dimension(:), allocatable e_n
subroutine conv_dif_w_g(A_M, B_M)
subroutine solve_vel_star(IER)
subroutine solid_drag_w(A_M, B_M)
double precision, dimension(:,:), allocatable d_n
subroutine calc_usr_source(lEQ_NO, A_M, B_M, lB_MMAX, lM, lN)
subroutine point_source_v_s(A_M, B_M)
subroutine init_ab_m(A_M, B_M, IJKMAX2A, M)
subroutine adjust_a_w_g(A_M, B_M)
double precision, dimension(:,:), allocatable w_s
subroutine partial_elim_ghd_v(VAR_G, VAR_S, VXF, A_M, B_M)
logical, dimension(0:dim_m) momentum_x_eq
double precision, dimension(:,:), allocatable den_resid
subroutine conv_dif_v_s(A_M, B_M, IER)
subroutine conv_dif_v_g(A_M, B_M, IER)
subroutine adjust_a_u_s(A_M, B_M)
subroutine calc_d_n(A_M, VXF_GS, VXF_SS, D_N, IER)
subroutine point_source_w_g(A_M, B_M)
double precision, dimension(:,:), allocatable d_e
logical, dimension(0:dim_m) momentum_z_eq
subroutine partial_elim_ghd_u(VAR_G, VAR_S, VXF, A_M, B_M)
subroutine source_v_g(A_M, B_M)
subroutine point_source_v_g(A_M, B_M)
subroutine updatespeciesvelocities()
double precision, dimension(:), allocatable e_t
subroutine solid_drag_u(A_M, B_M)
double precision, dimension(:,:), allocatable num_resid
subroutine gas_drag_u(A_M, B_M, IER)
subroutine qmomk_gas_drag(A_M, B_M, IER, UV, VV, WV)
character(len=4), dimension(dim_eqs) leq_sweep
double precision, dimension(:,:), allocatable d_t
subroutine calc_d_t(A_M, VXF_GS, VXF_SS, D_T, IER)
subroutine under_relax_w(VAR, A_M, B_M, M, UR)
subroutine source_v_s(A_M, B_M)
subroutine vf_gs_x(VXF_GS)
double precision, dimension(:,:), allocatable u_s
subroutine adjust_a_v_g(A_M, B_M)
subroutine conv_dif_w_s(A_M, B_M)
subroutine point_source_u_g(A_M, B_M)
subroutine partial_elim_w(VAR_G, VAR_S, VXF, A_M, B_M)
subroutine source_w_g(A_M, B_M)
subroutine u_m_star(U_g_tmp, U_s_tmp)
subroutine calc_e_n(A_M, MCP, E_N)
subroutine save(U_g_tmp, V_g_tmp, W_g_tmp, U_s_tmp, V_s_tmp, W_s_t
integer, parameter resid_w
subroutine calc_d_ghd_n(A_M, VXF_GS, D_N)
double precision, dimension(:,:), allocatable max_resid
subroutine calc_e_t(A_M, MCP, E_T)
integer, dimension(dim_eqs) leq_it
subroutine v_m_star(V_g_tmp, V_s_tmp)
subroutine vf_ss_z(VXF_SS)
subroutine source_u_g(A_M, B_M)
integer, parameter resid_v
double precision, dimension(:), allocatable v_g
subroutine solid_drag_v(A_M, B_M)
subroutine adjust_leq(RESID, LEQ_ITL, LEQ_METHODL, LEQI, LEQM)
double precision, dimension(:), allocatable w_g
subroutine gas_drag_w(A_M, B_M, IER)
double precision, dimension(dim_eqs) leq_tol
subroutine adjust_a_v_s(A_M, B_M)
subroutine source_u_s(A_M, B_M)
integer, dimension(:,:), allocatable ijk_resid
subroutine under_relax_v(VAR, A_M, B_M, M, UR)
subroutine conv_dif_u_g(A_M, B_M)
subroutine calc_d_e(A_M, VXF_GS, VXF_SS, D_E, IER)
integer, parameter resid_u
subroutine calc_resid_w(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
subroutine calc_d_ghd_t(A_M, VXF_GS, D_T)
subroutine vf_gs_z(VXF_GS)
subroutine calc_resid_v(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
double precision, dimension(:), allocatable u_g
subroutine w_m_star(W_g_tmp, W_s_tmp)
subroutine conv_dif_u_s(A_M, B_M)
subroutine vf_ss_y(VXF_SS)
subroutine adjust_a_u_g(A_M, B_M)
subroutine point_source_u_s(A_M, B_M)
integer, dimension(dim_eqs) leq_method
subroutine calc_e_e(A_M, MCP, E_E)
subroutine under_relax_u(VAR, A_M, B_M, M, UR)
logical, dimension(dim_eqs) call_usr_source
double precision, dimension(:,:), allocatable resid
double precision, dimension(:), allocatable e_e
subroutine calc_external_forces()
subroutine vf_ss_x(VXF_SS)
subroutine partial_elim_v(VAR_G, VAR_S, VXF, A_M, B_M)
subroutine source_w_s(A_M, B_M)
subroutine gas_drag_v(A_M, B_M, IER)
double precision, parameter zero
subroutine point_source_w_s(A_M, B_M)
subroutine adjust_a_w_s(A_M, B_M)
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
subroutine init(U_g_tmp, V_g_tmp, W_g_tmp, U_s_tmp, V_s_tmp, W_s_t