MFC: Simulation
High-fidelity multiphase flow simulation
Loading...
Searching...
No Matches
m_riemann_solvers.fpp.f90 File Reference

Functions/Subroutines

program __m_riemann_solvers_fpp_f90__
 This module features a database of approximate and exact Riemann problem solvers for the Navier-Stokes system of equations, which is supplemented by appropriate advection equations that are used to capture the material interfaces. The closure of the system is achieved by the stiffened gas equation of state and any required mixture relations. Surface tension effects are accounted for and are modeled by means of a volume force acting across the diffuse material interface region. The implementation details of viscous and capillary effects, into the Riemann solvers, may be found in Perigaud and Saurel (2005). Note that both effects are available only in the volume fraction model. At this time, the approximate and exact Riemann solvers that are listed below are available: 1) Harten-Lax-van Leer (HLL) 2) Harten-Lax-van Leer-Contact (HLLC) 3) Exact.
 
subroutine s_compute_speed_of_sound (pres, rho, gamma, pi_inf, h, adv, vel_sum, c)
 
subroutine s_hll_riemann_solver (ql_prim_rsx_vf, ql_prim_rsy_vf, ql_prim_rsz_vf, dql_prim_dx_vf, dql_prim_dy_vf, dql_prim_dz_vf, ql_prim_vf, qr_prim_rsx_vf, qr_prim_rsy_vf, qr_prim_rsz_vf, dqr_prim_dx_vf, dqr_prim_dy_vf, dqr_prim_dz_vf, qr_prim_vf, q_prim_vf, flux_vf, flux_src_vf, flux_gsrc_vf, norm_dir, ix, iy, iz)
 
subroutine s_hllc_riemann_solver (ql_prim_rsx_vf, ql_prim_rsy_vf, ql_prim_rsz_vf, dql_prim_dx_vf, dql_prim_dy_vf, dql_prim_dz_vf, ql_prim_vf, qr_prim_rsx_vf, qr_prim_rsy_vf, qr_prim_rsz_vf, dqr_prim_dx_vf, dqr_prim_dy_vf, dqr_prim_dz_vf, qr_prim_vf, q_prim_vf, flux_vf, flux_src_vf, flux_gsrc_vf, norm_dir, ix, iy, iz)
 This procedure is the implementation of the Harten, Lax, van Leer, and contact (HLLC) approximate Riemann solver, see Toro (1999) and Johnsen (2007). The viscous and the surface tension effects have been included by modifying the exact Riemann solver of Perigaud and Saurel (2005).
 
subroutine s_initialize_riemann_solvers_module ()
 The computation of parameters, the allocation of memory, the association of pointers and/or the execution of any other procedures that are necessary to setup the module.
 
subroutine s_populate_riemann_states_variables_buffers (ql_prim_rsx_vf, ql_prim_rsy_vf, ql_prim_rsz_vf, dql_prim_dx_vf, dql_prim_dy_vf, dql_prim_dz_vf, ql_prim_vf, qr_prim_rsx_vf, qr_prim_rsy_vf, qr_prim_rsz_vf, dqr_prim_dx_vf, dqr_prim_dy_vf, dqr_prim_dz_vf, qr_prim_vf, norm_dir, ix, iy, iz)
 The purpose of this subroutine is to populate the buffers of the left and right Riemann states variables, depending on the boundary conditions.
 
subroutine s_initialize_riemann_solver (q_prim_vf, flux_vf, flux_src_vf, flux_gsrc_vf, norm_dir, ix, iy, iz)
 The computation of parameters, the allocation of memory, the association of pointers and/or the execution of any other procedures needed to configure the chosen Riemann solver algorithm.
 
subroutine s_compute_cylindrical_viscous_source_flux (vell_vf, dvell_dx_vf, dvell_dy_vf, dvell_dz_vf, velr_vf, dvelr_dx_vf, dvelr_dy_vf, dvelr_dz_vf, flux_src_vf, norm_dir, ix, iy, iz)
 The goal of this subroutine is to evaluate and account for the contribution of viscous stresses in the source flux for the momentum and energy.
 
