|
SpECTRE
2021.08.02
|
A Rusanov/local Lax-Friedrichs Riemann solver. More...
#include <Rusanov.hpp>
Public Types | |
| using | options = tmpl::list<> |
| using | dg_package_field_tags = tmpl::list< Tags::MassDensityCons, Tags::MomentumDensity< Dim >, Tags::EnergyDensity, ::Tags::NormalDotFlux< Tags::MassDensityCons >, ::Tags::NormalDotFlux< Tags::MomentumDensity< Dim > >, ::Tags::NormalDotFlux< Tags::EnergyDensity >, AbsCharSpeed > |
| using | dg_package_data_temporary_tags = tmpl::list<> |
| using | dg_package_data_primitive_tags = tmpl::list< NewtonianEuler::Tags::Velocity< DataVector, Dim >, NewtonianEuler::Tags::SpecificInternalEnergy< DataVector > > |
| using | dg_package_data_volume_tags = tmpl::list< hydro::Tags::EquationOfStateBase > |
Public Types inherited from NewtonianEuler::BoundaryCorrections::BoundaryCorrection< Dim > | |
| using | creatable_classes = tmpl::list< Hll< Dim >, Hllc< Dim >, Rusanov< Dim > > |
Public Member Functions | |
| Rusanov (const Rusanov &)=default | |
| Rusanov & | operator= (const Rusanov &)=default |
| Rusanov (Rusanov &&)=default | |
| Rusanov & | operator= (Rusanov &&)=default |
| void | pup (PUP::er &p) override |
| std::unique_ptr< BoundaryCorrection< Dim > > | get_clone () const noexcept override |
| template<size_t ThermodynamicDim> | |
| double | dg_package_data (gsl::not_null< Scalar< DataVector > * > packaged_mass_density, gsl::not_null< tnsr::I< DataVector, Dim, Frame::Inertial > * > packaged_momentum_density, gsl::not_null< Scalar< DataVector > * > packaged_energy_density, gsl::not_null< Scalar< DataVector > * > packaged_normal_dot_flux_mass_density, gsl::not_null< tnsr::I< DataVector, Dim, Frame::Inertial > * > packaged_normal_dot_flux_momentum_density, gsl::not_null< Scalar< DataVector > * > packaged_normal_dot_flux_energy_density, gsl::not_null< Scalar< DataVector > * > packaged_abs_char_speed, const Scalar< DataVector > &mass_density, const tnsr::I< DataVector, Dim, Frame::Inertial > &momentum_density, const Scalar< DataVector > &energy_density, const tnsr::I< DataVector, Dim, Frame::Inertial > &flux_mass_density, const tnsr::IJ< DataVector, Dim, Frame::Inertial > &flux_momentum_density, const tnsr::I< DataVector, Dim, Frame::Inertial > &flux_energy_density, const tnsr::I< DataVector, Dim, Frame::Inertial > &velocity, const Scalar< DataVector > &specific_internal_energy, const tnsr::i< DataVector, Dim, Frame::Inertial > &normal_covector, const std::optional< tnsr::I< DataVector, Dim, Frame::Inertial > > &, const std::optional< Scalar< DataVector > > &normal_dot_mesh_velocity, const EquationsOfState::EquationOfState< false, ThermodynamicDim > &equation_of_state) const noexcept |
| void | dg_boundary_terms (gsl::not_null< Scalar< DataVector > * > boundary_correction_mass_density, gsl::not_null< tnsr::I< DataVector, Dim, Frame::Inertial > * > boundary_correction_momentum_density, gsl::not_null< Scalar< DataVector > * > boundary_correction_energy_density, const Scalar< DataVector > &mass_density_int, const tnsr::I< DataVector, Dim, Frame::Inertial > &momentum_density_int, const Scalar< DataVector > &energy_density_int, const Scalar< DataVector > &normal_dot_flux_mass_density_int, const tnsr::I< DataVector, Dim, Frame::Inertial > &normal_dot_flux_momentum_density_int, const Scalar< DataVector > &normal_dot_flux_energy_density_int, const Scalar< DataVector > &abs_char_speed_int, const Scalar< DataVector > &mass_density_ext, const tnsr::I< DataVector, Dim, Frame::Inertial > &momentum_density_ext, const Scalar< DataVector > &energy_density_ext, const Scalar< DataVector > &normal_dot_flux_mass_density_ext, const tnsr::I< DataVector, Dim, Frame::Inertial > &normal_dot_flux_momentum_density_ext, const Scalar< DataVector > &normal_dot_flux_energy_density_ext, const Scalar< DataVector > &abs_char_speed_ext, dg::Formulation dg_formulation) const noexcept |
Public Member Functions inherited from NewtonianEuler::BoundaryCorrections::BoundaryCorrection< Dim > | |
| BoundaryCorrection (const BoundaryCorrection &)=default | |
| BoundaryCorrection & | operator= (const BoundaryCorrection &)=default |
| BoundaryCorrection (BoundaryCorrection &&)=default | |
| BoundaryCorrection & | operator= (BoundaryCorrection &&)=default |
Static Public Attributes | |
| static constexpr Options::String | help |
A Rusanov/local Lax-Friedrichs Riemann solver.
Let \(U\) be the state vector of evolved variables, \(F^i\) the corresponding fluxes, and \(n_i\) be the outward directed unit normal to the interface. Denoting \(F := n_i F^i\), the Rusanov boundary correction is
\begin{align*} G_\text{Rusanov} = \frac{F_\text{int} - F_\text{ext}}{2} - \frac{\text{max}\left(\{|\lambda_\text{int}|\}, \{|\lambda_\text{ext}|\}\right)}{2} \left(U_\text{ext} - U_\text{int}\right), \end{align*}
where "int" and "ext" stand for interior and exterior, and \(\{|\lambda|\}\) is the set of characteristic/signal speeds. The minus sign in front of the \(F_{\text{ext}}\) is necessary because the outward directed normal of the neighboring element has the opposite sign, i.e. \(n_i^{\text{ext}}=-n_i^{\text{int}}\). The characteristic/signal speeds are given by:
\begin{align*} \lambda_{\pm}&=v^i n_i \pm c_s, \\ \lambda_v&=v^i n_i \end{align*}
where \(v^i\) is the spatial velocity and \(c_s\) the sound speed.
dg_boundary_terms function returns \(G - F_\text{int}\)
|
overridevirtualnoexcept |
|
staticconstexpr |