SpECTRE  v2024.04.12
TimeSteppers::Heun2 Class Reference

A second order continuous-extension RK method that provides 2nd-order dense output. More...

#include <Heun2.hpp>

Public Types

using options = tmpl::list<>
 
- Public Types inherited from TimeStepper
using provided_time_stepper_interfaces = tmpl::list< TimeStepper >
 
- Public Types inherited from ImexTimeStepper
using provided_time_stepper_interfaces = tmpl::list< ImexTimeStepper, TimeStepper >
 

Public Member Functions

 Heun2 (const Heun2 &)=default
 
Heun2operator= (const Heun2 &)=default
 
 Heun2 (Heun2 &&)=default
 
Heun2operator= (Heun2 &&)=default
 
size_t order () const override
 The convergence order of the stepper. More...
 
size_t error_estimate_order () const override
 The convergence order of the stepper error measure. More...
 
double stable_step () const override
 Rough estimate of the maximum step size this method can take stably as a multiple of the step for Euler's method. More...
 
size_t imex_order () const override
 Convergence order of the integrator when used in IMEX mode. More...
 
size_t implicit_stage_order () const override
 
 WRAPPED_PUPable_decl_template (Heun2)
 
 Heun2 (CkMigrateMessage *)
 
const ButcherTableaubutcher_tableau () const override
 
const ImplicitButcherTableauimplicit_butcher_tableau () const override
 
virtual size_t implicit_stage_order () const =0
 
virtual const ImplicitButcherTableauimplicit_butcher_tableau () const =0
 
- Public Member Functions inherited from TimeSteppers::RungeKutta
uint64_t number_of_substeps () const override
 Number of substeps in this TimeStepper. More...
 
uint64_t number_of_substeps_for_error () const override
 Number of substeps in this TimeStepper when providing an error measure for adaptive time-stepping. More...
 
size_t number_of_past_steps () const override
 Number of past time steps needed for multi-step method. More...
 
bool monotonic () const override
 Whether computational and temporal orderings of operations match. More...
 
TimeStepId next_time_id (const TimeStepId &current_id, const TimeDelta &time_step) const override
 The TimeStepId after the current substep. More...
 
TimeStepId next_time_id_for_error (const TimeStepId &current_id, const TimeDelta &time_step) const override
 The TimeStepId after the current substep when providing an error measure for adaptive time-stepping. More...
 
virtual const ButcherTableaubutcher_tableau () const =0
 
- Public Member Functions inherited from TimeStepper
 WRAPPED_PUPable_abstract (TimeStepper)
 
template<typename Vars >
void update_u (const gsl::not_null< Vars * > u, const gsl::not_null< TimeSteppers::History< Vars > * > history, const TimeDelta &time_step) const
 Set u to the value at the end of the current substep. More...
 
template<typename Vars , typename ErrVars >
bool update_u (const gsl::not_null< Vars * > u, const gsl::not_null< ErrVars * > u_error, const gsl::not_null< TimeSteppers::History< Vars > * > history, const TimeDelta &time_step) const
 Set u to the value at the end of the current substep; report the error measure when available. More...
 
template<typename Vars >
bool dense_update_u (const gsl::not_null< Vars * > u, const TimeSteppers::History< Vars > &history, const double time) const
 Compute the solution value at a time between steps. To evaluate at a time within a given step, call this method at the start of the step containing the time. The function returns true on success, otherwise the call should be retried after the next substep. More...
 
virtual size_t order () const =0
 The convergence order of the stepper. More...
 
virtual size_t error_estimate_order () const =0
 The convergence order of the stepper error measure. More...
 
virtual uint64_t number_of_substeps () const =0
 Number of substeps in this TimeStepper. More...
 
virtual uint64_t number_of_substeps_for_error () const =0
 Number of substeps in this TimeStepper when providing an error measure for adaptive time-stepping. More...
 
virtual size_t number_of_past_steps () const =0
 Number of past time steps needed for multi-step method. More...
 
virtual double stable_step () const =0
 Rough estimate of the maximum step size this method can take stably as a multiple of the step for Euler's method. More...
 
virtual bool monotonic () const =0
 Whether computational and temporal orderings of operations match. More...
 
virtual TimeStepId next_time_id (const TimeStepId &current_id, const TimeDelta &time_step) const =0
 The TimeStepId after the current substep. More...
 
