# Solver Compatibility Chart

This chart is for documenting the compatibility of the component solver packages to the common interface. An `x`

means that the option is implemented or the add-on functionality will work with the given solver. A blank means that the option has not been implemented or that a given add-on has not been tested with a given package. If there are any errors in this chart, please file an issue or submit a pull-request.

Option | OrdinaryDiffEq.jl | Sundials.jl | ODE.jl | ODEInterface.jl | LSODA.jl | StochasticDiffEq.jl | DelayDiffEq.jl | DASKR.jl | DASSL.jl |
---|---|---|---|---|---|---|---|---|---|

Nonlinear Dense (continuous) output | x | x | x | x | x | ||||

Tolerance control | x | x | x | x | x | x | x | x | x |

Advanced stepsize control | x | 0 | x | 0 | x | x | 0 | ||

Mass Matrices^ | x | 0 | x | 0 | x | x | 0 | ||

Analytical Jacobians^† | x | x | x | x | x | x | |||

General Performance Overloads^† | x | 0 | 0 | 0 | x | x | 0 | ||

internalnorm | x | 0 | x | 0 | 0 | x | x | 0 | |

Initial dt | x | x | x | x | x | x | x | ||

save_everystep | x | x | x | x | x | x | x | x | |

timeseries_steps | x | x | x | ||||||

saveat | x | x | x | x | x | x | x | x | |

tstops | x | x | 0 | x | x | x | |||

d_discontinuities | x | 0 | x | x | |||||

isoutofdomain | x | x | x | x | |||||

Allows reverse time direction | x | x | x | x | x | x | x | ||

Unitful numbers | x | 0 | 0 | 0 | x | 0 | |||

Arbitrary dimension arrays | x | x | x | x | x | x | x | x | x |

Complex numbers | p | x | p | ||||||

Arbitrary precision | x | 0 | x | 0 | 0 | x | x | 0 | x |

ApproxFun types | x | 0 | 0 | 0 | x | 0 | |||

Progress monitoring | x | x | x | ||||||

Integrator interface | x | x | 0 | x | x | ||||

Resizability | x | 0 | 0 | 0 | x | x | 0 | ||

Cache iterator | x | 0 | 0 | 0 | x | x | 0 | ||

Can choose linear solvers | x | s | x | x | s | x | |||

Can choose nonlinear solvers | x | 0 | 0 | 0 | x | x | 0 | x | |

Can use out of place natively | x | 0 | x | 0 | 0 | x | x | 0 | x |

Can use inplace natively | x | x | x | x | x | x | x | ||

Compatible with DiffEqDevTools | x | x | x | x | x | x | x | x | |

Compatible with ParameterizedFunctions | x | x | x | x | x | x | x | x | |

Continuous Callbacks | x | x | x | x | x | x | |||

Discrete Callbacks | x | x | x | x | x | ||||

Monte Carlo Simulations | x | x | x | x | x | x | x | x | |

Parameter Estimation | x | n | n | n | n | x | x | n | x |

Parameter Sensitivity Analysis | x | x | x | x | x | x | |||

Plotting and solution handling | x | x | x | x | x | x | x | x | x |

x: Full compatibility

p: Partial compatibility, only in nonstiff methods unless the Jacobian is provided.

n: General compatibility, but not compatible with routines which. require being able to autodifferentiate through the entire solver.

0: Not possible. This is generally due to underlying inflexibility in a wrapped library.

s: Special, Sundials has its own linear solver choices.

^: Only stiff (implicit) methods.

†: For packages with compatibility, no warning is given when a specific algorithm does not need to use this feature.

All blank spaces are possible future additions.

## Note on PDEs

This chart is only for the basic (ODE/SDE/DAE/DDE) solver methods. The PDE solvers (will be) built on top of these packages and thus will have the same options available. Current, FiniteElementDiffEq.jl is a solo implemention which is compatible with `save_everystep`

, `timeseries_steps`

, plotting and solution handling, arbitrary precision, and choice of `dt`

.