Please consider helping us improve by answering our 3 question survey.
IDA is a package for the solution of differentialalgebraic equation (DAE) systems in the form F(t,y,y’)=0. It is written in C, but derived from the package DASPK which is written in Fortran.
The integration method in IDA is variableorder, variablecoefficient BDF in fixedleadingcoefficient form. The method order varies between 1 and 5. The solution of the resulting nonlinear system is accomplished with some form of Newton iteration. In the cases of a direct linear solver (dense, banded, or sparse), the nonlinear iteration is a Modified Newton iteration, in that the Jacobian is fixed (and usually out of date). When using any of the Krylov methods as the linear solver, the iteration is an Inexact Newton iteration, using the current Jacobian (through matrixfree products), in which the linear residual is nonzero but controlled.
The implicit nonlinear systems within implicit integrators are solved approximately at each integration step using a modified Newton method, an Inexact Newton method, or a fixedpoint solver (functional iteration). For the Newtonbased methods and the serial or threaded NVECTOR modules in SUNDIALS, IDA provides both direct (dense, band, or sparse) and preconditioned Krylov iterative (GMRES, BiCGStab, TFQMR) linear solvers. When used with one of the distributed parallel NVECTOR modules, including PETSc and hypre vectors, or a userprovided vector data structure, only the Krylov solvers are available, although a user may supply their own linear solver for any data structures if desired. In addition to the basic Krylov method modules, the IDA package also contains a preconditioner module called IDABBDPRE, which provides a bandblockdiagonal preconditioner for use with the distributed memory parallel vector.
For use with Fortran applications, a set of Fortran/C interface routines, called FIDA, is also supplied. These are written in C, but assume that the user calling program and all usersupplied routines are in Fortran.
See Software page for download and documentation.
ida release history
What’s new in v3.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 objectoriented 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 objectoriented API.
 Added example problems demonstrating use of generic SUNLINEARSOLVER modules.
 Expanded packageprovided direct linear solver (Dls) interfaces and scaled, preconditioned, iterative linear solver (Spils) interfaces to utilize generic SUNMATRIX and SUNLINEARSOLVER objects.
 Removed packagespecific, linear solverspecific, 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 userprovided “JTSetup” routine. This change supports users who wish to set up data structures for the userprovided Jacobiantimesvector (“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 righthandside 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, https://software.llnl.gov/RAJA/.
 Addition of sunindextype option for 32 or 64bit 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 64bit or 32bit 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 userprovided preconditioner operations will be allocated and stored in userprovided 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 xSDKcompliant build system keys.
 The xSDK is a movement in scientific software to provide a foundation for the rapid and efficient production of highquality, sustainable extremescale scientific applications.
 More information can be found at https://xsdk.info.

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 EXAMPLES_ENABLE to EXAMPLES_ENABLE_C.
 Changed CXX_ENABLE to EXAMPLES_ENABLE_CXX.
 Changed F90_ENABLE to EXAMPLES_ENABLE_F90.
 Added EXAMPLES_ENABLE_F77 option.
 Corrections and additions to all User Guides.
 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.
 Bug fixes
 Added missing prototype for IDASetMaxBacksIC in ida.h.
What’s new in v2.9.0?
 New features and/or enhancements
 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.
 Example codes were changed from using NV_DATA macro to using N_VGetArrayPointer_* when using the native vectors shipped with SUNDIALS.
 Updated to return integers from linear solver and preconditioner ‘free’ functions.
 In FIDA, added missing Fortran interface routines so that users can supply the sparse Jacobian routine.
 Minor corrections and additions to User Guide, including removal of references to specific NVECTOR names in usage skeletons.
 Added idaFoodWeb_kry.c, idaFoodWeb_bnd_omp.c, and idaFoodWeb_kry_omp.c examples using OpenMP.
 Added optional input function IDASetMaxBacksIC to limit number of linesearch backtrack operations in IDACalcIC. User guides amended accordingly.
 Bug fixes
 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 installationrelated files.
 Corrected name N_VCloneEmptyVectorArray to N_VCloneVectorArrayEmpty in all documentation files.
 Corrected example idaFoodWeb_bnd.c in PrintOutput (wrong component printed).
What’s new in v2.8.0?
 New features
 Added interface to the sparse direct solver KLU.
 Added interface to SuperLU_MT.
 Bug fixes
 Fixed minor bug in IDARootfind involving rootdir input.
 Fixed line setting smu in IDALapackBand.
 Changes to the FIDA module
 In optional input routines FIDASETIIN, FIDASETRIN, and FIDASETVIN, removed the optional fourth argument key_length.
 Revised integer declarations in all examples so that those which must match a C type long int are declared INTEGER*8.
 Changes related to the build system
 Dropped support and documentation of the Autotools mode of installation.
What’s new in v2.7.0?
 Bug fixes
 linear solver memory set to zero after being created.
 linear solver memory is freed on an error return.
 memory leak fixed in two IDASp***Free functions.
 Changes to user interface
 Problem size and related integers (bandwidth parameters etc.) all have type long int, except for those in user calls specifying BLAS/LAPACK routines.
 added IDAGetDky for optional output retrieval.
What’s new in v2.6.0?
 New features
 new linear solver module, based on Blas and Lapack for both dense and banded matrices.
 option to specify which direction of zerocrossing is to be monitored while performing rootfinding.
 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 Lapackbased ones, were also organized into a direct family).
 maintaining a single pointer to user data, optionally specified through a Settype function.
 general streamlining of the preconditioner modules distributed with the solver.
