SUNDIALS: SUite of Nonlinear and DIfferential/ALgebraic Equation Solvers
Release History
KINSOL :: sundialsTB

What’s New in SUNDIALS?

Changes in major release SUNDIALS v.3.0.0

  • New features and/or enhancements
    • New linear solver API and interfaces for all SUNDIALS packages and linear solvers.  The goal of the redesign of these interfaces was to provide more encapsulation and ease in interfacing custom linear solvers and interoperability with linear solver libraries.
      • Added generic SUNMATRIX module with three provided implementations: dense, banded, and sparse.  These implementations replicate previous SUNDIALS Dls and Sls matrix structures in a single object-oriented API.
      • Added example problems demonstrating use of generic SUNMATRIX modules.
      • Added generic SUNLINEARSOLVER module with eleven provided implementations: dense, banded, LAPACK dense, LAPACK band, KLU, SuperLU_MT, SPGMR, SPBCGS, SPTFQMR, SPFGMR, and PCG.  These implementations replicate previous SUNDIALS generic linear solvers in a single object-oriented API.
      • Added example problems demonstrating use of generic SUNLINEARSOLVER modules.
      • Expanded package-provided direct linear solver (Dls) interfaces and scaled, preconditioned, iterative linear solver (Spils) interfaces to utilize generic SUNMATRIX and SUNLINEARSOLVER objects.
      • Removed package-specific, linear solver-specific, solver modules (e.g. CVDENSE, KINBAND, IDAKLU, ARKSPGMR) since their functionality is entirely replicated by the generic Dls/Spils interfaces and SUNLINEARSOLVER/SUNMATRIX modules.  The exception is CVDIAG, a diagonal approximate Jacobian solver available to CVODE and CVODES.
      • Converted all SUNDIALS example problems to utilize new generic SUNMATRIX and SUNLINEARSOLVER objects, along with updated Dls and Spils linear solver interfaces.
      • Added Spils interface routines to ARKode, CVODE, CVODES, IDA and IDAS to allow specification of a user-provided “JTSetup” routine. This change supports users who wish to set up data structures for the user-provided Jacobian-times-vector (“JTimes”) routine, and where the cost of one JTSetup setup per Newton iteration can be amortized between multiple JTimes calls.
    • Two new NVECTOR modules added: for CUDA and RAJA support for GPU systems.  These vectors are supplied to provide very basic support for running on GPU architectures.  Users are advised that these vectors both move all data to the GPU device upon construction, and speedup will only be realized if the user also conducts the right-hand-side function evaluation on the device. In addition, these vectors assume the problem fits on one GPU. For further information about RAJA, users are referred to the web site,
    • Addition of sunindextype option for 32- or 64-bit integer data index types within all SUNDIALS structures.
      • Sunindextype can be int64_t or int32_t or long long int and int depending on machine support for portable types.
      • The Fortran interfaces continue to use long_int for indices, except for their sparse matrix interface that now uses the new sunindextype.
      • Includes interfaces to PETSc, hypre, SuperLU_MT, and KLU with either 64-bit or 32-bit capabilities depending how the user configures SUNDIALS.
    • Temporary vectors were removed from preconditioner setup and solve routines for all packages.  It is assumed that all necessary data for user-provided preconditioner operations will be allocated and stored in user-provided data structures.
    • The file include/sundials_fconfig.h was added.  This file contains SUNDIALS type information for use in Fortran programs. 
    • Added support for many xSDK-compliant build system keys.
      • The xSDK is a movement in scientific software to provide a foundation for the rapid and efficient production of high-quality, sustainable extreme-scale scientific applications. 
      • More information can be found at
    • Added functions SUNDIALSGetVersion and SUNDIALSGetVersionNumber to
      get SUNDIALS release version information at runtime.

    • To avoid potential namespace conflicts, the macros defining booleantype values TRUE and FALSE have been changed to SUNTRUE and SUNFALSE respectively.

    • In build system:

      • Added separate BLAS_ENABLE and BLAS_LIBRARIES CMake variables.
      • Additional error checking during CMake configuration.
      • Fixed minor CMake bugs.
      • Renamed CMake options to enable/disable examples for greater clarity and added option to enable/disable Fortran 77 examples:
        • Changed F90_ENABLE to EXAMPLES_ENABLE_F90.
        • Added EXAMPLES_ENABLE_F77 option.
    • Corrections and additions to all User Guides.
  • In ARKode:
    • Added comments to arkode_butcher.c regarding which methods should have coefficients accurate enough for use in quad precision.
    • Bug Fix: Fixed a bug in arkode_butcher.c in use of RCONST.
    • Bug Fix: Fixed a bug in in the arkInitialSetup utility routine in the order of operations when setting up and using mass matrices to ensure the mass matrix vector product is set up before the “msetup”
        routine is called.
    • Fixed ARKode printf-related compiler warnings when building SUNDIALS with extended precision.
    • In CVodeFree, now call lfree() unconditionally (if non-NULL).
  • In IDA/IDAS:
    • Bug Fix: Added missing prototype for IDASetMaxBacksIC in ida.h and idas.h.
  • In KINSOL:
    • Bug Fix: Corrected KINSOL fcmix name translation for FKIN_SPFGMR.

