ryujin 2.1.1 revision 336b16a72e829721302c626ec7071b92032b8248
Public Member Functions | List of all members
ryujin::Skeleton::HyperbolicSystemView< dim, Number > Class Template Reference

#include <source/skeleton/hyperbolic_system.h>

Public Member Functions

 HyperbolicSystemView (const HyperbolicSystem &hyperbolic_system)
 
template<int dim2, typename Number2 >
auto view () const
 
Computing derived physical quantities
bool is_admissible (const state_type &) const
 
Special functions for boundary states
template<typename Lambda >
state_type apply_boundary_conditions (const dealii::types::boundary_id, const state_type &U, const dealii::Tensor< 1, dim, Number > &, const Lambda &) const
 
State transformations
template<typename ST >
state_type expand_state (const ST &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 &) const
 

Types and constexpr constants

using ScalarNumber = typename get_value_type< Number >::type
 
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 PrecomputedVector = Vectors::MultiComponentVector< ScalarNumber, n_precomputed_values >
 
using InitialPrecomputedVector = Vectors::MultiComponentVector< ScalarNumber, n_initial_precomputed_values >
 
static constexpr unsigned int problem_dimension = 1
 
static const auto component_names
 
static const auto primitive_component_names
 
static constexpr unsigned int n_precomputed_values = 0
 
static const auto precomputed_names
 
static constexpr unsigned int n_initial_precomputed_values = 0
 
static const auto initial_precomputed_names
 

Computing precomputed quantities

static constexpr unsigned int n_precomputation_cycles = 0
 
template<typename DISPATCH , typename SPARSITY >
void precomputation_loop (unsigned int, const DISPATCH &dispatch_check, const SPARSITY &, StateVector &, unsigned int, unsigned int) const =delete
 

Flux computations

static constexpr bool have_high_order_flux = false
 
flux_contribution_type flux_contribution (const PrecomputedVector &, const InitialPrecomputedVector &, const unsigned int, const state_type &) const
 
flux_contribution_type flux_contribution (const PrecomputedVector &, const InitialPrecomputedVector &, const unsigned int *, const state_type &) const
 
state_type flux_divergence (const flux_contribution_type &, const flux_contribution_type &, const dealii::Tensor< 1, dim, Number > &) const
 
state_type high_order_flux_divergence (const flux_contribution_type &, const flux_contribution_type &, const dealii::Tensor< 1, dim, Number > &) const =delete
 

Computing stencil source terms

static constexpr bool have_source_terms = false
 
state_type nodal_source (const PrecomputedVector &, const unsigned int, const state_type &, const ScalarNumber) const =delete
 
state_type nodal_source (const PrecomputedVector &, const unsigned int *, const state_type &, const ScalarNumber) const =delete
 

Detailed Description

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

A view on the HyperbolicSystem 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.

Definition at line 74 of file hyperbolic_system.h.

Member Typedef Documentation

◆ ScalarNumber

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

The underlying scalar number type.

Definition at line 109 of file hyperbolic_system.h.

◆ state_type

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

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

Definition at line 119 of file hyperbolic_system.h.

◆ flux_type

template<int dim, typename Number >
using ryujin::Skeleton::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 124 of file hyperbolic_system.h.

◆ flux_contribution_type

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

The storage type used for flux contributions.

Definition at line 130 of file hyperbolic_system.h.

◆ precomputed_type

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

Array type used for precomputed values.

Definition at line 170 of file hyperbolic_system.h.

◆ initial_precomputed_type

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

Array type used for precomputed initial values.

Definition at line 186 of file hyperbolic_system.h.

◆ StateVector

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

A compound state vector.

Definition at line 198 of file hyperbolic_system.h.

◆ PrecomputedVector

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

MulticomponentVector for storing a vector of precomputed states:

Definition at line 204 of file hyperbolic_system.h.

◆ InitialPrecomputedVector

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

MulticomponentVector for storing a vector of precomputed initial states:

Definition at line 211 of file hyperbolic_system.h.

Constructor & Destructor Documentation

◆ HyperbolicSystemView()

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

Constructor taking a reference to the underlying HyperbolicSystem

Definition at line 81 of file hyperbolic_system.h.

Member Function Documentation

◆ view()

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

Create a modified view from the current one:

Definition at line 90 of file hyperbolic_system.h.

◆ precomputation_loop()

template<int dim, typename Number >
template<typename DISPATCH , typename SPARSITY >
void ryujin::Skeleton::HyperbolicSystemView< dim, Number >::precomputation_loop ( unsigned int  ,
const DISPATCH &  dispatch_check,
const SPARSITY &  ,
StateVector ,
unsigned int  ,
unsigned int   
) const
delete

