ryujin 2.5.0 revision 3a6c8d57210175dea14d8116e1fe878f349f8c1c
Loading...
Searching...
No Matches
Classes | Enumerations
Interfaces
Collaboration diagram for Interfaces:

Classes

class  ryujin::Interface::Discretization< dim >
 
class  ryujin::Interface::Equation
 
class  ryujin::Interface::HyperbolicModule< dim, Number >
 
class  ryujin::Interface::HyperbolicSystem
 
class  ryujin::Interface::InitialValues< dim, Number >
 
class  ryujin::Interface::MeshAdaptor< dim, Number >
 
class  ryujin::Restart
 
class  ryujin::Correction
 
class  ryujin::Interface::OfflineData< dim, Number >
 
class  ryujin::Interface::ParabolicModule< dim, Number >
 
class  ryujin::Interface::ParabolicSystem
 
class  ryujin::Interface::Postprocessor< dim, Number >
 
class  ryujin::Interface::Simulation< dim, Number >
 
class  ryujin::Interface::SolutionTransfer< dim, Number >
 
class  ryujin::Interface::System
 
class  ryujin::Interface::TimeIntegrator< dim, Number >
 

Enumerations

enum  ryujin::Boundary : dealii::types::boundary_id {
  ryujin::do_nothing = 0 , ryujin::periodic = 1 , ryujin::slip = 2 , ryujin::no_slip = 3 ,
  ryujin::dirichlet = 4 , ryujin::dynamic = 5 , ryujin::dirichlet_momentum = 6 , ryujin::dirichlet_velocity = 7
}
 
enum class  ryujin::Ansatz {
  ryujin::Ansatz::cg_q1 , ryujin::Ansatz::cg_q2 , ryujin::Ansatz::cg_q3 , ryujin::Ansatz::dg_q1 ,
  ryujin::Ansatz::dg_q2 , ryujin::Ansatz::dg_q3
}
 
enum class  ryujin::IDViolationStrategy : std::uint8_t { ryujin::IDViolationStrategy::warn , ryujin::IDViolationStrategy::raise_exception }
 

Detailed Description

Abstract base classes in namespace ryujin::Interface that hide the equation dependent types from the driver and the discretization (include/ryujin/interface).

Enumeration Type Documentation

◆ Boundary

enum ryujin::Boundary : dealii::types::boundary_id

An enum of type dealii::types::boundary_id that provides an mnemonic for prescribing different boundary conditions on faces.

Note
In deal.II boundary ids are prescribed on faces. However, in our stencil-based method we need such an information for individual boundary degrees of freedom. Thus, the face boundary indicator has to be translated to individual degrees of freedom which happens in OfflineData::prepare() when constructing the OfflineData::boundary_map_ object.
OfflineData::boundary_map_ is a std::vector that stores all encountered boundary conditions for an individual degree of freedom. The individual algebraic constraint is applied in no particular order. It is thus important to ensure that neighboring boundary conditions, are compatible. For example, inflow conditions prescribed via a Boundary::dirichlet face neighboring a Boundary::no_slip face have to ensure that they prescribe a state compatible with the no slip condition, etc.
Data structures in OfflineData are initialized with the ensemble subrange communicator stored in MPIEnsemble.
Enumerator
do_nothing 

The "do nothing" outflow boundary condition: no special treatment of the boundary degree of freedom. For stability reasons it is important to ensure that this boundary id is only prescribed on degrees of freedom with a velocity vector pointing outward of the computational domain and coming from the interior of the domain.

periodic 

Prescribe periodic boundary conditions by identifying opposing degrees of freedom. This currently requires a mesh with "standard orientation".

slip 

On (free) slip boundary degrees of freedom we enforce a vanishing normal component of the momentum in the Euler module. This is done by explicitly removing the normal component of the momentum for the degree of freedom at the end of TimeStep::euler_step(). In the dissipation module \(v\cdot n\) is enforced strongly which leads to a natural boundary condition on the symmetric stress tensor: \(\tau\cdot\mathbb{S}(v)\cdot\vec n\).

