|
using | ConservativeVarsMinmod = ::Limiters::Minmod< VolumeDim, tmpl::list< NewtonianEuler::Tags::MassDensityCons, NewtonianEuler::Tags::MomentumDensity< VolumeDim >, NewtonianEuler::Tags::EnergyDensity > > |
|
using | options = tmpl::list< typename ConservativeVarsMinmod::Type, VariablesToLimit, typename ConservativeVarsMinmod::TvbConstant, ApplyFlattener, typename ConservativeVarsMinmod::DisableForDebugging > |
|
using | PackagedData = typename ConservativeVarsMinmod::PackagedData |
|
using | package_argument_tags = typename ConservativeVarsMinmod::package_argument_tags |
|
using | limit_tags = tmpl::list< NewtonianEuler::Tags::MassDensityCons, NewtonianEuler::Tags::MomentumDensity< VolumeDim >, NewtonianEuler::Tags::EnergyDensity > |
|
using | limit_argument_tags = tmpl::list< domain::Tags::Mesh< VolumeDim >, domain::Tags::Element< VolumeDim >, domain::Tags::Coordinates< VolumeDim, Frame::ElementLogical >, domain::Tags::SizeOfElement< VolumeDim >, domain::Tags::DetInvJacobian< Frame::ElementLogical, Frame::Inertial >, ::hydro::Tags::EquationOfState< false, 2 > > |
|
|
| Minmod (::Limiters::MinmodType minmod_type, NewtonianEuler::Limiters::VariablesToLimit vars_to_limit, double tvb_constant, bool apply_flattener, bool disable_for_debugging=false) |
|
| Minmod (const Minmod &)=default |
|
Minmod & | operator= (const Minmod &)=default |
|
| Minmod (Minmod &&)=default |
|
Minmod & | operator= (Minmod &&)=default |
|
void | pup (PUP::er &p) |
|
void | package_data (gsl::not_null< PackagedData * > packaged_data, const Scalar< DataVector > &mass_density_cons, const tnsr::I< DataVector, VolumeDim > &momentum_density, const Scalar< DataVector > &energy_density, const Mesh< VolumeDim > &mesh, const std::array< double, VolumeDim > &element_size, const OrientationMap< VolumeDim > &orientation_map) const |
| Package data for sending to neighbor elements.
|
|
bool | operator() (gsl::not_null< Scalar< DataVector > * > mass_density_cons, gsl::not_null< tnsr::I< DataVector, VolumeDim > * > momentum_density, gsl::not_null< Scalar< DataVector > * > energy_density, const Mesh< VolumeDim > &mesh, const Element< VolumeDim > &element, const tnsr::I< DataVector, VolumeDim, Frame::ElementLogical > &logical_coords, const std::array< double, VolumeDim > &element_size, const Scalar< DataVector > &det_inv_logical_to_inertial_jacobian, const EquationsOfState::EquationOfState< false, 2 > &equation_of_state, const std::unordered_map< DirectionalId< VolumeDim >, PackagedData, boost::hash< DirectionalId< VolumeDim > > > &neighbor_data) const |
| Limits the solution on the element.
|
|
template<size_t VolumeDim>
class NewtonianEuler::Limiters::Minmod< VolumeDim >
A minmod-based generalized slope limiter for the NewtonianEuler system.
Implements the three minmod-based generalized slope limiters from [40] Sec. 2.4: \(\Lambda\Pi^1\), \(\Lambda\Pi^N\), and MUSCL. See the documentation of the system-agnostic Limiters::Minmod limiter for a general discussion of the algorithm and the various options that control the action of the limiter.
This implemention is specialized to the NewtonianEuler evolution system. By specializing the limiter to the system, we can add two features that improve its robustness:
- the limiter can be applied to the system's characteristic variables. This is the recommendation of the reference, because it reduces spurious oscillations in the post-limiter solution.
- after limiting, the solution can be processed to remove any remaining unphysical values like negative densities and pressures. We do this by scaling the solution around its mean (a "flattener" or "bounds-preserving" filter). Note: the flattener is applied to all elements, including those where the limiter did not act to reduce the solution's slopes.