| Home | Libraries | People | FAQ | More

### Error Stepper

This concepts specifies the interface an error stepper has to fulfill to be used within a ControlledErrorStepper. An error stepper must always fulfill the stepper concept. This can trivially implemented by

    template< class System >
    error_stepper::do_step( System sys , state_type &x , time_type t , time_type dt )
    {
        state_type xerr;
        // allocate xerr
        do_step( sys , x , t , dt , xerr );
    }

##### Description

An error stepper following this Error Stepper concept is capable of doing one step of the solution x(t) of an ODE with step-size dt to obtain x(t+dt) and also computing an error estimate xerr of the result. Error Steppers can be Runge-Kutta steppers, symplectic steppers as well as implicit steppers. Based on the stepper type, the ODE is defined as System, Symplectic System, Simple Symplectic System or Implicit System.

##### Refinement of

- DefaultConstructable
- CopyConstructable
- Stepper

##### Associated types

- state_type

  `Stepper::state_type`

  The type characterizing the state of the ODE, hence x.

- deriv_type

  `Stepper::deriv_type`

  The type characterizing the derivative of the ODE, hence d x/dt.

- time_type

  `Stepper::time_type`

  The type characterizing the dependent variable of the ODE, hence the time t.

- value_type

  `Stepper::value_type`

  The numerical data type which is used within the stepper, something like `float`, `double`, `complex&lt; double &gt;`.

- order_type

  `Stepper::order_type`

  The type characterizing the order of the ODE, typically `unsigned short`.

- stepper_category

  `Stepper::stepper_category`

  A tag type characterizing the category of the stepper. This type must be convertible to `error_stepper_tag`.

##### Notation

`ErrorStepper`

  A type that is a model of Error Stepper

`State`

  A type representing the state x of the ODE

`Error`

  A type representing the error calculated by the stepper, usually same as `State`

`Time`

  A type representing the time t of the ODE

`stepper`

  An object of type `ErrorStepper`

`x`

  Object of type `State`

`xerr`

  Object of type `Error`

`t`, `dt`

  Objects of type `Time`

`sys`

  An object defining the ODE, should be a model of either System, Symplectic System, Simple Symplectic System or Implicit System.

##### Valid Expressions

Name | Expression | Type | Semantics
--- | --- | --- | ---
Get the stepper order | `stepper.order()` | `order_type` | Returns the order of the stepper for one step without error estimation.
Get the stepper order | `stepper.stepper_order()` | `order_type` | Returns the order of the stepper for one error estimation step which is used for error calculation.
Get the error order | `stepper.errorr_order()` | `order_type` | Returns the order of the error step which is used for error calculation.
Do step | `stepper.do_step( sys , x , t , dt )` | `void` | Performs one step of step size `dt`. The newly obtained state is written in-place to `x`.
Do step with error estimation | `stepper.do_step( sys , x , t , dt , xerr )` | `void` | Performs one step of step size `dt` with error estimation. The newly obtained state is written in-place to `x` and the estimated error to `xerr`.

##### Models

- `runge_kutta_cash_karp54`
- `runge_kutta_dopri5`
- `runge_kutta_fehlberg78`
- `rosenbrock4`