Choosing a Solver

odes interfaces with a number of different solvers:

CVODE

ODE solver with BDF linear multistep method for stiff problems and Adams-Moulton linear multistep method for nonstiff problems. Supports modern features such as: root (event) finding, error control, and (Krylov-)preconditioning. See scikits.odes.sundials.cvode for more details and solver specific arguments. Part of SUNDIALS, it is a replacement for the earlier vode/dvode.

IDA

DAE solver with BDF linear multistep method for stiff problems and Adams-Moulton linear multistep method for nonstiff problems. Supports modern features such as: root (event) finding, error control, and (Krylov-)preconditioning. See scikits.odes.sundials.ida for more details and solver specific arguments. Part of SUNDIALS.

dopri5

Part of scipy.integrate, explicit Runge-Kutta method of order (4)5 with stepsize control.

dop853

Part of scipy.integrate, explicit Runge-Kutta method of order 8(5,3) with stepsize control.

odes also includes for comparison reasons the historical solvers:

lsodi

Part of odepack, IDA should be used instead of this. See scikits.odes.lsodiint for more details.

ddaspk

Part of daspk, IDA should be used instead of this. See scikits.odes.ddaspkint for more details.

Support for other SUNDIALS solvers (e.g. ARKODE) is currently not implemented, nor is support for non-serial methods (e.g. MPI, OpenMP). Contributions adding support new SUNDIALS solvers or features is welcome.

Performance of the Solvers

A comparison of different methods is given in following image. In this BDF, RK23, RK45 and Radau are python implementations; cvode is the CVODE interface included in odes; lsoda, odeint and vode are the scipy integrators (2016), dopri5 and dop853 are the Runge-Kutta methods in scipy. For this problem, cvode performs fastest at a preset tolerance.

_images/PerformanceTests.png

You can generate above graph via the Performance notebook.