ryujin 2.5.0 revision c64172211cf21344cb9b9b0f3a1266aa6400d392
Loading...
Searching...
No Matches
Classes | Enumerations
Mesh, offline data, and time integration
Collaboration diagram for Mesh, offline data, and time integration:

Classes

class  ryujin::Discretization< dim >
 
class  ryujin::MeshAdaptor< dim, Number >
 
class  ryujin::OfflineData< dim, Number >
 
class  ryujin::AssemblyScratchData< dim >
 
class  ryujin::AssemblyCopyData< dim, Number >
 
class  ryujin::TimeIntegrator< dim, Number >
 
class  ryujin::TransfiniteInterpolationManifold< dim, spacedim >
 

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::MeshType { ryujin::MeshType::serial , ryujin::MeshType::parallel_shared , ryujin::MeshType::parallel_distributed , ryujin::MeshType::parallel_fullydistributed }
 
enum class  ryujin::AdaptationStrategy { ryujin::AdaptationStrategy::global_refinement , ryujin::AdaptationStrategy::random_adaptation , ryujin::AdaptationStrategy::smoothness_indicators }
 
enum class  ryujin::MarkingStrategy { ryujin::MarkingStrategy::fixed_threshold }
 
enum class  ryujin::CFLRecoveryStrategy { ryujin::CFLRecoveryStrategy::none , ryujin::CFLRecoveryStrategy::bang_bang_control , ryujin::CFLRecoveryStrategy::cruise_control }
 
enum class  ryujin::TimeSteppingScheme {
  ryujin::TimeSteppingScheme::ssprk_22 , ryujin::TimeSteppingScheme::ssprk_33 , ryujin::TimeSteppingScheme::erk_11 , ryujin::TimeSteppingScheme::erk_22 ,
  ryujin::TimeSteppingScheme::erk_33 , ryujin::TimeSteppingScheme::erk_43 , ryujin::TimeSteppingScheme::erk_54 , ryujin::TimeSteppingScheme::strang_ssprk_33_cn ,
  ryujin::TimeSteppingScheme::strang_erk_33_cn , ryujin::TimeSteppingScheme::strang_erk_43_cn , ryujin::TimeSteppingScheme::imex_11 , ryujin::TimeSteppingScheme::imex_22 ,
  ryujin::TimeSteppingScheme::imex_33
}
 

Detailed Description

The Discretization class holding the triangulation and finite element, the OfflineData class holding the precomputed matrices and sparsity patterns, the MeshAdaptor, and the TimeIntegrator (include/ryujin/discretization).

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 59 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 153 of file discretization.h.

◆ MeshType

enum class ryujin::MeshType
strong

An enum class for setting the type of Triangulation that should be constructed.

Enumerator
serial 

Use serial dealii::Triangulation<dim>

parallel_shared 

Use parallel dealii::parallel::shared::Triangulation<dim>

parallel_distributed 

Use parallel dealii::parallel::distributed::Triangulation<dim>

parallel_fullydistributed 

Use parallel dealii::parallel::fullydistributed::Triangulation<dim>

Definition at line 203 of file discretization.h.

◆ AdaptationStrategy

enum class ryujin::AdaptationStrategy
strong

Controls the spatial mesh adaptation strategy.

Enumerator
global_refinement 

Perform a uniform global refinement.

random_adaptation 

Perform random refinement and coarsening with a deterministic Mersenne Twister and a chosen seed. This refinement strategy is only useful for debugging and testing.

smoothness_indicators 

Perform local refinement and coarsening based on smoothness indicators.

Definition at line 29 of file mesh_adaptor.h.

◆ MarkingStrategy

enum class ryujin::MarkingStrategy
strong

Controls the marking strategy used for mesh adaptation. This configuration option is ignored for the uniform global refinement strategy.

Enumerator
fixed_threshold 

Refine and coarsen according to a fixed tolerance normalized according to the difference between the maximal and minimal attained values for the chosen refinement indicators.

Definition at line 55 of file mesh_adaptor.h.

◆ CFLRecoveryStrategy

enum class ryujin::CFLRecoveryStrategy
strong

Controls the chosen invariant domain / CFL recovery strategy.

Enumerator
none 

Step with the chosen "cfl max" value and do nothing in case an invariant domain and or CFL condition violation is detected.

bang_bang_control 

Step with the chosen "cfl max" value and, in case an invariant domain or "CFL condition" violation is detected, the time step is repeated with "cfl min". If this is unsuccessful as well, a warning is emitted.

cruise_control 

Adaptive strategy that similarly to "bang bang control" first steps with the chosen "cfl max" value, and, in case of an invariant domain violation or a "CFL condition" violation restarts the time step using a tau_max hint coming from the sub step where we encountered a problem. This is the default strategy.

Definition at line 34 of file time_integrator.h.

◆ TimeSteppingScheme