subroutine s_compute_cartesian_viscous_source_flux (vell_vf, dvell_dx_vf, dvell_dy_vf, dvell_dz_vf, velr_vf, dvelr_dx_vf, dvelr_dy_vf, dvelr_dz_vf, flux_src_vf, norm_dir, ix, iy, iz)
 The goal of this subroutine is to evaluate and account for the contribution of viscous stresses in the source flux for the momentum and energy.
 
subroutine s_finalize_riemann_solver (flux_vf, flux_src_vf, flux_gsrc_vf, norm_dir, ix, iy, iz)
 Deallocation and/or disassociation procedures that are needed to finalize the selected Riemann problem solver.
 
subroutine s_finalize_riemann_solvers_module ()
 Module deallocation and/or disassociation procedures.
 

Function/Subroutine Documentation

◆ __m_riemann_solvers_fpp_f90__()

program __m_riemann_solvers_fpp_f90__

This module features a database of approximate and exact Riemann problem solvers for the Navier-Stokes system of equations, which is supplemented by appropriate advection equations that are used to capture the material interfaces. The closure of the system is achieved by the stiffened gas equation of state and any required mixture relations. Surface tension effects are accounted for and are modeled by means of a volume force acting across the diffuse material interface region. The implementation details of viscous and capillary effects, into the Riemann solvers, may be found in Perigaud and Saurel (2005). Note that both effects are available only in the volume fraction model. At this time, the approximate and exact Riemann solvers that are listed below are available: 1) Harten-Lax-van Leer (HLL) 2) Harten-Lax-van Leer-Contact (HLLC) 3) Exact.

Here is the call graph for this function:

◆ s_compute_cartesian_viscous_source_flux()

