48 INTEGER :: I,J,K,M,M2,IN
49 INTEGER :: IJK, IPJK, IJPK, IJKP, IMJK, IJMK, IJKM
50 DOUBLE PRECISION :: Vmax, min_space_delta
51 DOUBLE PRECISION :: vrel, Rep, CD, beta_drag, min_tau_drag
52 DOUBLE PRECISION :: UGC, VGC, WGC, mom0, QMOMK_TCOL, drag_exp, QMOMK_OMEGA
53 DOUBLE PRECISION QMOMK_TIME, QMOMK_DT_TMP, TMP_DTS
54 INTEGER :: TIME_FACTOR, TIME_I
55 LOGICAL,
SAVE :: FIRST_PASS = .true.
57 DOUBLE PRECISION,
DIMENSION(QMOMK_NN) :: Nlminus, Nlplus, Nrminus, Nrplus
58 DOUBLE PRECISION,
DIMENSION(QMOMK_NN) :: Ulminus, Ulplus, Urminus, Urplus
59 DOUBLE PRECISION,
DIMENSION(QMOMK_NN) :: Vlminus, Vlplus, Vrminus, Vrplus
60 DOUBLE PRECISION,
DIMENSION(QMOMK_NN) :: Wlminus, Wlplus, Wrminus, Wrplus
61 DOUBLE PRECISION,
DIMENSION(QMOMK_NMOM) :: F_x_left, F_x_right, F_y_left
62 DOUBLE PRECISION,
DIMENSION(QMOMK_NMOM) :: F_y_right, F_z_left, F_z_right
99 min_space_delta = min(minval(
dx), minval(
dy), minval(
dz))
107 IF (fluid_at(ijk))
THEN 136 DO time_i = 1, time_factor
139 IF (qmomk_time .GE. (
time +
dt))
EXIT 146 print *,
'Flow time step: ',
dt 148 print *,
'QMOMK internal time step: ',time_i
149 print *,
'Time factor', time_factor
151 qmomk_omega = (1.d0 +
c_e)/2.d0
159 IF (fluid_at(ijk))
THEN 196 nlplus, ulplus, vlplus, wlplus, f_x_left)
198 nrplus, urplus, vrplus, wrplus, f_x_right)
222 nlplus, ulplus, vlplus, wlplus, f_y_left)
224 nrplus, urplus, vrplus, wrplus, f_y_right)
227 - 0.5*(
qmomk_dt/minval(
dx))*(f_x_right - f_x_left) - 0.5*(
qmomk_dt/minval(
dy))*(f_y_right - f_y_left)
253 nlplus, ulplus, vlplus, wlplus, f_x_left)
255 nrplus, urplus, vrplus, wrplus, f_x_right)
279 nlplus, ulplus, vlplus, wlplus, f_y_left)
281 nrplus, urplus, vrplus, wrplus, f_y_right)
305 nlplus, ulplus, vlplus, wlplus, f_z_left)
307 nrplus, urplus, vrplus, wrplus, f_z_right)
310 0.5*(
qmomk_dt/minval(
dy))*(f_y_right - f_y_left) - 0.5*(
qmomk_dt/minval(
dz))*(f_z_right - f_z_left)
320 IF (fluid_at(ijk))
THEN 324 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
333 IF (fluid_at(ijk))
THEN 341 ugc = avg_x_e(
u_g(imjk),
u_g(ijk),i)
342 vgc = avg_y_n(
v_g(ijmk),
v_g(ijk))
343 wgc = avg_z_t(
w_g(ijkm),
w_g(ijk))
353 drag_exp = exp(-0.5*
qmomk_dt*beta_drag)
367 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
371 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
378 IF (fluid_at(ijk))
THEN 383 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
390 print *,
'Before collisions' 396 IF (fluid_at(ijk))
THEN 398 IF (mom0 >
epsn)
THEN 403 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
410 IF (fluid_at(ijk))
THEN 414 CALL eight_node_3d (
qmomk_m1(:,ijk,1),
qmomk_n1(:,ijk,1),
qmomk_u1(:,ijk,1),
qmomk_v1(:,ijk,1),
qmomk_w1(:,ijk,1))
416 qmomk_u1(:,ijk,1),
qmomk_v1(:,ijk,1),
qmomk_w1(:,ijk,1),
qmomk_m1(:,ijk,1))
422 IF (fluid_at(ijk))
THEN 426 qmomk_m1(:,ijk,m2),
qmomk_n1(:,ijk,m2),
qmomk_u1(:,ijk,m2),
qmomk_v1(:,ijk,m2),
qmomk_w1(:,ijk,m2), &
430 CALL eight_node_3d (
qmomk_m1(:,ijk,m),
qmomk_n1(:,ijk,m),
qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m))
432 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
438 print *,
'After collisions' 455 IF (fluid_at(ijk))
THEN 493 nlplus, ulplus, vlplus, wlplus, f_x_left)
495 nrplus, urplus, vrplus, wrplus, f_x_right)
519 nlplus, ulplus, vlplus, wlplus, f_y_left)
521 nrplus, urplus, vrplus, wrplus, f_y_right)
524 - (
qmomk_dt/minval(
dy))*(f_y_right - f_y_left)
550 nlplus, ulplus, vlplus, wlplus, f_x_left)
552 nrplus, urplus, vrplus, wrplus, f_x_right)
576 nlplus, ulplus, vlplus, wlplus, f_y_left)
578 nrplus, urplus, vrplus, wrplus, f_y_right)
602 nlplus, ulplus, vlplus, wlplus, f_z_left)
604 nrplus, urplus, vrplus, wrplus, f_z_right)
616 IF (fluid_at(ijk))
THEN 617 CALL eight_node_3d (
qmomk_m1(:,ijk,m),
qmomk_n1(:,ijk,m),
qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m))
619 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
629 IF (fluid_at(ijk))
THEN 631 IF (mom0 >
epsn)
THEN 636 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
643 IF (fluid_at(ijk))
THEN 647 CALL eight_node_3d (
qmomk_m1(:,ijk,1),
qmomk_n1(:,ijk,1),
qmomk_u1(:,ijk,1),
qmomk_v1(:,ijk,1),
qmomk_w1(:,ijk,1))
649 qmomk_u1(:,ijk,1),
qmomk_v1(:,ijk,1),
qmomk_w1(:,ijk,1),
qmomk_m1(:,ijk,1))
655 IF (fluid_at(ijk))
THEN 665 CALL eight_node_3d (
qmomk_m1(:,ijk,m),
qmomk_n1(:,ijk,m),
qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m))
667 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
677 IF (fluid_at(ijk))
THEN 684 ugc = avg_x_e(
u_g(imjk),
u_g(ijk),i)
685 vgc = avg_y_n(
v_g(ijmk),
v_g(ijk))
686 wgc = avg_z_t(
w_g(ijkm),
w_g(ijk))
710 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
711 CALL eight_node_3d (
qmomk_m1(:,ijk,m),
qmomk_n1(:,ijk,m),
qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m))
713 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
721 IF (fluid_at(ijk))
THEN 723 CALL eight_node_3d (
qmomk_m1(:,ijk,m),
qmomk_n1(:,ijk,m),
qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m))
725 qmomk_u1(:,ijk,m),
qmomk_v1(:,ijk,m),
qmomk_w1(:,ijk,m),
qmomk_m1(:,ijk,m))
747 IF (
dt .LT. qmomk_dt_tmp)
THEN 751 IF (tmp_dts .NE.
zero)
THEN 756 print *,
'Time = ',
time 757 print *,
'Time QMOMK = ',qmomk_time
761 IF (fluid_at(ijk))
THEN 769 IF (fluid_at(ijk))
THEN 797 IF (fluid_at(ijk))
THEN 804 ugc = avg_x_e(
u_g(imjk),
u_g(ijk),i)
805 vgc = avg_y_n(
v_g(ijmk),
v_g(ijk))
806 wgc = avg_z_t(
w_g(ijkm),
w_g(ijk))
subroutine qmomk_time_march
double precision, dimension(:,:), allocatable v_s
subroutine, public moments_twenty_eight_nodes(n, u, v, w, mom)
subroutine qmomk_initial_conditions
integer, dimension(:), allocatable i_of
double precision, dimension(dim_m) d_p0
double precision, dimension(:), allocatable ep_g
double precision, parameter one
double precision, parameter epsn
double precision, dimension(:,:), allocatable w_s
double precision, dimension(:,:,:), allocatable qmomk_w1
subroutine, public solve_boltzmann_collisions_one_specie(M, N, U, V, W, dt, e, dp, order)
integer qmomk_collisions_order
double precision, dimension(0:dim_j) dy
double precision, dimension(:,:,:), allocatable qmomk_v0
double precision, dimension(:,:,:), allocatable qmomk_w0
subroutine, public kinetic_flux_y_twenty_eight_nodes(Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
double precision, dimension(0:dim_k) dz
double precision, dimension(:,:), allocatable u_s
subroutine, public collisions_bgk(M, Dt, tcol, dp, e)
character(64) qmomk_collisions
integer, dimension(:), allocatable k_of
double precision, dimension(:,:,:), allocatable qmomk_n1
subroutine, public eight_node_3d(mom, n, u, v, w)
integer, dimension(:), allocatable j_of
double precision, dimension(:,:), allocatable qmomk_collision_time
double precision, parameter small_number
subroutine, public compute_collision_time(M, dp, theta, tcol, dt)
double precision, dimension(:,:,:), allocatable qmomk_n0
character(len=16) run_type
double precision, dimension(:,:,:), allocatable qmomk_u1
double precision, dimension(:,:), allocatable theta_m
double precision, dimension(:,:,:), allocatable qmomk_tau_drag
double precision, dimension(:), allocatable v_g
double precision, dimension(0:dim_i) dx
double precision, dimension(:), allocatable w_g
subroutine, public kinetic_flux_x_twenty_eight_nodes(Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
double precision, parameter large_number
double precision, dimension(:,:), allocatable ro_s
double precision, dimension(:), allocatable u_g
double precision, dimension(:,:), allocatable rop_s
double precision, dimension(:,:,:), allocatable qmomk_v1
subroutine, public bind_theta(mom, tau_p)
subroutine, public kinetic_flux_z_twenty_eight_nodes(Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
double precision, parameter pi
double precision qmomk_dt
double precision qmomk_cfl
double precision, dimension(:,:,:), allocatable qmomk_m0
integer, parameter qmomk_nn
double precision, parameter zero
double precision, dimension(:,:,:), allocatable qmomk_f_gs
subroutine, public solve_boltzmann_collisions_two_species(M1, N1, U1, V1, W1, M2, N2, U2, V2, W2, dt, m_1, m_2, dp1, dp2, e11, e12, order)
double precision, dimension(:,:,:), allocatable qmomk_m1
double precision, dimension(:,:,:), allocatable qmomk_u0