enum class ryujin::TimeSteppingScheme
strong

Controls the chosen time-stepping scheme.

Enumerator
ssprk_22 

The strong stability preserving Runge Kutta method of order 2, SSPRK(2,2;1/2), with the following butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ \tfrac{1}{2} & \tfrac{1}{2} & 0 \\ \hline 1 & 1 & 0 \end{array} \end{align*}

ssprk_33 

The strong stability preserving Runge Kutta method of order 3, SSPRK(3,3;1/3), with the following butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ 1 & 1 & 0 \\ \tfrac{1}{2} & \tfrac{1}{4} & \tfrac{1}{4} & 0\\ \hline 1 & \tfrac{1}{6} & \tfrac{1}{6} & \tfrac{2}{3} \end{array} \end{align*}

erk_11 

The explicit Runge-Kutta method RK(1,1;1), aka a simple, forward Euler step.

erk_22 

The explicit Runge-Kutta method RK(2,2;1) with the butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ \tfrac{1}{2} & \tfrac{1}{2} & 0 \\ \hline 1 & 0 & 1 \end{array} \end{align*}

erk_33 

The explicit Runge-Kutta method RK(3,3;1) with the butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ \tfrac{1}{3} & \tfrac{1}{3} & 0 \\ \tfrac{2}{3} & 0 & \tfrac{2}{3} & 0 \\ \hline 1 & \tfrac{1}{4} & 0 & \tfrac{3}{4} \end{array} \end{align*}

erk_43 

The explicit Runge-Kutta method RK(4,3;1) with the butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ \tfrac{1}{4} & \tfrac{1}{4} & 0 \\ \tfrac{1}{2} & 0 & \tfrac{1}{2} & 0 \\ \tfrac{3}{4} & 0 & \tfrac{1}{4} & \tfrac{1}{2} & 0 \\ \hline 1 & 0 & \tfrac{2}{3} & -\tfrac{1}{3} & \tfrac{2}{3} \end{array} \end{align*}

erk_54 

The explicit Runge-Kutta method RK(5,4;1) with the butcher tableau TODO

strang_ssprk_33_cn 

A Strang split using ssprk 33 for the hyperbolic subproblem and Crank-Nicolson for the parabolic subproblem

strang_erk_33_cn 

A Strang split using erk 33 for the hyperbolic subproblem and Crank-Nicolson for the parabolic subproblem

strang_erk_43_cn 

A Strang split using erk 43 for the hyperbolic subproblem and Crank-Nicolson for the parabolic subproblem

imex_11 

A Euler IMEX splitting. This is the low order IMEX method: it performs a forward Euler time step for the hyperbolic subproblem and then a backward Euler time step for the parabolic subproblem.

imex_22 

A second order implicit-explicit method. It uses the explicit midpoint rule with Butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ \tfrac{1}{2} & \tfrac{1}{2} & 0 \\ 1 & 0 & 1 & 0 \end{array} \end{align*}

to solve the hyperbolic subproblem, and a two-stage Crank-Nicolson type diagonally implicit Runge-Kutta scheme with Butcher tableau

\begin{align*} \begin{array}{c|ccc} 0 & 0 \\ \tfrac{1}{2} & 0 & \tfrac{1}{2} \\ 1 & \tfrac{1}{2} & \tfrac{1}{2} & 0 \end{array} \end{align*}

to solve the parabolic subproblem. Each of the two stages consists of one explicit hyperbolic step and one implicit parabolic step with step size \(\tau / 2\).

imex_33 

The third order implicit-explicit method IMEX(3, 3; 1), see [7], Section 4.3. It uses Heun's third order explicit Runge-Kutta scheme with Butcher tableau

\begin{align*} \begin{array}{c|cccc} 0 & 0 \\ \tfrac{1}{3} & \tfrac{1}{3} & 0 \\ \tfrac{2}{3} & 0 & \tfrac{2}{3} & 0 \\ 1 & \tfrac{1}{4} & 0 & \tfrac{3}{4} & 0 \end{array} \end{align*}

to solve the hyperbolic subproblem, and a three-stage diagonally implicit Runge-Kutta scheme with Butcher tableau

\begin{align*} \begin{array}{c|cccc} 0 & 0 \\ \tfrac{1}{3} & \tfrac{1}{3} - \gamma & \gamma \\ \tfrac{2}{3} & \gamma & \tfrac{2}{3} - 2 \gamma & \gamma \\ 1 & \tfrac{1}{4} & 0 & \tfrac{3}{4} & 0 \end{array} \end{align*}

with \(\gamma = \tfrac{1}{2} + \tfrac{1}{2\sqrt{3}}\) to solve the parabolic subproblem. Each of the three stages consists of one explicit hyperbolic step and one implicit parabolic step with step size \(\tau / 3\).

Definition at line 65 of file time_integrator.h.