Changes in major release SUNDIALS v.2.7.0

  • Two new NVECTOR modules added: for Hypre ParVector and PETSC.
  • In vector API, added new required function, N_VGetVectorID.
  • Upgrades to sparse solver interfaces; now support CSR matrix type with KLU solver.
  • In all packages, example codes were changed from using NV_DATA macro to using N_VGetArrayPointer_* when using the native vectors shipped with SUNDIALS
  • In all packages, fixed memory leak in banded preconditioner interface.
  • Fixed some examples w.r.t. switch to new macro/function names SUNRexp etc.
  • Various minor fixes to installation-related files.
  • Corrected name N_VCloneEmptyVectorArray to N_VCloneVectorArrayEmpty in all documentation files.
  • Updated all packages to return integers from linear solver and preconditioner ‘free’ functions.
  • Removed Matlab interface from distribution as it has not been updated since 2009.  We expect to update this interface soon.
  • In FKINSOL, FCVODE, and FIDA, added missing Fortran interface routines so that users can supply the sparse Jacobian routine.
  • Minor corrections and additions to all User Guides, including removal of references to specific NVECTOR names in usage skeletons.
  • Additional example programs added throughout.
  • In CVODE
    • in FCVODE, fixed argument order bugs in FCVKLU and FCVSUPERLUMT linear solver interfaces.
    • changed each **FreeB() to type int; added return(0) to each.  
    • in interpolation routines for backward problems, added logic to bypass sensitivity interpolation if input sensitivity argument is NULL.
    • updated linear and mass matrix solvers so that ‘free’ routines return integer instead of void; updated documentation accordingly.
    • fixed initialization of linear solver performance counters.
    • method and embedding for Billington and TRBDF2 explicit Runge-Kutta methods were swapped.
    • fix for user specification of absolute tolerance array along with vector Resize() functionality.
    • fix for user-supplied Butcher tables without embeddings (if fixed time steps or manual adaptivity are employed).
    • multiple documentation updates.
    • added missing ARKSpilsGetNumMtimesEvals() function. 
    • implicit predictor algorithms were updated: methods 2 and 3 were improved, a new predictor approach was added, and the default choice was modified.
    • revised handling of integer codes for specifying built-in Butcher tables: a global numbering system is still used, but methods now have #defined names to simplify the user interface.
    • maximum number of Butcher table stages was increased from 8 to 15 to accommodate very high order methods, and an 8th-order adaptive ERK method was added.
    • added support for the explicit and implicit methods in an additive Runge-Kutta method to utilize different stage times, solution and embedding coefficients, to support new SSP-ARK methods.
    • extended FARKODE interface to include a routine to set scalar/array-valued residual tolerances, to support Fortran applications with non-identity mass-matrices.
  • In IDA
    • corrected example idaFoodWeb_bnd.c in PrintOutput (wrong component printed).
    • added optional input function IDASetMaxBacksIC to limit number of linesearch backtrack operations in IDACalcIC.  User guides amended accordingly.
  • In IDAS
    • added optional input function IDASetMaxBacksIC to limit number of linesearch backtrack operations in IDACalcIC.  User guides amended accordingly.
    • changed each **FreeB() to type int; added return(0) to each.  
    • in interpolation routines for backward problems, added logic to bypass sensitivity interpolation if input sensitivity argument is NULL.
    • minor bug fix in Picard iteration.
    • minor bug fix in line search to prevent infinite loop when beta condition fails and lambda is below minimum size.

