SpECTRE  2021.08.02
TimeStepper Class Referenceabstract

Abstract base class for TimeSteppers. More...

#include <TimeStepper.hpp>

Public Types

using Inherit = TimeStepper_detail::FakeVirtualInherit_can_change_step_size< TimeStepper_detail::FakeVirtualInherit_dense_update_u< TimeStepper_detail::FakeVirtualInherit_update_u< TimeStepper > > >
 
using creatable_classes = tmpl::list< TimeSteppers::AdamsBashforthN, TimeSteppers::DormandPrince5, TimeSteppers::RungeKutta3, TimeSteppers::RungeKutta4 >
 

Public Member Functions

 WRAPPED_PUPable_abstract (TimeStepper)
 
template<typename Vars , typename DerivVars >
void update_u (const gsl::not_null< Vars * > u, const gsl::not_null< TimeSteppers::History< Vars, DerivVars > * > history, const TimeDelta &time_step) const noexcept
 Add the change for the current substep to u.
 
template<typename Vars , typename ErrVars , typename DerivVars >
bool update_u (const gsl::not_null< Vars * > u, const gsl::not_null< ErrVars * > u_error, const gsl::not_null< TimeSteppers::History< Vars, DerivVars > * > history, const TimeDelta &time_step) const noexcept
 Add the change for the current substep to u; report the error measure when available. More...
 
template<typename Vars , typename DerivVars >
bool dense_update_u (const gsl::not_null< Vars * > u, const TimeSteppers::History< Vars, DerivVars > &history, const double time) const noexcept
 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.
 
virtual size_t order () const noexcept=0
 The convergence order of the stepper.
 
virtual size_t error_estimate_order () const noexcept=0
 The convergence order of the stepper error measure.
 
virtual uint64_t number_of_substeps () const noexcept=0
 Number of substeps in this TimeStepper.
 
virtual uint64_t number_of_substeps_for_error () const noexcept=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 noexcept=0
 Number of past time steps needed for multi-step method.
 
virtual double stable_step () const noexcept=0
 Rough estimate of the maximum step size this method can take stably as a multiple of the step for Euler's method.
 
virtual TimeStepId next_time_id (const TimeStepId &current_id, const TimeDelta &time_step) const noexcept=0
 The TimeStepId after the current substep.
 
virtual TimeStepId next_time_id_for_error (const TimeStepId &current_id, const TimeDelta &time_step) const noexcept=0
 The TimeStepId after the current substep when providing an error measure for adaptive time-stepping. More...
 
template<typename Vars , typename DerivVars >
bool can_change_step_size (const TimeStepId &time_id, const TimeSteppers::History< Vars, DerivVars > &history) const noexcept
 Whether a change in the step size is allowed before taking a step.
 

Detailed Description

Abstract base class for TimeSteppers.

Member Function Documentation

◆ next_time_id_for_error()

virtual TimeStepId TimeStepper::next_time_id_for_error ( const TimeStepId current_id,
const TimeDelta time_step 
) const
pure virtualnoexcept

The TimeStepId after the current substep when providing an error measure for adaptive time-stepping.

Certain substep methods (e.g. embedded RK4(3)) require additional steps when providing an error measure of the integration.

◆ number_of_substeps_for_error()

virtual uint64_t TimeStepper::number_of_substeps_for_error ( ) const
pure virtualnoexcept

Number of substeps in this TimeStepper when providing an error measure for adaptive time-stepping.

Details

Certain substep methods (e.g. embedded RK4(3)) require additional steps when providing an error measure of the integration.

◆ update_u()

template<typename Vars , typename ErrVars , typename DerivVars >
bool TimeStepper::update_u ( const gsl::not_null< Vars * >  u,
const gsl::not_null< ErrVars * >  u_error,
const gsl::not_null< TimeSteppers::History< Vars, DerivVars > * >  history,
const TimeDelta time_step 
) const
inlinenoexcept

Add the change for the current substep to u; report the error measure when available.

For a substep method, the error measure will only be available on full steps. For a multistep method, the error measure will only be available when a sufficient number of steps are available in the history to compare two orders of step. Whenever the error measure is unavailable, u_error is unchanged and the function return is false.