What’s new in v2.5.0?
 Bug fixes
 fixed bug in final stopping times to resolve potential conflicts when tout is close to tstop.
 fixed bug in he internal differencequotient dense and banded Jacobian approximations, related to the estimation of the perturbation (which could have lead to a failure of the linear solver when zero components with sufficiently small absolute tolerances were present).
 Changes to user interface
 the user interface to the consistent initial conditions calculations has been modified. The IDACalcIC arguments t0, yy0, and yp0 were removed and a new function, IDAGetconsistentIC is now provided.
 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 <cvode/cvode.h>).
What’s new in v2.4.0?
 New features
 added IDASPBCG interface module to allow IDA to interface with the shared SPBCG (scaled preconditioned BiCGSTAB) linear solver module.
 added IDASPTFQMR interface module to allow IDA to interface with the shared SPTFQMR (scaled preconditioned TFQMR) linear solver module.
 added FIDA (Fortran interface to IDA).
 added support for SPBCG and SPTFQMR to the IDABBDPRE preconditioner module.
 added rootfinding feature in IDA.
 added support for interpreting failures in usersupplied functions.
 Changes to user interface
 changed argument of IDAFree and IDABBDPrecFree to be the address of the respective memory block pointer, so that its NULL value is propagated back to the calling function.
 added IDASPBCG module which defines appropriate IDSpbcg* functions to allow IDA to interface with the shared SPBCG linear solver module.
 added IDABBDSpbcg function to IDABBDPRE module to support SPBCG linear solver module.
 changed function type names to accomodate all the Scaled Preconditioned Iterative Linear Solvers now available:
IDASpgmrJactimesVecFn > IDASpilsJacTimesVecFn
IDASpgmrPrecSetupFn > IDASpilsPrecSetupFn
IDASpgmrPrecSolveFn > IDASpilsPrecSolveFn  changed some names for IDABBDPRE function outputs.
 added option for usersupplied error handler function.
 added IDAGetEstLocalErrors() to return estimated local errors.
 renamed all exported header files (except for ida.h, all header files have the prefix ida_).
 changed naming scheme for IDA examples.
 Changes related to the build system
 the main IDA header file (ida.h) is still exported to the install include directory. However, all other IDA header files are exported into an ida subdirectory of the install include directory.
 the IDA library now contains all shared object files (there is no separate libsundials_shared library any more).