Changes in minor release SUNDIALS v.2.6.2

  • In IDAS, added missing backward problem support functions: IDALapackDenseB, IDALapackDenseFreeB, IDALapackBandB, IDALapackBandFreeB
  • In KINSOL and ARKode, updated Anderson acceleration implementation with QR updating.
  • Updated BiCGStab solver to remove redundant dot product call.
  • Minor corrections and additions to all User Guides.
  • In CVODES and IDAS header files, corrected documentation of backward integration functions, especially the ‘which’ argument.
  • In CVODES, added DVKLUB prototype and corrected CVSuperLUMTB prototype.
  • In IDAS, made SuperLUMT call for backward problem consistent with CVODES.
  • In CVODES and IDAS, added ReInit and SetOrdering wrappers for backward problems. Fixed potential memory leak in KLU ReInit functions in all solvers.
  • In CVODE, IDA, and ARKode, fixed Fortran interfaces to enable calls to *GetErrWeights, *GetEstLocalErrors, and *GetDky within a time step. In ARKode, fixed a bug in one Butcher table.
  • In ARKode, fixed error in arkDoErrorTest in recovery after failure.
  • In IDAS, fixed for-loop bugs in IDAAckpntAllocVectors Various minor fixes to installation-related files.

Summary of changes in minor release SUNDIALS v.2.6.1

  • Fixed loop limit bug in SlsAddMat function.
  • In all six solver interfaces to KLU and SuperLUMT, added #include lines, and removed redundant KLU structure allocations.
  • Numerous minor documentation improvements
  • Minor bug fixes in ARKode

