ryujin 2.1.1 revision 0348cbb53a3e4b1da2a4c037e81f88f2d21ce219
Public Types | Public Member Functions | List of all members
ryujin::EulerAEOS::HyperbolicSystemView< dim, Number > Class Template Reference

#include <source/euler_aeos/hyperbolic_system.h>

Public Types

using ScalarNumber = typename get_value_type< Number >::type
 

Public Member Functions

 HyperbolicSystemView (const HyperbolicSystem &hyperbolic_system)
 
template<int dim2, typename Number2 >
auto view () const
 
Access to runtime parameters
DEAL_II_ALWAYS_INLINE const std::string & equation_of_state () const
 
DEAL_II_ALWAYS_INLINE ScalarNumber reference_density () const
 
DEAL_II_ALWAYS_INLINE ScalarNumber vacuum_state_relaxation_small () const
 
DEAL_II_ALWAYS_INLINE ScalarNumber vacuum_state_relaxation_large () const
 
DEAL_II_ALWAYS_INLINE bool compute_strict_bounds () const
 
Surrogate functions for computing various interpolatory

physical quantities that are needed for Riemann solver, indicator and limiter.

Number surrogate_specific_entropy (const state_type &U, const Number &gamma_min) const
 
Number surrogate_harten_entropy (const state_type &U, const Number &gamma_min) const
 
state_type surrogate_harten_entropy_derivative (const state_type &U, const Number &eta, const Number &gamma_min) const
 
Number surrogate_gamma (const state_type &U, const Number &p) const
 
Number surrogate_pressure (const state_type &U, const Number &gamma) const
 
Number surrogate_speed_of_sound (const state_type &U, const Number &gamma) const
 
bool is_admissible (const state_type &U) const
 
Special functions for boundary states
template<int component>
state_type prescribe_riemann_characteristic (const state_type &U, const Number &p, const state_type &U_bar, const Number &p_bar, const dealii::Tensor< 1, dim, Number > &normal) const
 
template<typename Lambda >
state_type apply_boundary_conditions (const dealii::types::boundary_id id, const state_type &U, const dealii::Tensor< 1, dim, Number > &normal, const Lambda &get_dirichlet_data) const
 
State transformations
template<typename ST >
state_type expand_state (const ST &state) const
 
template<typename ST >
state_type from_initial_state (const ST &initial_state) const
 
state_type from_primitive_state (const state_type &primitive_state) const
 
state_type to_primitive_state (const state_type &state) const
 
template<typename Lambda >
state_type apply_galilei_transform (const state_type &state, const Lambda &lambda) const
 

Types and constexpr constants

using state_type = dealii::Tensor< 1, problem_dimension, Number >
 
using flux_type = dealii::Tensor< 1, problem_dimension, dealii::Tensor< 1, dim, Number > >
 
using flux_contribution_type = flux_type
 
using precomputed_type = std::array< Number, n_precomputed_values >
 
using initial_precomputed_type = std::array< Number, n_initial_precomputed_values >
 
using StateVector = Vectors::StateVector< ScalarNumber, problem_dimension, n_precomputed_values >
 
using HyperbolicVector = Vectors::MultiComponentVector< ScalarNumber, problem_dimension >
 
using PrecomputedVector = Vectors::MultiComponentVector< ScalarNumber, n_precomputed_values >
 
using InitialPrecomputedVector = Vectors::MultiComponentVector< ScalarNumber, n_initial_precomputed_values >
 
static constexpr unsigned int problem_dimension = 2 + dim
 
static const auto component_names
 
static const auto primitive_component_names
 
static constexpr unsigned int n_precomputed_values = 4
 
static const auto precomputed_names
 
static constexpr unsigned int n_initial_precomputed_values = 0
 
static const auto initial_precomputed_names
 

Low-level access to the selected equation of state.

static constexpr bool have_gamma = false
 
static constexpr bool have_eos_interpolation_b = true
 
DEAL_II_ALWAYS_INLINE Number eos_pressure (const Number &rho, const Number &e) const
 
