|
SpECTRE
v2025.08.19
|
An HLL Riemann solver. More...
#include <Hll.hpp>
Classes | |
| struct | LargestIngoingCharSpeed |
| struct | LargestOutgoingCharSpeed |
| struct | LightSpeedDensityCutoff |
| struct | MagneticFieldMagnitudeForHydro |
Public Member Functions | |
| Hll (const Hll &)=default | |
| Hll & | operator= (const Hll &)=default |
| Hll (Hll &&)=default | |
| Hll & | operator= (Hll &&)=default |
| Hll (double magnetic_field_magnitude_for_hydro, double light_speed_density_cutoff) | |
| void | pup (PUP::er &p) override |
| std::unique_ptr< BoundaryCorrection > | get_clone () const override |
| double | dg_package_data (gsl::not_null< Scalar< DataVector > * > packaged_tilde_d, gsl::not_null< Scalar< DataVector > * > packaged_tilde_ye, gsl::not_null< Scalar< DataVector > * > packaged_tilde_tau, gsl::not_null< tnsr::i< DataVector, 3, Frame::Inertial > * > packaged_tilde_s, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > packaged_tilde_b, gsl::not_null< Scalar< DataVector > * > packaged_tilde_phi, gsl::not_null< Scalar< DataVector > * > packaged_normal_dot_flux_tilde_d, gsl::not_null< Scalar< DataVector > * > packaged_normal_dot_flux_tilde_ye, gsl::not_null< Scalar< DataVector > * > packaged_normal_dot_flux_tilde_tau, gsl::not_null< tnsr::i< DataVector, 3, Frame::Inertial > * > packaged_normal_dot_flux_tilde_s, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > packaged_normal_dot_flux_tilde_b, gsl::not_null< Scalar< DataVector > * > packaged_normal_dot_flux_tilde_phi, gsl::not_null< Scalar< DataVector > * > packaged_largest_outgoing_char_speed, gsl::not_null< Scalar< DataVector > * > packaged_largest_ingoing_char_speed, const Scalar< DataVector > &tilde_d, const Scalar< DataVector > &tilde_ye, const Scalar< DataVector > &tilde_tau, const tnsr::i< DataVector, 3, Frame::Inertial > &tilde_s, const tnsr::I< DataVector, 3, Frame::Inertial > &tilde_b, const Scalar< DataVector > &tilde_phi, const tnsr::I< DataVector, 3, Frame::Inertial > &flux_tilde_d, const tnsr::I< DataVector, 3, Frame::Inertial > &flux_tilde_ye, const tnsr::I< DataVector, 3, Frame::Inertial > &flux_tilde_tau, const tnsr::Ij< DataVector, 3, Frame::Inertial > &flux_tilde_s, const tnsr::IJ< DataVector, 3, Frame::Inertial > &flux_tilde_b, const tnsr::I< DataVector, 3, Frame::Inertial > &flux_tilde_phi, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, 3, Frame::Inertial > &shift, const tnsr::i< DataVector, 3, Frame::Inertial > &spatial_velocity_one_form, const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &temperature, const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const tnsr::i< DataVector, 3, Frame::Inertial > &normal_covector, const tnsr::I< DataVector, 3, Frame::Inertial > &normal_vector, const std::optional< tnsr::I< DataVector, 3, Frame::Inertial > > &, const std::optional< Scalar< DataVector > > &normal_dot_mesh_velocity, const EquationsOfState::EquationOfState< true, 3 > &equation_of_state) const |
Public Member Functions inherited from evolution::BoundaryCorrection | |
| BoundaryCorrection (const BoundaryCorrection &)=default | |
| BoundaryCorrection & | operator= (const BoundaryCorrection &)=default |
| BoundaryCorrection (BoundaryCorrection &&)=default | |
| BoundaryCorrection & | operator= (BoundaryCorrection &&)=default |
| BoundaryCorrection (CkMigrateMessage *msg) | |
| virtual std::unique_ptr< BoundaryCorrection > | get_clone () const =0 |
Static Public Member Functions | |
| static void | dg_boundary_terms (gsl::not_null< Scalar< DataVector > * > boundary_correction_tilde_d, gsl::not_null< Scalar< DataVector > * > boundary_correction_tilde_ye, gsl::not_null< Scalar< DataVector > * > boundary_correction_tilde_tau, gsl::not_null< tnsr::i< DataVector, 3, Frame::Inertial > * > boundary_correction_tilde_s, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > boundary_correction_tilde_b, gsl::not_null< Scalar< DataVector > * > boundary_correction_tilde_phi, const Scalar< DataVector > &tilde_d_int, const Scalar< DataVector > &tilde_ye_int, const Scalar< DataVector > &tilde_tau_int, const tnsr::i< DataVector, 3, Frame::Inertial > &tilde_s_int, const tnsr::I< DataVector, 3, Frame::Inertial > &tilde_b_int, const Scalar< DataVector > &tilde_phi_int, const Scalar< DataVector > &normal_dot_flux_tilde_d_int, const Scalar< DataVector > &normal_dot_flux_tilde_ye_int, const Scalar< DataVector > &normal_dot_flux_tilde_tau_int, const tnsr::i< DataVector, 3, Frame::Inertial > &normal_dot_flux_tilde_s_int, const tnsr::I< DataVector, 3, Frame::Inertial > &normal_dot_flux_tilde_b_int, const Scalar< DataVector > &normal_dot_flux_tilde_phi_int, const Scalar< DataVector > &largest_outgoing_char_speed_int, const Scalar< DataVector > &largest_ingoing_char_speed_int, const Scalar< DataVector > &tilde_d_ext, const Scalar< DataVector > &tilde_ye_ext, const Scalar< DataVector > &tilde_tau_ext, const tnsr::i< DataVector, 3, Frame::Inertial > &tilde_s_ext, const tnsr::I< DataVector, 3, Frame::Inertial > &tilde_b_ext, const Scalar< DataVector > &tilde_phi_ext, const Scalar< DataVector > &normal_dot_flux_tilde_d_ext, const Scalar< DataVector > &normal_dot_flux_tilde_ye_ext, const Scalar< DataVector > &normal_dot_flux_tilde_tau_ext, const tnsr::i< DataVector, 3, Frame::Inertial > &normal_dot_flux_tilde_s_ext, const tnsr::I< DataVector, 3, Frame::Inertial > &normal_dot_flux_tilde_b_ext, const Scalar< DataVector > &normal_dot_flux_tilde_phi_ext, const Scalar< DataVector > &largest_outgoing_char_speed_ext, const Scalar< DataVector > &largest_ingoing_char_speed_ext, dg::Formulation dg_formulation) |
Static Public Attributes | |
| static constexpr Options::String | help |
Friends | |
| bool | operator== (const Hll &lhs, const Hll &rhs) |
An HLL Riemann solver.
Let \(U\) be the evolved variable, \(F^i\) the flux, and \(n_i\) be the outward directed unit normal to the interface. Denoting \(F := n_i F^i\), the HLL boundary correction is [94]
\begin{align*} G_\text{HLL} = \frac{\lambda_\text{max} F_\text{int} + \lambda_\text{min} F_\text{ext}}{\lambda_\text{max} - \lambda_\text{min}} - \frac{\lambda_\text{min}\lambda_\text{max}}{\lambda_\text{max} - \lambda_\text{min}} \left(U_\text{int} - U_\text{ext}\right) \end{align*}
where "int" and "ext" stand for interior and exterior. \(\lambda_\text{min}\) and \(\lambda_\text{max}\) are defined as
\begin{align*} \lambda_\text{min} &= \text{min}\left(\lambda^{-}_\text{int},-\lambda^{+}_\text{ext}, 0\right) \\ \lambda_\text{max} &= \text{max}\left(\lambda^{+}_\text{int},-\lambda^{-}_\text{ext}, 0\right) \end{align*}
where \(\lambda^{+}\) ( \(\lambda^{-}\)) is the largest characteristic speed in the outgoing (ingoing) direction. Note the minus signs in front of \(\lambda^{\pm}_\text{ext}\), which is because an outgoing speed w.r.t. the neighboring element is an ingoing speed w.r.t. the local element, and vice versa. Similarly, the \(F_{\text{ext}}\) term in \(G_\text{HLL}\) has a positive sign 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 in the documentation for grmhd::ValenciaDivClean::characteristic_speeds(). Since the fluid is travelling slower than the speed of light, the speeds we are interested in are
\begin{align*} \lambda^{\pm}&=\pm\alpha-\beta^i n_i, \end{align*}
which correspond to the divergence cleaning field.
dg_boundary_terms function returns \(G - F_\text{int}\)
|
overridevirtual |
Implements evolution::BoundaryCorrection.
|
staticconstexpr |