|
SpECTRE
2021.08.02
|
Compute the HLLC numerical flux. More...
#include <Hllc.hpp>
Classes | |
| struct | LargestIngoingSpeed |
| Estimate for one of the signal speeds. More... | |
| struct | LargestOutgoingSpeed |
| Estimate for the other signal speed. More... | |
| struct | NormalVelocity |
| The normal component of the velocity. More... | |
Public Member Functions | |
| void | pup (PUP::er &) noexcept |
| void | package_data (gsl::not_null< Scalar< DataVector > * > packaged_n_dot_f_mass_density, gsl::not_null< tnsr::I< DataVector, Dim, Frame > * > packaged_n_dot_f_momentum_density, gsl::not_null< Scalar< DataVector > * > packaged_n_dot_f_energy_density, gsl::not_null< Scalar< DataVector > * > packaged_mass_density, gsl::not_null< tnsr::I< DataVector, Dim, Frame > * > packaged_momentum_density, gsl::not_null< Scalar< DataVector > * > packaged_energy_density, gsl::not_null< Scalar< DataVector > * > packaged_pressure, gsl::not_null< tnsr::i< DataVector, Dim, Frame > * > packaged_face_normal, gsl::not_null< Scalar< DataVector > * > packaged_normal_velocity, gsl::not_null< Scalar< DataVector > * > packaged_largest_ingoing_speed, gsl::not_null< Scalar< DataVector > * > packaged_largest_outgoing_speed, const Scalar< DataVector > &normal_dot_flux_mass_density, const tnsr::I< DataVector, Dim, Frame > &normal_dot_flux_momentum_density, const Scalar< DataVector > &normal_dot_flux_energy_density, const Scalar< DataVector > &mass_density, const tnsr::I< DataVector, Dim, Frame > &momentum_density, const Scalar< DataVector > &energy_density, const tnsr::I< DataVector, Dim, Frame > &velocity, const Scalar< DataVector > &pressure, const typename char_speeds_tag::type &characteristic_speeds, const tnsr::i< DataVector, Dim, Frame > &interface_unit_normal) const noexcept |
| void | operator() (gsl::not_null< Scalar< DataVector > * > normal_dot_numerical_flux_mass_density, gsl::not_null< tnsr::I< DataVector, Dim, Frame > * > normal_dot_numerical_flux_momentum_density, gsl::not_null< Scalar< DataVector > * > normal_dot_numerical_flux_energy_density, const Scalar< DataVector > &normal_dot_flux_mass_density_int, const tnsr::I< DataVector, Dim, Frame > &normal_dot_flux_momentum_density_int, const Scalar< DataVector > &normal_dot_flux_energy_density_int, const Scalar< DataVector > &mass_density_int, const tnsr::I< DataVector, Dim, Frame > &momentum_density_int, const Scalar< DataVector > &energy_density_int, const Scalar< DataVector > &pressure_int, const tnsr::i< DataVector, Dim, Frame > &interface_unit_normal, const Scalar< DataVector > &normal_velocity_int, const Scalar< DataVector > &largest_ingoing_speed_int, const Scalar< DataVector > &largest_outgoing_speed_int, const Scalar< DataVector > &minus_normal_dot_flux_mass_density_ext, const tnsr::I< DataVector, Dim, Frame > &minus_normal_dot_flux_momentum_density_ext, const Scalar< DataVector > &minus_normal_dot_flux_energy_density_ext, const Scalar< DataVector > &mass_density_ext, const tnsr::I< DataVector, Dim, Frame > &momentum_density_ext, const Scalar< DataVector > &energy_density_ext, const Scalar< DataVector > &pressure_ext, const tnsr::i< DataVector, Dim, Frame > &minus_interface_unit_normal, const Scalar< DataVector > &minus_normal_velocity_ext, const Scalar< DataVector > &minus_largest_outgoing_speed_ext, const Scalar< DataVector > &minus_largest_ingoing_speed_ext) const noexcept |
Static Public Attributes | |
| static constexpr Options::String | help |
Compute the HLLC numerical flux.
Class implementing the HLLC flux for the Newtonian Euler equations, originally introduced by E. F. Toro, M. Spruce and W. Speares [107]. Let \(F^k = [F^k(\rho), F^k(S^i), F^k(e)]^T\) be the fluxes of the conservative quantities \(U = [\rho, S^i, e]^T\) (see NewtonianEuler::ComputeFluxes). Denoting \(v_n = n_k v^k\) and \(F = n_kF^k\), where \(v^k\) is the velocity and \(n_k\) is the interface unit normal, the HLLC flux is
\begin{align*} G_\text{HLLC} = \begin{cases} F_\text{int}, & S_\text{min} > 0, \\ G_{*\text{int}}, & S_\text{min} \leq 0\quad\text{and}\quad S_* > 0, \\ G_{*\text{ext}}, & S_* \leq 0\quad\text{and}\quad S_\text{max} > 0, \\ F_\text{ext}, & S_\text{max} \leq 0, \end{cases} \end{align*}
where
\begin{align*} G_{*\text{int}} &= \frac{S_*\left(F_\text{int} - S_\text{min}U_\text{int}\right) - S_\text{min} p_{*\text{int}}D_*}{S_* - S_\text{min}},\\ G_{*\text{ext}} &= \frac{S_*\left(F_\text{ext} - S_\text{max}U_\text{ext}\right) - S_\text{max} p_{*\text{ext}}D_*}{S_* - S_\text{max}}, \end{align*}
with
\begin{align*} p_{*\text{int}} &\equiv p_\text{int} + \rho_\text{int} \left[(v_n)_\text{int} - S_\text{min}\right] \left[(v_n)_\text{int} - S_*\right], \\ p_{*\text{ext}} &\equiv p_\text{ext} + \rho_\text{ext} \left[(v_n)_\text{ext} - S_\text{max}\right] \left[(v_n)_\text{ext} - S_*\right], \\ S_* &\equiv \frac{p_\text{int} + F(\rho)_\text{int}\left[(v_n)_\text{int} - S_\text{min}\right] - p_\text{ext} - F(\rho)_\text{ext}\left[(v_n)_\text{ext} - S_\text{max}\right]}{F(\rho)_\text{int} - \rho_\text{int}S_\text{min} - F(\rho)_\text{ext} + \rho_\text{ext}S_\text{max}},\\ D_* &\equiv \left[\begin{array}{c} 0\\ n^i\\ S_* \end{array}\right], \end{align*}
and \(S_\text{min}\) and \(S_\text{max}\) are estimates of the minimum and maximum signal speeds bounding the ingoing and outgoing wavespeeds that arise when solving the Riemann problem. One requires \(S_\text{min} \leq S_* \leq S_\text{max}\). As estimates, we use
\begin{align*} S_\text{min} &= \text{min}\left(\{\lambda_\text{int}\},\{\lambda_\text{ext}\}, 0\right)\\ S_\text{max} &= \text{max}\left(\{\lambda_\text{int}\},\{\lambda_\text{ext}\}, 0\right), \end{align*}
where \(\{\lambda\}\) is the set of all the characteristic speeds along a given normal. This way, the definition of \(G_\text{HLLC}\) simplifies to
\begin{align*} G_\text{HLLC} = \begin{cases} \dfrac{S_*\left(F_\text{int} - S_\text{min}U_\text{int}\right) - S_\text{min} p_{*\text{int}}D_*}{S_* - S_\text{min}}, & S_* > 0, \\ \dfrac{S_*\left(F_\text{ext} - S_\text{max}U_\text{ext}\right) - S_\text{max} p_{*\text{ext}}D_*}{S_* - S_\text{max}}, & S_* \leq 0. \\ \end{cases} \end{align*}
|
staticconstexpr |