← Back to all sparks
S

SUNDIALS

DEVOPS
Velocity0.0

Suite of nonlinear and differential algebraic equation solvers

SUNDIALS grew a Python interface and started automating the choices users used to guess at

numerical-solverspython-bindingsarkodeadjoint-sensitivityscientific-computing
Current state
SUNDIALS is a suite of C solvers for ODEs, DAEs and nonlinear systems, long used from C, C++ and Fortran. Version 7.6.0 shipped a beta of sundials4py, the project's first official Python interface, covering most of the suite. The releases around it add machinery that removes user guesswork: a nonlinear solver that switches between modified Newton and fixed-point iteration based on a stiffness estimate, and a dominant-eigenvalue estimator that supplies a value users previously had to compute themselves.
Where it's heading
Two shifts are running at once. The first is reach — official Python bindings put the suite in front of users who were never going to link a C library, and the Ginkgo batched linear solver integration points the same way toward existing GPU and HPC stacks. The second is autonomy: SUNNonlinearSolver_Auto and SUNDomEigEstimator both exist so a user who cannot characterize their problem can still get a reasonable method chosen for them. Alongside that, 7.3.0 quietly replaced the default Butcher tables with more efficient ones, which is the same instinct applied to defaults rather than APIs.
Prediction
sundials4py shipped explicitly as beta, so the next milestone visible in this arc is that interface stabilizing and widening its coverage of the suite. The notes do not say which modules remain unwrapped.

Recent moves

  1. 1mo ago

    An auto-switching nonlinear solver arrives in SUNDIALS 7.8.0

    SUNNonlinearSolver_Auto estimates stiffness and switches between modified Newton and fixed-point iteration, aimed at users who cannot say in advance which their problem needs. It continues the pattern set by the dominant-eigenvalue estimator in 7.5.0 — moving a judgement call from the user into the library. A batch of embedded SSP explicit and diagonally implicit Butcher tables lands with it.

    View source ↗
  2. 4mo ago

    Stage introspection and deferred allocation in SUNDIALS 7.7.0

    Mostly control and observability for ARKODE: an explicit init call so allocation happens before the first evolve for users measuring memory, plus getters for the current stage index, last successful time and last state. The SSP Runge-Kutta default stage counts drop to their minimum allowable values, a behaviour change users can revert with an existing setter.

    View source ↗
  3. 6mo ago

    SUNDIALS ships official Python interfaces in 7.6.0

    ⚡ SPARK

    The release that opens the suite to a user population it never had: sundials4py, a beta Python module built with nanobind and litgen, exposing explicit interfaces to most of SUNDIALS. Everything else in the release — constraint-failure accounting split out from solver failures in CVODE and IDA — is ordinary bookkeeping by comparison.

    View source ↗
  4. 10mo ago

    Dominant eigenvalue estimation and batched Ginkgo solvers in SUNDIALS 7.5.0

    Adds a SUNDomEigEstimator interface with Power and Arnoldi implementations, which LSRKStep can use for Runge-Kutta-Chebyshev and Legendre methods instead of requiring a user-supplied eigenvalue function. A batched linear solver and matrix backed by Ginkgo also arrive, raising the minimum Ginkgo version — the first of the two moves that 7.8.0's auto-switching solver follows.

    View source ↗
  5. 1y ago

    Compensated summation extends to all of ARKODE in 7.4.0

    The time-accumulator compensated summation previously confined to SPRKStep becomes available across ARKODE, with the old module-specific setter deprecated. The remainder is corrective: segfaults in the adjoint init paths after memory has been freed, a bounds check that wrongly rejected valid step-ratio settings, and a misreported statistic.

    View source ↗
  6. 1y ago

    Discrete adjoint for explicit Runge-Kutta methods in SUNDIALS 7.3.0

    Adds discrete adjoint sensitivity to the ERKStep and ARKStep modules on top of new shared checkpointing and stepper classes — the foundation the adjoint statistics fixes in 7.4.0 then correct. The same release swaps ARKODE's default explicit and implicit method tables for more efficient ones at several orders, a silent behaviour change for anyone relying on defaults.

    View source ↗