ryujin 2.1.1 revision d0a94ad2ccc0c4c2e8c2485c52b06b90e2fc9853
Public Types | Public Member Functions | Static Public Attributes | List of all members
ryujin::TimeIntegrator< Description, dim, Number > Class Template Referencefinal

#include <source/time_integrator.h>

Inheritance diagram for ryujin::TimeIntegrator< Description, dim, Number >:
Inheritance graph
[legend]
Collaboration diagram for ryujin::TimeIntegrator< Description, dim, Number >:
Collaboration graph
[legend]

Public Types

using HyperbolicSystem = typename Description::HyperbolicSystem
 
using ParabolicSystem = typename Description::ParabolicSystem
 
using View = typename Description::template HyperbolicSystemView< dim, Number >
 
using vector_type = MultiComponentVector< Number, problem_dimension >
 
using precomputed_type = MultiComponentVector< Number, n_precomputed_values >
 

Public Member Functions

 TimeIntegrator (const MPI_Comm &mpi_communicator, std::map< std::string, dealii::Timer > &computing_timer, const OfflineData< dim, Number > &offline_data, const HyperbolicModule< Description, dim, Number > &hyperbolic_module, const ParabolicModule< Description, dim, Number > &parabolic_module, const std::string &subsection="/TimeIntegrator")
 
void prepare ()
 

Static Public Attributes

static constexpr unsigned int problem_dimension = View::problem_dimension
 
static constexpr unsigned int n_precomputed_values
 

Functions for performing explicit time steps

Number step (vector_type &U, Number t)
 
auto & time_stepping_scheme () const
 
auto & efficiency () const
 
Number step_ssprk_22 (vector_type &U, Number t)
 
Number step_ssprk_33 (vector_type &U, Number t)
 
Number step_erk_11 (vector_type &U, Number t)
 
Number step_erk_22 (vector_type &U, Number t)
 
Number step_erk_33 (vector_type &U, Number t)
 
Number step_erk_43 (vector_type &U, Number t)
 
Number step_erk_54 (vector_type &U, Number t)
 
Number step_strang_ssprk_33_cn (vector_type &U, Number t)
 
Number step_strang_erk_33_cn (vector_type &U, Number t)
 
Number step_strang_erk_43_cn (vector_type &U, Number t)
 

Detailed Description

template<typename Description, int dim, typename Number = double>
class ryujin::TimeIntegrator< Description, dim, Number >

The TimeIntegrator class implements IMEX timestepping strategies based on explicit and diagonally-implicit Runge Kutta schemes.

Definition at line 172 of file time_integrator.h.

Member Typedef Documentation

◆ HyperbolicSystem

template<typename Description , int dim, typename Number = double>
using ryujin::TimeIntegrator< Description, dim, Number >::HyperbolicSystem = typename Description::HyperbolicSystem

Definition at line 178 of file time_integrator.h.

◆ ParabolicSystem

template<typename Description , int dim, typename Number = double>
using ryujin::TimeIntegrator< Description, dim, Number >::ParabolicSystem = typename Description::ParabolicSystem

Definition at line 183 of file time_integrator.h.

◆ View

template<typename Description , int dim, typename Number = double>
using ryujin::TimeIntegrator< Description, dim, Number >::View = typename Description::template HyperbolicSystemView<dim, Number>

Definition at line 188 of file time_integrator.h.

◆ vector_type

template<typename Description , int dim, typename Number = double>
using ryujin::TimeIntegrator< Description, dim, Number >::vector_type = MultiComponentVector<Number, problem_dimension>

Typedef for a MultiComponentVector storing the state U.

Definition at line 205 of file time_integrator.h.

◆ precomputed_type

template<typename Description , int dim, typename Number = double>
using ryujin::TimeIntegrator< Description, dim, Number >::precomputed_type = MultiComponentVector<Number, n_precomputed_values>

Typedef for a MultiComponentVector storing precomputed values.

Definition at line 210 of file time_integrator.h.

Constructor & Destructor Documentation

◆ TimeIntegrator()

template<typename Description , int dim, typename Number >
ryujin::TimeIntegrator< Description, dim, Number >::TimeIntegrator ( const MPI_Comm &  mpi_communicator,
std::map< std::string, dealii::Timer > &  computing_timer,
const OfflineData< dim, Number > &  offline_data,
const HyperbolicModule< Description, dim, Number > &  hyperbolic_module,
const ParabolicModule< Description, dim, Number > &  parabolic_module,
const std::string &  subsection = "/TimeIntegrator< Description, dim, Number >" 
)

Member Function Documentation

◆ prepare()

template<typename Description , int dim, typename Number >
void ryujin::TimeIntegrator< Description, dim, Number >::prepare

Prepare time integration. A call to prepare() allocates temporary storage and is necessary before any of the following time-stepping functions can be called.

Definition at line 62 of file time_integrator.template.h.