DEAL_II_ALWAYS_INLINE Number eos_specific_internal_energy (const Number &rho, const Number &p) const
 
DEAL_II_ALWAYS_INLINE Number eos_temperature (const Number &rho, const Number &e) const
 
DEAL_II_ALWAYS_INLINE Number eos_speed_of_sound (const Number &rho, const Number &e) const
 
DEAL_II_ALWAYS_INLINE ScalarNumber eos_interpolation_b () const
 
DEAL_II_ALWAYS_INLINE ScalarNumber eos_interpolation_pinfty () const
 
DEAL_II_ALWAYS_INLINE ScalarNumber eos_interpolation_q () const
 

Computing precomputed quantities

static constexpr unsigned int n_precomputation_cycles = 2
 
template<typename DISPATCH , typename SPARSITY >
void precomputation_loop (unsigned int cycle, const DISPATCH &dispatch_check, const SPARSITY &sparsity_simd, StateVector &state_vector, unsigned int left, unsigned int right) const
 

Flux computations

static constexpr bool have_high_order_flux = false
 
flux_type f (const state_type &U, const Number &p) const
 
flux_contribution_type flux_contribution (const PrecomputedVector &pv, const InitialPrecomputedVector &piv, const unsigned int i, const state_type &U_i) const
 
flux_contribution_type flux_contribution (const PrecomputedVector &pv, const InitialPrecomputedVector &piv, const unsigned int *js, const state_type &U_j) const
 
state_type flux_divergence (const flux_contribution_type &flux_i, const flux_contribution_type &flux_j, const dealii::Tensor< 1, dim, Number > &c_ij) const
 
state_type high_order_flux_divergence (const flux_contribution_type &flux_i, const flux_contribution_type &flux_j, const dealii::Tensor< 1, dim, Number > &c_ij) const =delete
 

Computing stencil source terms

static constexpr bool have_source_terms = false
 
state_type nodal_source (const PrecomputedVector &pv, const unsigned int i, const state_type &U_i, const ScalarNumber tau) const =delete
 
state_type nodal_source (const PrecomputedVector &pv, const unsigned int *js, const state_type &U_j, const ScalarNumber tau) const =delete
 

Computing derived physical quantities

Number filter_vacuum_density (const Number &rho) const
 
static Number density (const state_type &U)
 
static dealii::Tensor< 1, dim, Number > momentum (const state_type &U)
 
static Number total_energy (const state_type &U)
 
static Number internal_energy (const state_type &U)
 
static state_type internal_energy_derivative (const state_type &U)
 

Detailed Description

template<int dim, typename Number>
class ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >

A view of the HyperbolicSystem that makes methods available for a given dimension dim and choice of number type Number (which can be a scalar float, or double, as well as a VectorizedArray holding packed scalars.

Intended usage:

HyperbolicSystem hyperbolic_system;
const auto view = hyperbolic_system.template view<dim, Number>();
const auto flux_i = view.flux_contribution(...);
const auto flux_j = view.flux_contribution(...);
const auto flux_ij = view.flux_divergence(flux_i, flux_j, c_ij);
// etc.

Definition at line 130 of file hyperbolic_system.h.

Member Typedef Documentation

◆ ScalarNumber

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::ScalarNumber = typename get_value_type<Number>::type

The underlying scalar number type.

Definition at line 154 of file hyperbolic_system.h.

◆ state_type

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::state_type = dealii::Tensor<1, problem_dimension, Number>

Storage type for a (conserved) state vector \(\boldsymbol U\).

Definition at line 338 of file hyperbolic_system.h.

◆ flux_type

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::flux_type = dealii::Tensor<1, problem_dimension, dealii::Tensor<1, dim, Number> >

Storage type for the flux \(\mathbf{f}\).

Definition at line 343 of file hyperbolic_system.h.

◆ flux_contribution_type

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::flux_contribution_type = flux_type

The storage type used for flux contributions.

Definition at line 349 of file hyperbolic_system.h.

◆ precomputed_type

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::precomputed_type = std::array<Number, n_precomputed_values>

Array type used for precomputed values.

Definition at line 389 of file hyperbolic_system.h.

◆ initial_precomputed_type

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::initial_precomputed_type = std::array<Number, n_initial_precomputed_values>

Array type used for precomputed initial values.

Definition at line 409 of file hyperbolic_system.h.

◆ StateVector

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::StateVector = Vectors:: StateVector<ScalarNumber, problem_dimension, n_precomputed_values>

A compound state vector.

Definition at line 421 of file hyperbolic_system.h.

◆ HyperbolicVector

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::HyperbolicVector = Vectors::MultiComponentVector<ScalarNumber, problem_dimension>

MulticomponentVector for storing the hyperbolic state vector:

Definition at line 427 of file hyperbolic_system.h.

◆ PrecomputedVector

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::PrecomputedVector = Vectors::MultiComponentVector<ScalarNumber, n_precomputed_values>

MulticomponentVector for storing a vector of precomputed states:

Definition at line 433 of file hyperbolic_system.h.

◆ InitialPrecomputedVector

template<int dim, typename Number >
using ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::InitialPrecomputedVector = Vectors::MultiComponentVector<ScalarNumber, n_initial_precomputed_values>

MulticomponentVector for storing a vector of precomputed initial states:

Definition at line 440 of file hyperbolic_system.h.

Constructor & Destructor Documentation

◆ HyperbolicSystemView()

template<int dim, typename Number >
ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::HyperbolicSystemView ( const HyperbolicSystem hyperbolic_system)
inline

Constructor taking a reference to the underlying HyperbolicSystem

Definition at line 137 of file hyperbolic_system.h.

Member Function Documentation

◆ view()

template<int dim, typename Number >
template<int dim2, typename Number2 >
auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::view ( ) const
inline

Create a modified view from the current one:

Definition at line 146 of file hyperbolic_system.h.

◆ equation_of_state()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE const std::string & ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::equation_of_state ( ) const
inline

Definition at line 161 of file hyperbolic_system.h.

◆ reference_density()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE ScalarNumber ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::reference_density ( ) const
inline

Definition at line 166 of file hyperbolic_system.h.

◆ vacuum_state_relaxation_small()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE ScalarNumber ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::vacuum_state_relaxation_small ( ) const
inline

Definition at line 172 of file hyperbolic_system.h.

◆ vacuum_state_relaxation_large()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE ScalarNumber ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::vacuum_state_relaxation_large ( ) const
inline

Definition at line 178 of file hyperbolic_system.h.

◆ compute_strict_bounds()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE bool ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::compute_strict_bounds ( ) const
inline

Definition at line 183 of file hyperbolic_system.h.

◆ eos_pressure()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_pressure ( const Number &  rho,
const Number &  e 
) const
inline

For a given density \(\rho\) and specific internal energy \(e\) return the pressure \(p\).

Definition at line 198 of file hyperbolic_system.h.

◆ eos_specific_internal_energy()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_specific_internal_energy ( const Number &  rho,
const Number &  p 
) const
inline

For a given density \(\rho\) and pressure \(p\) return the specific internal energy \(e\).

Definition at line 219 of file hyperbolic_system.h.

◆ eos_temperature()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_temperature ( const Number &  rho,
const Number &  e 
) const
inline

For a given density \(\rho\) and specific internal energy \(e\) return the temperature \(T\).

Definition at line 238 of file hyperbolic_system.h.

◆ eos_speed_of_sound()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_speed_of_sound ( const Number &  rho,
const Number &  e 
) const
inline

For a given density \(\rho\) and specific internal energy \(e\) return the sound speed \(a\).

Definition at line 259 of file hyperbolic_system.h.

◆ eos_interpolation_b()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE ScalarNumber ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_interpolation_b ( ) const
inline

Return the interpolatory covolume \(b_{\text{interp}}\).

Definition at line 277 of file hyperbolic_system.h.

◆ eos_interpolation_pinfty()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE ScalarNumber ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_interpolation_pinfty ( ) const
inline

Return the interpolatory reference pressure \(p_{\infty}\).

Definition at line 286 of file hyperbolic_system.h.

◆ eos_interpolation_q()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE ScalarNumber ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::eos_interpolation_q ( ) const
inline

Return the interpolatory reference specific internal energy \(q\).

Definition at line 296 of file hyperbolic_system.h.

◆ precomputation_loop()

template<int dim, typename Number >
template<typename DISPATCH , typename SPARSITY >
void ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::precomputation_loop ( unsigned int  cycle,
const DISPATCH &  dispatch_check,
const SPARSITY &  sparsity_simd,
StateVector state_vector,
unsigned int  left,
unsigned int  right 
) const

Step 0: precompute values for hyperbolic update. This routine is called within our usual loop() idiom in HyperbolicModule

◆ density()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::density ( const state_type U)
inlinestatic

For a given (2+dim dimensional) state vector U, return the density U[0]

Definition at line 1014 of file hyperbolic_system.h.

◆ filter_vacuum_density()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::filter_vacuum_density ( const Number &  rho) const
inline

Given a density rho this function returns 0 if the magniatude of rho is smaller or equal than relaxation_large * rho_cutoff. Otherwise rho is returned unmodified. Here, rho_cutoff is the reference density multiplied by eps.

Definition at line 1022 of file hyperbolic_system.h.

◆ momentum()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< 1, dim, Number > ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::momentum ( const state_type U)
inlinestatic

For a given (2+dim dimensional) state vector U, return the momentum vector [U[1], ..., U[1+dim]].

Definition at line 1036 of file hyperbolic_system.h.

◆ total_energy()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::total_energy ( const state_type U)
inlinestatic

For a given (2+dim dimensional) state vector U, return the total energy U[1+dim]

Definition at line 1047 of file hyperbolic_system.h.

◆ internal_energy()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::internal_energy ( const state_type U)
inlinestatic

For a given (2+dim dimensional) state vector U, compute and return the internal energy \(\varepsilon = (\rho e)\).

Definition at line 1055 of file hyperbolic_system.h.

◆ internal_energy_derivative()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::internal_energy_derivative ( const state_type U)
inlinestatic

For a given (2+dim dimensional) state vector U, compute and return the derivative of the internal energy \(\varepsilon = (\rho e)\).

Definition at line 1069 of file hyperbolic_system.h.

◆ surrogate_specific_entropy()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_specific_entropy ( const state_type U,
const Number &  gamma_min 
) const
inline

For a given (2+dim dimensional) state vector U, compute and return a (scaled) surrogate specific entropy

\[ e^{(\gamma_{\text{min}} - 1)s} = \frac{\rho\,(e-q)-p_{\infty}(1-b\rho)}{\rho^\gamma_{\text{min}}} (1 - b\,\rho)^{\gamma_{\text{min}} -1}. \]

Definition at line 1096 of file hyperbolic_system.h.

References ryujin::pow().

◆ surrogate_harten_entropy()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_harten_entropy ( const state_type U,
const Number &  gamma_min 
) const
inline

For a given (2+dim dimensional) state vector U, compute and return a surrogate Harten-type entropy

\[ \eta = (1-b\,\rho)^{\frac{\gamma_{\text{min}-1}}{\gamma_{\text{min}}+1}} \big(\rho^2 (e-q) - \rho p_{\infty}(1-b\,\rho)\big) ^{1/(\gamma_{\text{min}}+1)} \]

Definition at line 1116 of file hyperbolic_system.h.

References ryujin::positive_part(), and ryujin::pow().

◆ surrogate_harten_entropy_derivative()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_harten_entropy_derivative ( const state_type U,
const Number &  eta,
const Number &  gamma_min 
) const
inline

For a given (2+dim dimensional) state vector U, compute and return the derivative \(\eta'\) of the Harten-type entropy

\[ \eta = (1-b\,\rho)^{\frac{\gamma_{\text{min}-1}}{\gamma_{\text{min}}+1}} \big(\rho^2 (e-q) - \rho p_{\infty}(1-b\,\rho)\big) ^{1/(\gamma_{\text{min}}+1)} \]

Definition at line 1143 of file hyperbolic_system.h.

References ryujin::pow().

◆ surrogate_gamma()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_gamma ( const state_type U,
const Number &  p 
) const
inline

For a given (2+dim dimensional) state vector U and pressure p, compute a surrogate gamma:

\[ \gamma(\rho, e, p) = 1 + \frac{(p + p_{\infty})(1 - b \rho)} {\rho (e-q) - p_{\infty}(1-b \rho)} \]

This function is used in various places to create interpolations of the pressure.

Definition at line 1199 of file hyperbolic_system.h.

References ryujin::EulerAEOS::safe_division().

◆ surrogate_pressure()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_pressure ( const state_type U,
const Number &  gamma 
) const
inline

For a given (2+dim dimensional) state vector U and gamma gamma, compute a surrogate pressure:

\[ p(\rho, e, \gamma) = (\gamma - 1) \frac{\rho (e - q)}{1 - b \rho} -\gamma\,p_{\infty} \]

This function is the complementary function to surrogate_gamma(), meaning the following property holds true:

surrogate_gamma(U, surrogate_pressure(U, gamma)) == gamma
Number surrogate_pressure(const state_type &U, const Number &gamma) const
Number surrogate_gamma(const state_type &U, const Number &p) const

Definition at line 1218 of file hyperbolic_system.h.

References ryujin::positive_part(), and ryujin::EulerAEOS::safe_division().

◆ surrogate_speed_of_sound()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_speed_of_sound ( const state_type U,
const Number &  gamma 
) const
inline

For a given (2+dim dimensional) state vector U and gamma gamma, compute a surrogate speed of sound:

\begin{align} c^2(\rho, e, \gamma) = \frac{\gamma (p + p_\infty)}{\rho X} = \frac{\gamma (\gamma -1)[\rho (e - q) - p_\infty X]}{\rho X^2} \end{align}

Definition at line 1237 of file hyperbolic_system.h.

References ryujin::positive_part().

◆ is_admissible()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE bool ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::is_admissible ( const state_type U) const
inline

Returns whether the state U is admissible. If U is a vectorized state then U is admissible if all vectorized values are admissible.

Definition at line 1257 of file hyperbolic_system.h.

◆ prescribe_riemann_characteristic()

template<int dim, typename Number >
template<int component>
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::prescribe_riemann_characteristic ( const state_type U,
const Number &  p,
const state_type U_bar,
const Number &  p_bar,
const dealii::Tensor< 1, dim, Number > &  normal 
) const

Decomposes a given state U into Riemann invariants and then replaces the first or second Riemann characteristic from the one taken from U_bar state. Note that the U_bar state is just the prescribed dirichlet values.

◆ apply_boundary_conditions()

template<int dim, typename Number >
template<typename Lambda >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::apply_boundary_conditions ( const dealii::types::boundary_id  id,
const state_type U,
const dealii::Tensor< 1, dim, Number > &  normal,
const Lambda &  get_dirichlet_data 
) const

Apply boundary conditions.

For the compressible Euler equations we have:

  • Dirichlet boundary conditions by prescribing the return value of get_dirichlet_data() as is.
  • Slip boundary conditions where we remove the normal component of the momentum.
  • No slip boundary conditions where we set the momentum to 0.
  • "Dynamic boundary" conditions that prescribe different Riemann invariants from the return value of get_dirichlet_data() depending on the flow state (supersonic versus subsonic, outflow versus inflow).

◆ f()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::f ( const state_type U,
const Number &  p 
) const
inline

Given a state U and a pressure p compute the flux

\[ \begin{pmatrix} \textbf m \\ \textbf v\otimes \textbf m + p\mathbb{I}_d \\ \textbf v(E+p) \end{pmatrix}, \]

Definition at line 1538 of file hyperbolic_system.h.

◆ flux_contribution() [1/2]

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::flux_contribution ( const PrecomputedVector pv,
const InitialPrecomputedVector piv,
const unsigned int  i,
const state_type U_i 
) const
inline

Given a state U_i and an index i compute flux contributions.

Intended usage:

for (unsigned int i = n_internal; i < n_owned; ++i) {
// ...
const auto flux_i = flux_contribution(precomputed..., i, U_i);
for (unsigned int col_idx = 1; col_idx < row_length; ++col_idx) {
// ...
const auto flux_j = flux_contribution(precomputed..., js, U_j);
const auto flux_ij = flux_divergence(flux_i, flux_j, c_ij);
}
}
flux_contribution_type flux_contribution(const PrecomputedVector &pv, const InitialPrecomputedVector &piv, const unsigned int i, const state_type &U_i) const
state_type flux_divergence(const flux_contribution_type &flux_i, const flux_contribution_type &flux_j, const dealii::Tensor< 1, dim, Number > &c_ij) const

For the Euler equations we simply compute f(U_i).

Definition at line 1560 of file hyperbolic_system.h.

◆ flux_contribution() [2/2]

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::flux_contribution ( const PrecomputedVector pv,
const InitialPrecomputedVector piv,
const unsigned int *  js,
const state_type U_j 
) const
inline

Definition at line 1574 of file hyperbolic_system.h.

◆ flux_divergence()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::flux_divergence ( const flux_contribution_type flux_i,
const flux_contribution_type flux_j,
const dealii::Tensor< 1, dim, Number > &  c_ij 
) const
inline

Given flux contributions flux_i and flux_j compute the flux (-f(U_i) - f(U_j)

Definition at line 1588 of file hyperbolic_system.h.

References ryujin::add(), and ryujin::contract().

◆ high_order_flux_divergence()

template<int dim, typename Number >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::high_order_flux_divergence ( const flux_contribution_type flux_i,
const flux_contribution_type flux_j,
const dealii::Tensor< 1, dim, Number > &  c_ij 
) const
delete

◆ nodal_source() [1/2]

template<int dim, typename Number >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::nodal_source ( const PrecomputedVector pv,
const unsigned int  i,
const state_type U_i,
const ScalarNumber  tau 
) const
delete

◆ nodal_source() [2/2]

template<int dim, typename Number >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::nodal_source ( const PrecomputedVector pv,
const unsigned int *  js,
const state_type U_j,
const ScalarNumber  tau 
) const
delete

◆ expand_state()

template<int dim, typename Number >
template<typename ST >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::expand_state ( const ST &  state) const

Given a state vector associated with a different spatial dimensions than the current one, return an "expanded" version of the state vector associated with dim spatial dimensions where the momentum vector of the conserved state state is expaned with zeros to a total length of dim entries.

Note
dim has to be larger or equal than the dimension of the ST vector.

◆ from_initial_state()

template<int dim, typename Number >
template<typename ST >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::from_initial_state ( const ST &  initial_state) const

Given an initial state [rho, u_1, ..., u_d, p] return a conserved state [rho, m_1, ..., m_d, E]. Most notably, the specific equation of state oracle is queried to convert the pressure value into a specific internal energy.

Note
This function is used to conveniently convert (user provided) primitive initial states with pressure values to a conserved state in the EulerInitialStateLibrary. As such, this function is implemented in the Euler::HyperbolicSystem and EulerAEOS::HyperbolicSystem classes.

◆ from_primitive_state()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::from_primitive_state ( const state_type primitive_state) const
inline

Given a primitive state [rho, u_1, ..., u_d, e] return a conserved state.

Definition at line 1640 of file hyperbolic_system.h.

◆ to_primitive_state()

template<int dim, typename Number >
DEAL_II_ALWAYS_INLINE auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::to_primitive_state ( const state_type state) const
inline

Given a conserved state return a primitive state [rho, u_1, ..., u_d, e]

Definition at line 1663 of file hyperbolic_system.h.

◆ apply_galilei_transform()

template<int dim, typename Number >
template<typename Lambda >
state_type ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::apply_galilei_transform ( const state_type state,
const Lambda &  lambda 
) const

Transform the current state according to a given operator lambda acting on a dim dimensional momentum (or velocity) vector.

Member Data Documentation

◆ have_gamma

template<int dim, typename Number >
constexpr bool ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::have_gamma = false
staticconstexpr

constexpr boolean used in the EulerInitialStates namespace

Definition at line 306 of file hyperbolic_system.h.

◆ have_eos_interpolation_b

template<int dim, typename Number >
constexpr bool ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::have_eos_interpolation_b = true
staticconstexpr

constexpr boolean used in the EulerInitialStates namespace

Definition at line 311 of file hyperbolic_system.h.

◆ problem_dimension

template<int dim, typename Number >
constexpr unsigned int ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::problem_dimension = 2 + dim
staticconstexpr

The dimension of the state space.

Definition at line 333 of file hyperbolic_system.h.

◆ component_names

template<int dim, typename Number >
const auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::component_names
inlinestatic
Initial value:
=
[]() -> std::array<std::string, problem_dimension> {
if constexpr (dim == 1)
return {"rho", "m", "E"};
else if constexpr (dim == 2)
return {"rho", "m_1", "m_2", "E"};
else if constexpr (dim == 3)
return {"rho", "m_1", "m_2", "m_3", "E"};
__builtin_trap();
}()

An array holding all component names of the conserved state as a string.

Definition at line 355 of file hyperbolic_system.h.

◆ primitive_component_names

template<int dim, typename Number >
const auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::primitive_component_names
inlinestatic
Initial value:
=
[]() -> std::array<std::string, problem_dimension> {
if constexpr (dim == 1)
return {"rho", "v", "e"};
else if constexpr (dim == 2)
return {"rho", "v_1", "v_2", "e"};
else if constexpr (dim == 3)
return {"rho", "v_1", "v_2", "v_3", "e"};
__builtin_trap();
}()

An array holding all component names of the primitive state as a string.

Definition at line 370 of file hyperbolic_system.h.

◆ n_precomputed_values

template<int dim, typename Number >
constexpr unsigned int ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::n_precomputed_values = 4
staticconstexpr

The number of precomputed values.

Definition at line 384 of file hyperbolic_system.h.

◆ precomputed_names

template<int dim, typename Number >
const auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::precomputed_names
inlinestatic
Initial value:
=
std::array<std::string, n_precomputed_values>{
{"p",
"surrogate_gamma_min",
"surrogate_specific_entropy",
"surrogate_harten_entropy"}}

An array holding all component names of the precomputed values.

Definition at line 394 of file hyperbolic_system.h.

◆ n_initial_precomputed_values

template<int dim, typename Number >
constexpr unsigned int ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::n_initial_precomputed_values = 0
staticconstexpr

The number of precomputed initial values.

Definition at line 404 of file hyperbolic_system.h.

◆ initial_precomputed_names

template<int dim, typename Number >
const auto ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::initial_precomputed_names
inlinestatic
Initial value:
=
std::array<std::string, n_initial_precomputed_values>{}

An array holding all component names of the precomputed values.

Definition at line 415 of file hyperbolic_system.h.

◆ n_precomputation_cycles

template<int dim, typename Number >
constexpr unsigned int ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::n_precomputation_cycles = 2
staticconstexpr

The number of precomputation cycles.

Definition at line 453 of file hyperbolic_system.h.

◆ have_high_order_flux

template<int dim, typename Number >
constexpr bool ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::have_high_order_flux = false
staticconstexpr

The low-order and high-order fluxes are the same:

Definition at line 714 of file hyperbolic_system.h.

◆ have_source_terms

template<int dim, typename Number >
constexpr bool ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::have_source_terms = false
staticconstexpr

We do not have source terms

Definition at line 727 of file hyperbolic_system.h.


The documentation for this class was generated from the following file: