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 o2scl::astep_gsl : public o2scl::astep_base<boost::numeric::ublas::vector<double>, boost::numeric::ublas::vector<double>, boost::numeric::ublas::vector<double>, ode_funct>

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.

Todo:

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<double> ubvector

Public Functions

astep_gsl()
~astep_gsl()
int astep(double &x, double xmax, double &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.

int astep_derivs(double &x, double xmax, double &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.

int astep_full(double x, double xmax, double &x_out, double &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

int evolve_apply(double t0, double t1, double &t, double &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.

double 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.