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

Nonlinear Dense (continuous) outputxxxxx
Tolerance controlxxxxxxxxx
Mass Matrices^x0x0xx0
Analytical Jacobians^†xxxxxx
internalnormx0x00xx0
Initial dtxxxxxxx
save_everystepxxxxxxxx
saveatxxxxxxxx
tstopsxx0xxx
d_discontinuitiesx0xx
isoutofdomainxxxx
Allows reverse time directionxxxxxxx
Unitful numbersx000x0
Arbitrary dimension arraysxxxxxxxxx
Complex numberspxp
Arbitrary precisionx0x00xx0x
ApproxFun typesx000x0
Progress monitoringxxx
Integrator interfacexx0xx
Resizabilityx000xx0
Cache iteratorx000xx0
Can choose linear solversxsxxsx
Can choose nonlinear solversx000xx0x
Can use out of place nativelyx0x00xx0x
Can use inplace nativelyxxxxxxx
Compatible with DiffEqDevToolsxxxxxxxx
Compatible with ParameterizedFunctionsxxxxxxxx
Continuous Callbacksxxxxxx
Discrete Callbacksxxxxx
Monte Carlo Simulationsxxxxxxxx
Parameter Estimationxnnnnxxnx
Parameter Sensitivity Analysisxxxxxx
Plotting and solution handlingxxxxxxxxx
• 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.