References ryujin::erk_11, ryujin::erk_22, ryujin::erk_33, ryujin::erk_43, ryujin::erk_54, ryujin::ScalarConservation::ParabolicSystem::is_identity, ryujin::ssprk_22, ryujin::ssprk_33, ryujin::strang_erk_33_cn, ryujin::strang_erk_43_cn, and ryujin::strang_ssprk_33_cn.

◆ step()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step ( vector_type U,
Number  t 
)

Given a reference to a previous state vector U performs an explicit time step (and store the result in U). The function returns the chosen time step size tau.

Note
This function switches between different Runge-Kutta methods depending on chosen runtime parameters.
Depending on chosen run time parameters different CFL adaptation and recovery strategies for invariant domain violations are used.

Definition at line 190 of file time_integrator.template.h.

References ryujin::erk_11, ryujin::erk_22, ryujin::erk_33, ryujin::erk_43, ryujin::erk_54, ryujin::ssprk_22, ryujin::ssprk_33, and ryujin::strang_ssprk_33_cn.

◆ time_stepping_scheme()

template<typename Description , int dim, typename Number = double>
auto & ryujin::TimeIntegrator< Description, dim, Number >::time_stepping_scheme ( ) const
inline

The selected time-stepping scheme.

Definition at line 252 of file time_integrator.h.

◆ efficiency()

template<typename Description , int dim, typename Number = double>
auto & ryujin::TimeIntegrator< Description, dim, Number >::efficiency ( ) const
inline

The eficiency of the selected time-stepping scheme expressed as the ratio of step size of the combined method to step size of an elementary forward Euler step. For example, SSPRK33 has an efficiency ratio of 1 whereas ERK33 has an efficiency ratio of 3.

Definition at line 260 of file time_integrator.h.

◆ step_ssprk_22()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_ssprk_22 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit second-order strong-stability preserving Runge-Kutta SSPRK(2,2;1/2) time step (and store the result in U). The function returns the chosen time step size tau.

If the parameter tau is set to a nonzero value then the supplied value is used for time stepping instead of the computed maximal time step size.

Definition at line 252 of file time_integrator.template.h.

◆ step_ssprk_33()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_ssprk_33 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit third-order strong-stability preserving Runge-Kutta SSPRK(3,3;1/3) time step (and store the result in U). The function returns the chosen time step size tau.

If the parameter tau is set to a nonzero value then the supplied value is used for time stepping instead of the computed maximal time step size.

Definition at line 274 of file time_integrator.template.h.

◆ step_erk_11()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_erk_11 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit first-order Euler step ERK(1,1;1) time step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 302 of file time_integrator.template.h.

◆ step_erk_22()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_erk_22 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit second-order Runge-Kutta ERK(2,2;1) time step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 320 of file time_integrator.template.h.

◆ step_erk_33()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_erk_33 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit third-order Runge-Kutta ERK(3,3;1) time step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 348 of file time_integrator.template.h.

◆ step_erk_43()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_erk_43 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit 4 stage third-order Runge-Kutta ERK(4,3;1) time step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 386 of file time_integrator.template.h.

◆ step_erk_54()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_erk_54 ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs an explicit 4 stage fourth-order Runge-Kutta ERK(5,4;1) time step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 434 of file time_integrator.template.h.

◆ step_strang_ssprk_33_cn()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_strang_ssprk_33_cn ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs a combined explicit implicit Strang split using a third-order Runge-Kutta ERK(3,3;1/3) time step and an implicit Crank-Nicolson step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 515 of file time_integrator.template.h.

◆ step_strang_erk_33_cn()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_strang_erk_33_cn ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs a combined explicit implicit Strang split using a third-order Runge-Kutta ERK(3,3;1) time step and an implicit Crank-Nicolson step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 567 of file time_integrator.template.h.

◆ step_strang_erk_43_cn()

template<typename Description , int dim, typename Number >
Number ryujin::TimeIntegrator< Description, dim, Number >::step_strang_erk_43_cn ( vector_type U,
Number  t 
)
protected

Given a reference to a previous state vector U performs a combined explicit implicit Strang split using a third-order Runge-Kutta ERK(4,3;1) time step and an implicit Crank-Nicolson step (and store the result in U). The function returns the chosen time step size tau.

Definition at line 635 of file time_integrator.template.h.

Member Data Documentation

◆ problem_dimension

template<typename Description , int dim, typename Number = double>
constexpr unsigned int ryujin::TimeIntegrator< Description, dim, Number >::problem_dimension = View::problem_dimension
staticconstexpr

Definition at line 194 of file time_integrator.h.

◆ n_precomputed_values

template<typename Description , int dim, typename Number = double>
constexpr unsigned int ryujin::TimeIntegrator< Description, dim, Number >::n_precomputed_values
staticconstexpr
Initial value:
=
View::n_precomputed_values

Definition at line 199 of file time_integrator.h.


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