Next: Driver, Previous: Adaptive Step-size Control, Up: Ordinary Differential Equations [Index]

The evolution function combines the results of a stepping function and control function to reliably advance the solution forward one step using an acceptable step-size.

- Function:
*gsl_odeiv2_evolve ****gsl_odeiv2_evolve_alloc***(size_t*`dim`) -
This function returns a pointer to a newly allocated instance of an evolution function for a system of

`dim`dimensions.

- Function:
*int***gsl_odeiv2_evolve_apply***(gsl_odeiv2_evolve **`e`, gsl_odeiv2_control *`con`, gsl_odeiv2_step *`step`, const gsl_odeiv2_system *`sys`, double *`t`, double`t1`, double *`h`, double`y`[]) This function advances the system (

`e`,`sys`) from time`t`and position`y`using the stepping function`step`. The new time and position are stored in`t`and`y`on output.The initial step-size is taken as

`h`. The control function`con`is applied to check whether the local error estimated by the stepping function`step`using step-size`h`exceeds the required error tolerance. If the error is too high, the step is retried by calling`step`with a decreased step-size. This process is continued until an acceptable step-size is found. An estimate of the local error for the step can be obtained from the components of the array

.`e`->yerr[]If the user-supplied functions defined in the system

`sys`returns`GSL_EBADFUNC`

, the function returns immediately with the same return code. In this case the user must call`gsl_odeiv2_step_reset`

and`gsl_odeiv2_evolve_reset`

before calling this function again.Otherwise, if the user-supplied functions defined in the system

`sys`or the stepping function`step`return a status other than`GSL_SUCCESS`

, the step is retried with a decreased step-size. If the step-size decreases below machine precision, a status of`GSL_FAILURE`

is returned if the user functions returned`GSL_SUCCESS`

. Otherwise the value returned by user function is returned. If no acceptable step can be made,`t`and`y`will be restored to their pre-step values and`h`contains the final attempted step-size.If the step is successful the function returns a suggested step-size for the next step in

`h`. The maximum time`t1`is guaranteed not to be exceeded by the time-step. On the final time-step the value of`t`will be set to`t1`exactly.

- Function:
*int***gsl_odeiv2_evolve_apply_fixed_step***(gsl_odeiv2_evolve **`e`, gsl_odeiv2_control *`con`, gsl_odeiv2_step *`step`, const gsl_odeiv2_system *`sys`, double *`t`, const double`h`, double`y`[]) This function advances the ODE-system (

`e`,`sys`,`con`) from time`t`and position`y`using the stepping function`step`by a specified step size`h`. If the local error estimated by the stepping function exceeds the desired error level, the step is not taken and the function returns`GSL_FAILURE`

. Otherwise the value returned by user function is returned.

- Function:
*int***gsl_odeiv2_evolve_reset***(gsl_odeiv2_evolve **`e`) This function resets the evolution function

`e`. It should be used whenever the next use of`e`will not be a continuation of a previous step.

- Function:
*void***gsl_odeiv2_evolve_free***(gsl_odeiv2_evolve **`e`) This function frees all the memory associated with the evolution function

`e`.

- Function:
*int***gsl_odeiv2_evolve_set_driver***(gsl_odeiv2_evolve **`e`, const gsl_odeiv2_driver *`d`) This function sets a pointer of the driver object

`d`for evolve object`e`.

If a system has discontinuous changes in the derivatives at known
points, it is advisable to evolve the system between each discontinuity
in sequence. For example, if a step-change in an external driving
force occurs at times *t_a, t_b* and *t_c* then evolution
should be carried out over the ranges *(t_0,t_a)*,
*(t_a,t_b)*, *(t_b,t_c)*, and *(t_c,t_1)* separately
and not directly over the range *(t_0,t_1)*.

Next: Driver, Previous: Adaptive Step-size Control, Up: Ordinary Differential Equations [Index]