Precompute values for hyperbolic update. This routine is called within our usual loop() idiom in HyperbolicModule

◆ is_admissible()

template<int dim, typename Number >
bool ryujin::Skeleton::HyperbolicSystemView< dim, Number >::is_admissible ( const state_type ) 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 249 of file hyperbolic_system.h.

◆ apply_boundary_conditions()

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

Apply boundary conditions.

Definition at line 264 of file hyperbolic_system.h.

◆ flux_contribution() [1/2]

template<int dim, typename Number >
flux_contribution_type ryujin::Skeleton::HyperbolicSystemView< dim, Number >::flux_contribution ( const PrecomputedVector ,
const InitialPrecomputedVector ,
const unsigned int  ,
const state_type  
) 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);
}
}
state_type flux_divergence(const flux_contribution_type &, const flux_contribution_type &, const dealii::Tensor< 1, dim, Number > &) const
flux_contribution_type flux_contribution(const PrecomputedVector &, const InitialPrecomputedVector &, const unsigned int, const state_type &) const

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

Definition at line 299 of file hyperbolic_system.h.

◆ flux_contribution() [2/2]

template<int dim, typename Number >
flux_contribution_type ryujin::Skeleton::HyperbolicSystemView< dim, Number >::flux_contribution ( const PrecomputedVector ,
const InitialPrecomputedVector ,
const unsigned int *  ,
const state_type  
) const
inline

Definition at line 308 of file hyperbolic_system.h.

◆ flux_divergence()

template<int dim, typename Number >
state_type ryujin::Skeleton::HyperbolicSystemView< dim, Number >::flux_divergence ( const flux_contribution_type ,
const flux_contribution_type ,
const dealii::Tensor< 1, dim, Number > &   
) const
inline

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

Definition at line 321 of file hyperbolic_system.h.

◆ high_order_flux_divergence()

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

◆ nodal_source() [1/2]

template<int dim, typename Number >
state_type ryujin::Skeleton::HyperbolicSystemView< dim, Number >::nodal_source ( const PrecomputedVector ,
const unsigned int  ,
const state_type ,
const  ScalarNumber 
) const
delete

◆ nodal_source() [2/2]

template<int dim, typename Number >
state_type ryujin::Skeleton::HyperbolicSystemView< dim, Number >::nodal_source ( const PrecomputedVector ,
const unsigned int *  ,
const state_type ,
const  ScalarNumber 
) const
delete

◆ expand_state()

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

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.

Definition at line 374 of file hyperbolic_system.h.

◆ from_primitive_state()

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

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

Definition at line 383 of file hyperbolic_system.h.

◆ to_primitive_state()

template<int dim, typename Number >
state_type ryujin::Skeleton::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, p]

Definition at line 392 of file hyperbolic_system.h.

◆ apply_galilei_transform()

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

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

Definition at line 403 of file hyperbolic_system.h.

Member Data Documentation

◆ problem_dimension

template<int dim, typename Number >
constexpr unsigned int ryujin::Skeleton::HyperbolicSystemView< dim, Number >::problem_dimension = 1
staticconstexpr

The dimension of the state space.

Definition at line 114 of file hyperbolic_system.h.

◆ component_names

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

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

Definition at line 136 of file hyperbolic_system.h.

◆ primitive_component_names

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

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

Definition at line 151 of file hyperbolic_system.h.

◆ n_precomputed_values

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

The number of precomputed values.

Definition at line 165 of file hyperbolic_system.h.

◆ precomputed_names

template<int dim, typename Number >
const auto ryujin::Skeleton::HyperbolicSystemView< dim, Number >::precomputed_names
inlinestatic
Initial value:
=
std::array<std::string, n_precomputed_values>{}

An array holding all component names of the precomputed values.

Definition at line 175 of file hyperbolic_system.h.

◆ n_initial_precomputed_values

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

The number of precomputed initial values.

Definition at line 181 of file hyperbolic_system.h.

◆ initial_precomputed_names

template<int dim, typename Number >
const auto ryujin::Skeleton::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 192 of file hyperbolic_system.h.

◆ n_precomputation_cycles

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

The number of precomputation cycles.

Definition at line 224 of file hyperbolic_system.h.

◆ have_high_order_flux

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

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

Definition at line 331 of file hyperbolic_system.h.

◆ have_source_terms

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

We do not have source terms

Definition at line 345 of file hyperbolic_system.h.


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