no_slip 

On no-slip boundary degrees of freedom we enforce a vanishing normal component of the momentum in the Euler module. This is done by explicitly removing the normal component of the momentum for the degree of freedom at the end of TimeStep::euler_step(). In the dissipation module a vanishing velocity \(v=0\) is enforced strongly.

dirichlet 

On degrees of freedom marked as Dirichlet boundary we reset the state of the degree of freedom to the value of InitialData::initial_state(). Such Dirichlet conditions can only be meaningfully enforced as inflow conditions, i.e., the velocity vector associated with a Dirichlet boundary degree of freedom has to point into the computational domain, and no "backward traveling" shock front or other flow feature must reach a Dirichlet boundary degree of freedom during the computation.

dynamic 

On degrees of freedom marked as a "dynamic" boundary we distinguish four cases (for the compressible Euler equations or related PDEs):

  • supersonic inflow, where we reset the state of a boundary degree of freedom to the value returned by InitialData::initial_state(). This is equivalent to "dirichlet" boundary conditions.
  • supersonic outflow, where we do nothing, similarly to the "do nothing" boundary conditions.
  • in case of subsonic in-, or outflow the state of a boundary degree of freedom is translated into "Riemann characteristics" and the values of all incoming characteristics are replaced by the corresponding value of the state returned by InitialData::initial_state().
dirichlet_momentum 

For the Euler and shallow Water equations: On degrees of freedom marked as "dirichlet momentum" boundary, we reset only the momentum of the degree of freedom to the value of InitialData::initial_state(). Where appropriate, we keep water height h, density rho, and internal energy e of the boundary state. Such conditions are used, for example, in many steady state problems for the shallow water equations with inflow conditions.

dirichlet_velocity 

For the Euler and shallow Water equations: On degrees of freedom marked as "dirichlet velocity" boundary, we reset only the velocity of the degree of freedom to the value of InitialData::initial_state(). Where appropriate, we keep water height h, density rho, and internal energy e of the boundary state.

Definition at line 55 of file discretization.h.

◆ Ansatz

enum class ryujin::Ansatz
strong

An enum class for setting the finite element ansatz.

Enumerator
cg_q1 

cG Q1: continuous bi- (tri-) linear Lagrange elements

cg_q2 

cG Q2: continuous bi- (tri-) quadratic Lagrange elements

cg_q3 

cG Q3: continuous bi- (tri-) cubic Lagrange elements

dg_q1 

dG Q1: discontinuous bi- (tri-) linear Lagrange elements

dg_q2 

dG Q2: discontinuous bi- (tri-) quadratic Lagrange elements

dg_q3 

dG Q3: discontinuous bi- (tri-) cubic Lagrange elements

Definition at line 149 of file discretization.h.

◆ IDViolationStrategy

enum class ryujin::IDViolationStrategy : std::uint8_t
strong

An enum controlling the behavior on detection of an invariant domain or CFL violation. Such a case might occur for either aggressive CFL numbers > 1, and/or later stages in the Runge Kutta scheme when the time step tau is prescribed.

The invariant domain violation is detected in the limiter and implies that the low-order update itself lies outside the invariant domain.

A "CFL violation" occurs if the computed tau_max of a substep is significantly larger than the previously computed time step size tau with which we perform the update.

Note
Data structures in HyperbolicModule are initialized with the ensemble subrange communicator stored in MPIEnsemble. However, the time step size constraint (i.e. tau_max) is synchronized over the entire global communicator.
Enumerator
warn 

Warn about an invariant domain violation but take no further action.

raise_exception 

Raise a Restart exception on domain violation. This exception can be caught in TimeIntegrator and various different actions (adapt CFL and retry) can be taken depending on chosen strategy.

Definition at line 42 of file module.h.