Summary of major changes in SUNDIALS v.2.6.0

  • Addition of ARKode package of explicit, implicit, and additive Runge-Kutta methods for ODES. This package API is close to CVODE so switching between the two should be straightforward. Thanks go to Daniel Reynolds for the addition of this package.
  • Addition of support for two sparse direct solver packages when using the serial vector structure, KLU and SuperLU_MT. exploits highly sparse systems. SuperLU_MT supports multithreading in the factorization.
  • Addition of openMP and PThreads vector kernels.
  • Addition of fixed point and Picard iterative solvers within KINSOL. These are both optionally accelerated with Anderson acceleration.
  • Addition of FGMRES support for KINSOL.
  • Removal of autotools configuration support. We now exclusively use CMake.
  • Numerous bug fixes throughout.

    Summary of major changes in v2.5.0?

    • Changes to user interface
      • Problem size and related integers (bandwidth parameters etc.) all have type long int, except in BLAS and LAPACK routines. Function NewIntArray is replaced by a pair NewIntArray/NewLintArray, for int and long int arrays, respectively.

      Summary of major changes in v2.4.0?

      • New features
        • new linear solver module, based on Blas and Lapack for both dense and banded matrices.
      • Changes to user interface
        • reorganization of all linear solver modules into two families (besides the existing family of scaled preconditioned iterative linear solvers, the direct solvers, including the new Lapack-based ones, were also organized into a direct family).
      • Changes related to the build system
        • provide CMake-based build option, in addition to that based on autotools.

        Summary of major changes in v2.3.0?

        • Changes to the user interface
          • modified the functions in the generic dense linear solver (sundials_dense and sundials_smalldense) to work for rectangular m by n matrices (m ≤ n).
          • renamed the factorization and solution functions in the generic dense linear solver to DenseGETRF/denGETRF and DenseGETRS/denGETRS, respectively.
          • renamed the factorization and solution functions in the generic band linear solver to BandGBTRF and BandGBTRS, respectively.
        • Changes related to the build system
          • rearranged the entire SUNDIALS source tree
          • all exported header files are now installed in separate subdirectories of the installtion include directory
          • header files are included now by specifying the relative path (e.g. #include <sundials/sundials_types.h>)

          Summary of major changes in v2.2.0?

          • New features
            • added SPBCG (scaled preconditioned Bi-CGStab) linear solver module
            • added SPTFQMR (scaled preconditioned TFQMR) linear solver module
          • Changes related to the build system
            • updated configure script and Makefiles for Fortran examples to avoid C++ compiler errors (now use CC and MPICC to link only if necessary)
            • SUNDIALS shared header files are installed under a sundials subdirectory of the installation include directory
            • the shared object files are now linked into each SUNDIALS library rather than into a separate libsundials_shared library
          • Changes to the user interface
            • added prefix sundials_ to all shared header files

            Summary of major changes in v2.1.1?

            • Changes to the generic NVECTOR module
              • N_VCloneEmpty was added to the global vector operations table

            Summary of major changes in v2.0.2?

            • Changes related to the build system
              • fixed autoconf-related bug to allow configuration with the PGI Fortran compiler
              • modified to use customized detection of the Fortran name mangling scheme (autoconf’s AC_F77_WRAPPERS routine is problematic on some platforms)

              Summary of major changes in v2.0.1?

              • Changes related to the build system
                • changed order of compiler directives in header files to avoid compilation errors when using a C++ compiler.
                • changed method of generating sundials_config.h to avoid potential warnings of redefinition of preprocessor symbols.

                Summary of major changes in v2.0?

                • Changes to the generic NVECTOR module
                  • removed machEnv, redefined table of vector operations (now contained in the N_Vector structure itself).
                  • all SUNDIALS functions create new N_Vector variables through cloning, using an N_Vector passed by the user as a template.
                  • a particular NVECTOR implementation is supposed to provide user-callable constructor and destructor functions.
                  • removed from structure of vector operations the following functions: N_VNew, N_VNew_S, N_VFree, N_VFree_S, N_VMake, N_VDispose, N_VGetData, N_VSetData, N_VConstrProdPos, and N_VOneMask.
                  • added in structure of vector operations the following functions: N_VClone, N_VDestroy, N_VSpace, N_VGetArrayPointer, N_VSetArrayPointer, and N_VWrmsNormMask.
                  • Note that nvec_ser and nvec_par are now separate modules outside the shared SUNDIALS module.
                • Changes to the generic linear solvers
                  • in SPGMR, added a dummy N_Vector argument to be used as a template for cloning.
                  • in SPGMR, removed N (problem dimension) from argument list of SpgmrMalloc.
                  • iterative.{c,h} replace iterativ.{c,h}
                  • modified constant names in iterative.h (preconditioner types are prefixed with ‘PREC_’).
                  • changed numerical values for MODIFIED_GS (from 0 to 1) and CLASSICAL_GS (from 1 to 2).
                • Changes to sundialsmath submodule
                  • replaced internal routine for estimation of unit roundoff with definition of unit roundoff from float.h
                  • modified functions to call appropriate math routines given the precision level specified by the user.
                • Changes to sundialstypes submodule
                  • removed type ‘integertype’.
                  • added definitions for ‘BIG_REAL’, ‘SMALL_REAL’, and ‘UNIT_ROUNDOFF’ using values from float.h based on the precision.
                  • changed definition of macro RCONST to depend on precision.

                cvode release history


                cvodes release history


                arkode release history


                ida release history


                idas release history


                kinsol release history

                TOP :: CVODE :: CVODES :: ARKODE ::  IDA :: IDAS
                KINSOL :: sundialsTB


                sundialsTB is no longer distributed as of sundials v. 2.7.0 as it has not been updated in many years.

                What’s new in v2.5.0?

                • Bug fixes
                  • fixed lines setting etachoice in kimOpts.c
                  • in cvm.c and idm.c, fixed size of rootsfound array; added lines to free rootsfound and ckpnt arrays when done using each
                • What’s new in v2.4.0?
                • New Features
                  • the Matlab interface to IDAS was extended to provide sensitivity analysis capabilities.
                • Changes to user interface
                  • the API for adjoint sensitivity analysis (cvodes and idas) was modified to support simultaneous integration of multiple backward problems.

                What’s new in v2.3.0?

                • New features
                  • added Matlab interface to IDA (named idas)
                  • on platforms which support configure scripts, installtion of sundialsTB can now be enabled while configuring SUNDIALS and installed through make and make install (provided a working MEX compiler is found).
                • Bug fixes
                  • the installation script install_STB.m was modified to increase robustness on various platforms (related to path and file names).
                • Changes to user interface
                  • (cvodes) for improved legibility, some of the keys for forward sensitivity optional inputs were renamed.
                  • (cvodes) removed xaxis type option for the internal monitoring function CVodeMonitor.

                What’s new in v2.2.0?

                • New features
                  • modified installation procedure to use a Matlab script
                  • added sample Matlab startup file
                  • (cvodes) expanded CVodeMonitor
                  • (kinsol) added interface to KINSOL’s performance monitoring function (‘Verbose’ option to KINSetOptions)
                • Bug fixes
                  • (cvodes) fixed bug in interface to quadrature integration which was causing a segmentation violation when monitoring was turned on.
                • Changes to user interface
                  • updated to reflect changes to the SUNDIALS libraries in v.2.2.0
                  • (cvodes) changed the interface for sensitivity analysis (both forward and adjoint) to follow more closely the CVODES calling sequence
                  • (cvodes) optional inputs for forward sensitivity analysis are now provided through a separate function, CVodeSensSetOptions
                  • removed NVM mex interface