Class astep_gsl (o2scl)

O2scl : Class List

template<class vec_y_t = boost::numeric::ublas::vector<double>, class vec_dydx_t = vec_y_t, class vec_yerr_t = vec_y_t, class func_t = ode_funct, class fp_t = double>
class astep_gsl : public o2scl::astep_base<boost::numeric::ublas::vector<double>, boost::numeric::ublas::vector<double>, boost::numeric::ublas::vector<double>, ode_funct, double>

Adaptive ODE stepper (GSL)

This class performs an adaptive step of a system of ODEs. To modify the ODE stepper which is used, use the function astep_base::set_step().

Note, this has been updated to correspond to the ode-initval2 functions in GSL.

There is an example for the usage of this class in examples/ex_ode.cpp documented in the Ordinary differential equations example.

Todo:

Document what happens when the stepper function returns a non-zero value, as it’s different now with the ode-initval2 function.

Document count, failed_steps, etc.

Idea for Future:

Compare more directly to GSL

Default template arguments

  • func_t - ode_funct

  • vec_t - boost::numeric::ublas::vector < double >

Public Types

typedef boost::numeric::ublas::vector<fp_t> ubvector

Public Functions

inline astep_gsl()
inline virtual ~astep_gsl()
inline virtual int astep(fp_t &x, fp_t xmax, fp_t &h, size_t n, vec_y_t &y, vec_dydx_t &dydx_out, vec_yerr_t &yerr, func_t &derivs)

Make an adaptive integration step of the system derivs.

This attempts to take a step of size h from the point x of an n-dimensional system derivs starting with y. On exit, x and y contain the new values at the end of the step, h contains the size of the step, dydx_out contains the derivative at the end of the step, and yerr contains the estimated error at the end of the step.

inline virtual int astep_derivs(fp_t &x, fp_t xmax, fp_t &h, size_t n, vec_y_t &y, vec_dydx_t &dydx, vec_yerr_t &yerr, func_t &derivs)

Make an adaptive integration step of the system derivs with derivatives.

This attempts to take a step of size h from the point x of an n-dimensional system derivs starting with y and given the initial derivatives dydx. On exit, x, y and dydx contain the new values at the end of the step, h contains the size of the step, dydx contains the derivative at the end of the step, and yerr contains the estimated error at the end of the step.

inline virtual int astep_full(fp_t x, fp_t xmax, fp_t &x_out, fp_t &h, size_t n, vec_y_t &y, vec_dydx_t &dydx, vec_y_t &yout, vec_yerr_t &yerr, vec_dydx_t &dydx_out, func_t &derivs)

Make an adaptive integration step of the system derivs.

This function performs an adaptive integration step with the n-dimensional system derivs and parameter pa. It Begins at x with initial stepsize h, ensuring that the step goes no farther than xmax. At the end of the step, the size of the step taken is h and the new value of x is in x_out. Initially, the function values and derivatives should be specified in y and dydx. The function values, derivatives, and the error at the end of the step are given in yout, yerr, and dydx_out. Unlike in ode_step objects, the objects y, yout, dydx, and dydx_out must all be distinct.

This adaptive stepper function is faster than astep() or astep_derivs() because it does not require any copying of vectors.

Public Members

ode_control_gsl<vec_y_t, vec_dydx_t, vec_yerr_t> con

Control specification.

Protected Functions

inline int evolve_apply(fp_t t0, fp_t t1, fp_t &t, fp_t &h, size_t nvar, vec_y_t &y, vec_dydx_t &dydx, vec_y_t &yout, vec_yerr_t &yerr, vec_dydx_t &dydx_out, func_t &derivs)

Apply the evolution for the next adaptive step.

This function is based on gsl_odeiv2_evolve_apply.

Note

This function requres that y, yout, dydx and dydx_out are all distinct vectors.

Protected Attributes

vec_y_t yout_int

Temporary storage for yout.

vec_dydx_t dydx_int

Internal storage for dydx.

fp_t last_step

The size of the last step.

unsigned long int count

The number of steps.

unsigned long int failed_steps

The number of failed steps.

size_t msize

The size of the allocated vectors.