What’s new in v2.3.0?
 New features
 added option for userprovided error weight computation function (of type IDAEwtFn specified through IDASetEwtFn).
 Changes to user interface
 IDA now stores tolerances through values rather than references (to resolve potential scoping issues).
 IDA now stores the constraints and id vectors (if defined) through values ratherthan references.
 IDA now passes information back to the user through values rather than references (error weights).
 IDAMalloc, IDAReInit, IDASetTolerances: added option itol=IDA_WF to indicate usersupplied function for computing the error weights; reltol is now declared as realtype. Note that it is now illegal to call IDASetTolerances before IDAMalloc. It is now legal to deallocate the absolute tolerance N_Vector right after its use.
 IDAGetErrorWeights: the user is now responsible for allocating space for the N_Vector in which error weights will be copied.
 IDACalcIC takes as additional arguments (t0,y0,yp0). As a consequence, it can be called at any time to correct a pair (y,y’).
 Passing a value of 0 for the maximum step size or for maxsteps results in the solver using the corresponding default value (infinity, and 500, respectively).
 Several optional input functions were combined into a single one (IDADenseSetJacFn and IDADenseSetJacData, IDABandSetJacFn and IDABandSetJacData, IDASpgmrSetPrecSolveFn and IDASpgmrSetPrecSetFn and IDASpgmrSetPrecData, IDASpgmrSetJacTimesVecFn and IDASpgmrSetJacData).
What’s new in v2.2.2?
 Changes to documentation
 added section with numerical values of all input and output solver constants.
 added more detailed notes on the type of absolute tolerances.
 fixed several typos and removed reference to inexistent function IDASetMinStep.
 Changes related to the build system
 fixed autoconfrelated 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).
 added –withmpiflags as a configure option to allow user to specify MPIspecific flags.
What’s new in v2.2.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.
 Changes to documentation
 fixed various mistakes and typos in the user guide and example programs documents.
What’s new in v2.2.0?
 New feature
 added option to disable all error messages.
 Bug fixes
 in the solution of the nonlinear system, the correction for small constraint violation is to ee, not y.
 besides delaying the order increase until the 2nd step, we now also delay doubling the step size, to avoid using information from times before t0.
 Changes related to the NVECTOR module
 removed machEnv, redefined table of vector operations (now contained in the N_Vector structure itself).
 all IDA functions create new N_Vector variables through cloning, using an N_Vector passed by the user as a template.
 Changes to type names and IDA constants
 removed type ‘integertype’; instead use int or long int, as appropriate.
 restructured the list of return values from the various IDA functions.
 changed all IDA constants (inputs and return values) to have the prefix ‘IDA_’ (e.g. IDA_SUCCESS).
 renamed various function types to have the prefix ‘IDA’ (e.g. IDAResFn).
 Changes to optional input/ouput
 added IDASet* and IDAGet* functions for optional inputs/outputs, replacing the arrays iopt and ropt.
 added new optional inputs (e.g. maximum number of Newton iterations, maximum number of convergence failures, etc).
 added new function IDAGetSolution for dense output.
 the value of the last return flag from any function within a linear solver module can be obtained as an optional output (e.g. IDADenseGetLastFlag).
 Changes to usercallable functions
 added new function IDACreate which initializes the IDA solver object and returns a pointer to the IDA memory block.
 removed N (problem size) from all functions except the initialization functions for the direct linear solvers (IDADense and IDABand).
 shortened argument lists of most IDA functions (the arguments that were dropped can now be specified through IDASet* functions).
 removed reinitialization functions for band/dense/SPGMR linear solvers (same functionality can be obtained using IDA*Set* functions).
 in IDABBDPRE, added a new function, IDABBDSpgmr to initialize the SPGMR linear solver with the BBD preconditioner.
 function names changed in IDABBDPRE for uniformity.
 Changes to usersupplied functions
 removed N (probem dimension) from argument lists.
 shortened argument lists for user dense/band/SPGMR Jacobian routines.
 in IDASPGMR, shortened argument lists for user preconditioner functions.
 in IDABBDPRE, added Nlocal, the local vector size, as an argument to IDABBDLocalFn and IDABBDCommFn.