subroutine __m_riemann_solvers_fpp_f90__::s_compute_cartesian_viscous_source_flux ( type(scalar_field), dimension(num_dims), intent(in) vell_vf,
type(scalar_field), dimension(num_dims), intent(in) dvell_dx_vf,
type(scalar_field), dimension(num_dims), intent(in) dvell_dy_vf,
type(scalar_field), dimension(num_dims), intent(in) dvell_dz_vf,
type(scalar_field), dimension(num_dims), intent(in) velr_vf,
type(scalar_field), dimension(num_dims), intent(in) dvelr_dx_vf,
type(scalar_field), dimension(num_dims), intent(in) dvelr_dy_vf,
type(scalar_field), dimension(num_dims), intent(in) dvelr_dz_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_src_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

The goal of this subroutine is to evaluate and account for the contribution of viscous stresses in the source flux for the momentum and energy.

Parameters
velL_vfLeft, WENO reconstructed, cell-boundary values of the velocity
velR_vfRight, WENO reconstructed, cell-boundary values of the velocity
dvelL_dx_vfLeft, WENO reconstructed cell-avg. x-dir derivative of the velocity
dvelL_dy_vfLeft, WENO reconstructed cell-avg. y-dir derivative of the velocity
dvelL_dz_vfLeft, WENO reconstructed cell-avg. z-dir derivative of the velocity
dvelR_dx_vfRight, WENO reconstructed cell-avg. x-dir derivative of the velocity
dvelR_dy_vfRight, WENO reconstructed cell-avg. y-dir derivative of the velocity
dvelR_dz_vfRight, WENO reconstructed cell-avg. z-dir derivative of the velocity
flux_src_vfIntercell flux
norm_dirDimensional splitting coordinate direction
ixIndex bounds in first coordinate direction
iyIndex bounds in second coordinate direction
izIndex bounds in third coordinate direction
Here is the caller graph for this function:

◆ s_compute_cylindrical_viscous_source_flux()

subroutine __m_riemann_solvers_fpp_f90__::s_compute_cylindrical_viscous_source_flux ( type(scalar_field), dimension(num_dims), intent(in) vell_vf,
type(scalar_field), dimension(num_dims), intent(in) dvell_dx_vf,
type(scalar_field), dimension(num_dims), intent(in) dvell_dy_vf,
type(scalar_field), dimension(num_dims), intent(in) dvell_dz_vf,
type(scalar_field), dimension(num_dims), intent(in) velr_vf,
type(scalar_field), dimension(num_dims), intent(in) dvelr_dx_vf,
type(scalar_field), dimension(num_dims), intent(in) dvelr_dy_vf,
type(scalar_field), dimension(num_dims), intent(in) dvelr_dz_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_src_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

The goal of this subroutine is to evaluate and account for the contribution of viscous stresses in the source flux for the momentum and energy.

Parameters
velL_vfLeft, WENO reconstructed, cell-boundary values of the velocity
velR_vfRight, WENO reconstructed, cell-boundary values of the velocity
dvelL_dx_vfLeft, WENO reconstructed cell-avg. x-dir derivative of the velocity
dvelL_dy_vfLeft, WENO reconstructed cell-avg. y-dir derivative of the velocity
dvelL_dz_vfLeft, WENO reconstructed cell-avg. z-dir derivative of the velocity
dvelR_dx_vfRight, WENO reconstructed cell-avg. x-dir derivative of the velocity
dvelR_dy_vfRight, WENO reconstructed cell-avg. y-dir derivative of the velocity
dvelR_dz_vfRight, WENO reconstructed cell-avg. z-dir derivative of the velocity
flux_src_vfIntercell flux
norm_dirDimensional splitting coordinate direction
ixIndex bounds in first coordinate direction
iyIndex bounds in second coordinate direction
izIndex bounds in third coordinate direction
Here is the caller graph for this function:

◆ s_compute_speed_of_sound()

subroutine __m_riemann_solvers_fpp_f90__::s_compute_speed_of_sound ( real(kind(0d0)), intent(in) pres,
real(kind(0d0)), intent(in) rho,
real(kind(0d0)), intent(in) gamma,
real(kind(0d0)), intent(in) pi_inf,
real(kind(0d0)), intent(in) h,
real(kind(0d0)), dimension(num_fluids), intent(in) adv,
real(kind(0d0)), intent(in) vel_sum,
real(kind(0d0)), intent(out) c )
private

◆ s_finalize_riemann_solver()

subroutine __m_riemann_solvers_fpp_f90__::s_finalize_riemann_solver ( type(scalar_field), dimension(sys_size), intent(inout) flux_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_src_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_gsrc_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

Deallocation and/or disassociation procedures that are needed to finalize the selected Riemann problem solver.

Parameters
flux_vfIntercell fluxes
flux_src_vfIntercell source fluxes
flux_gsrc_vfIntercell geometric source fluxes
norm_dirDimensional splitting coordinate direction
ixIndex bounds in first coordinate direction
iyIndex bounds in second coordinate direction
izIndex bounds in third coordinate direction
Here is the caller graph for this function:

◆ s_finalize_riemann_solvers_module()

subroutine __m_riemann_solvers_fpp_f90__::s_finalize_riemann_solvers_module
private

Module deallocation and/or disassociation procedures.

Here is the caller graph for this function:

◆ s_hll_riemann_solver()

subroutine __m_riemann_solvers_fpp_f90__::s_hll_riemann_solver ( real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsx_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsy_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dx_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dy_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable ql_prim_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsx_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsy_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dx_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dy_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable qr_prim_vf,
type(scalar_field), dimension(sys_size), intent(in) q_prim_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_src_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_gsrc_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_hllc_riemann_solver()

subroutine __m_riemann_solvers_fpp_f90__::s_hllc_riemann_solver ( real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsx_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsy_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dx_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dy_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable ql_prim_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsx_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsy_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dx_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dy_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable qr_prim_vf,
type(scalar_field), dimension(sys_size), intent(in) q_prim_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_src_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_gsrc_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

This procedure is the implementation of the Harten, Lax, van Leer, and contact (HLLC) approximate Riemann solver, see Toro (1999) and Johnsen (2007). The viscous and the surface tension effects have been included by modifying the exact Riemann solver of Perigaud and Saurel (2005).

Parameters
qL_prim_vfThe left WENO-reconstructed cell-boundary values of the cell-average primitive variables
qR_prim_vfThe right WENO-reconstructed cell-boundary values of the cell-average primitive variables
dqL_prim_dx_vfThe left WENO-reconstructed cell-boundary values of the first-order x-dir spatial derivatives
dqL_prim_dy_vfThe left WENO-reconstructed cell-boundary values of the first-order y-dir spatial derivatives
dqL_prim_dz_vfThe left WENO-reconstructed cell-boundary values of the first-order z-dir spatial derivatives
dqR_prim_dx_vfThe right WENO-reconstructed cell-boundary values of the first-order x-dir spatial derivatives
dqR_prim_dy_vfThe right WENO-reconstructed cell-boundary values of the first-order y-dir spatial derivatives
dqR_prim_dz_vfThe right WENO-reconstructed cell-boundary values of the first-order z-dir spatial derivatives
gm_alphaL_vfLeft averaged gradient magnitude
gm_alphaR_vfRight averaged gradient magnitude
flux_vfIntra-cell fluxes
flux_src_vfIntra-cell fluxes sources
flux_gsrc_vfIntra-cell geometric fluxes sources
norm_dirDir. splitting direction
ixIndex bounds in the x-dir
iyIndex bounds in the y-dir
izIndex bounds in the z-dir
q_prim_vfCell-averaged primitive variables

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

The computation of c_avg does not require all the variables, and therefore the non '_avg'

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_initialize_riemann_solver()

subroutine __m_riemann_solvers_fpp_f90__::s_initialize_riemann_solver ( type(scalar_field), dimension(sys_size), intent(in) q_prim_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_src_vf,
type(scalar_field), dimension(sys_size), intent(inout) flux_gsrc_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

The computation of parameters, the allocation of memory, the association of pointers and/or the execution of any other procedures needed to configure the chosen Riemann solver algorithm.

Parameters
qL_prim_vfThe left WENO-reconstructed cell-boundary values of the cell-average primitive variables
qR_prim_vfThe right WENO-reconstructed cell-boundary values of the cell-average primitive variables
flux_vfIntra-cell fluxes
flux_src_vfIntra-cell fluxes sources
flux_gsrc_vfIntra-cell geometric fluxes sources
norm_dirDir. splitting direction
ixIndex bounds in the x-dir
iyIndex bounds in the y-dir
izIndex bounds in the z-dir
q_prim_vfCell-averaged primitive variables
Here is the caller graph for this function:

◆ s_initialize_riemann_solvers_module()

subroutine __m_riemann_solvers_fpp_f90__::s_initialize_riemann_solvers_module
private

The computation of parameters, the allocation of memory, the association of pointers and/or the execution of any other procedures that are necessary to setup the module.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_populate_riemann_states_variables_buffers()

subroutine __m_riemann_solvers_fpp_f90__::s_populate_riemann_states_variables_buffers ( real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsx_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsy_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) ql_prim_rsz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dx_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dy_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dql_prim_dz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable ql_prim_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsx_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsy_vf,
real(kind(0d0)), dimension(startx:, starty:, startz:, 1:), intent(inout) qr_prim_rsz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dx_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dy_vf,
type(scalar_field), dimension(:), intent(inout), allocatable dqr_prim_dz_vf,
type(scalar_field), dimension(:), intent(inout), allocatable qr_prim_vf,
integer, intent(in) norm_dir,
type(int_bounds_info), intent(in) ix,
type(int_bounds_info), intent(in) iy,
type(int_bounds_info), intent(in) iz )
private

The purpose of this subroutine is to populate the buffers of the left and right Riemann states variables, depending on the boundary conditions.

Parameters
qL_prim_vfThe left WENO-reconstructed cell-boundary values of the cell-average primitive variables
qR_prim_vfThe right WENO-reconstructed cell-boundary values of the cell-average primitive variables
dqL_prim_dx_vfThe left WENO-reconstructed cell-boundary values of the first-order x-dir spatial derivatives
dqL_prim_dy_vfThe left WENO-reconstructed cell-boundary values of the first-order y-dir spatial derivatives
dqL_prim_dz_vfThe left WENO-reconstructed cell-boundary values of the first-order z-dir spatial derivatives
dqR_prim_dx_vfThe right WENO-reconstructed cell-boundary values of the first-order x-dir spatial derivatives
dqR_prim_dy_vfThe right WENO-reconstructed cell-boundary values of the first-order y-dir spatial derivatives
dqR_prim_dz_vfThe right WENO-reconstructed cell-boundary values of the first-order z-dir spatial derivatives
gm_alphaL_vfLeft averaged gradient magnitude
gm_alphaR_vfRight averaged gradient magnitude
norm_dirDir. splitting direction
ixIndex bounds in the x-dir
iyIndex bounds in the y-dir
izIndex bounds in the z-dir
Here is the caller graph for this function: