SpECTRE
v2024.12.16
|
A third-order Runge-Kutta method with IMEX support. More...
#include <Rk3Pareschi.hpp>
Public Types | |
using | options = implementation defined |
Public Types inherited from TimeStepper | |
using | provided_time_stepper_interfaces = implementation defined |
Public Types inherited from ImexTimeStepper | |
using | provided_time_stepper_interfaces = implementation defined |
Public Member Functions | |
Rk3Pareschi (const Rk3Pareschi &)=default | |
Rk3Pareschi & | operator= (const Rk3Pareschi &)=default |
Rk3Pareschi (Rk3Pareschi &&)=default | |
Rk3Pareschi & | operator= (Rk3Pareschi &&)=default |
size_t | order () const override |
The convergence order of the stepper. 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 (Rk3Pareschi) | |
Rk3Pareschi (CkMigrateMessage *) | |
const ButcherTableau & | butcher_tableau () const override |
const ImplicitButcherTableau & | implicit_butcher_tableau () const override |
virtual size_t | implicit_stage_order () const =0 |
virtual const ImplicitButcherTableau & | implicit_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 ¤t_id, const TimeDelta &time_step) const override |
The TimeStepId after the current substep. More... | |
TimeStepId | next_time_id_for_error (const TimeStepId ¤t_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 ButcherTableau & | butcher_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 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 > | |
std::optional< StepperErrorEstimate > | update_u (const gsl::not_null< Vars * > u, const TimeSteppers::History< Vars > &history, const TimeDelta &time_step, const std::optional< StepperErrorTolerances > &tolerances) const |
Set u to the value at the end of the current substep; report the error measure when available. More... | |
template<typename Vars > | |
void | clean_history (const gsl::not_null< TimeSteppers::History< Vars > * > history) const |
Remove old entries from the history. 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 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 ¤t_id, const TimeDelta &time_step) const =0 |
The TimeStepId after the current substep. More... | |
virtual TimeStepId | next_time_id_for_error (const TimeStepId ¤t_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. Step sizes can never be changed on a substep. 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 TimeSteppers::History< Vars > &implicit_history, const TimeDelta &time_step) const |
Add the change for the current implicit substep, | |
template<typename Vars > | |
double | implicit_weight (const TimeSteppers::History< Vars > &implicit_history, const TimeDelta &time_step) const |
The coefficient | |
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 |
A third-order Runge-Kutta method with IMEX support.
The method as published has four stages, but is implemented with five as a way to convert it to an EDIRK method.
The coefficients are given as IMEX-SSP3(4,3,3) in [157].
While this method can be implemented so that the explicit part is strong-stability-preserving, the presentation in [157] is not, and this implementation follows that presentation. See [92] section 5.7 for details.
Using this time stepper in a non-IMEX simulation is not recommended, as it performs two unused RHS evaluations. When using IMEX it performs one extra evaluation because there are more implicit steps than explicit.
The implicit portion is L-stable.
The CFL factor/stable step size is 1.25637.
|
overridevirtual |
Implements TimeSteppers::RungeKutta.
|
overridevirtual |
Convergence order of the integrator when used in IMEX mode.
Implements ImexTimeStepper.
|
overridevirtual |
Implements TimeSteppers::ImexRungeKutta.
|
overridevirtual |
Smallest order of the intermediate result at any substep. For the methods supported by this class, this cannot exceed 2.
Implements TimeSteppers::ImexRungeKutta.
|
overridevirtual |
The convergence order of the stepper.
Implements TimeStepper.
|
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.
|
staticconstexpr |