virtual TimeStepId next_time_id_for_error (const TimeStepId &current_id, const TimeDelta &time_step) const =0
 The TimeStepId after the current substep when providing an error measure for adaptive time-stepping. More...
 
template<typename Vars >
bool can_change_step_size (const TimeStepId &time_id, const TimeSteppers::History< Vars > &history) const
 Whether a change in the step size is allowed before taking a step. More...
 
- Public Member Functions inherited from ImexTimeStepper
 WRAPPED_PUPable_abstract (ImexTimeStepper)
 
virtual size_t imex_order () const =0
 Convergence order of the integrator when used in IMEX mode. More...
 
template<typename Vars >
void add_inhomogeneous_implicit_terms (const gsl::not_null< Vars * > u, const gsl::not_null< TimeSteppers::History< Vars > * > implicit_history, const TimeDelta &time_step) const
 Add the change for the current implicit substep, \(Y_{n,\text{inhomogeneous}}\), to u, given a past history of the implicit derivatives. More...
 
template<typename Vars >
double implicit_weight (const gsl::not_null< TimeSteppers::History< Vars > * > implicit_history, const TimeDelta &time_step) const
 The coefficient \(w_n\) of the implicit derivative for the current substep. For a Runge-Kutta method, this is the coefficient on the diagonal of the Butcher tableau. More...
 

Static Public Attributes

static constexpr Options::String help
 
- Static Public Attributes inherited from TimeStepper
static constexpr bool local_time_stepping = false
 
static constexpr bool imex = false
 
- Static Public Attributes inherited from ImexTimeStepper
static constexpr bool imex = true
 

Detailed Description

A second order continuous-extension RK method that provides 2nd-order dense output.

\begin{eqnarray} \frac{du}{dt} & = & \mathcal{L}(t,u). \end{eqnarray}

Given a solution \(u(t^n)=u^n\), this stepper computes \(u(t^{n+1})=u^{n+1}\) using the following equations:

\begin{align} k^{(i)} & = \mathcal{L}(t^n + c_i \Delta t, u^n + \Delta t \sum_{j=1}^{i-1} a_{ij} k^{(j)}), \mbox{ } 1 \leq i \leq s,\\ u^{n+1}(t^n + \theta \Delta t) & = u^n + \Delta t \sum_{i=1}^{s} b_i(\theta) k^{(i)}. \end{align}

Here the coefficients \(a_{ij}\), \(b_i\), and \(c_i\) are given in [75]. Note that \(c_1 = 0\), \(s\) is the number of stages, and \(\theta\) is the fraction of the step.

When used as an IMEX method, the implicit portion uses the trapezoid rule, which is stiffly accurate and A-stable.

The CFL factor/stable step size is 1.0.

Member Function Documentation

◆ butcher_tableau()

const ButcherTableau & TimeSteppers::Heun2::butcher_tableau ( ) const
overridevirtual

◆ error_estimate_order()

size_t TimeSteppers::Heun2::error_estimate_order ( ) const
overridevirtual

The convergence order of the stepper error measure.

Implements TimeStepper.

◆ imex_order()

size_t TimeSteppers::Heun2::imex_order ( ) const
overridevirtual

Convergence order of the integrator when used in IMEX mode.

Implements ImexTimeStepper.

◆ implicit_butcher_tableau()

const ImplicitButcherTableau & TimeSteppers::Heun2::implicit_butcher_tableau ( ) const
overridevirtual

◆ implicit_stage_order()

size_t TimeSteppers::Heun2::implicit_stage_order ( ) const
overridevirtual

Smallest order of the intermediate result at any substep. For the methods supported by this class, this cannot exceed 2.

Implements TimeSteppers::ImexRungeKutta.

◆ order()

size_t TimeSteppers::Heun2::order ( ) const
overridevirtual

The convergence order of the stepper.

Implements TimeStepper.

◆ stable_step()

double TimeSteppers::Heun2::stable_step ( ) const
overridevirtual

Rough estimate of the maximum step size this method can take stably as a multiple of the step for Euler's method.

Implements TimeStepper.

Member Data Documentation

◆ help

constexpr Options::String TimeSteppers::Heun2::help
staticconstexpr
Initial value:
= {
"Heun's method, a 2nd order Runge-Kutta method."}

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