ARKode is a solver library that provides adaptive-step time integration of the initial value problem for systems of stiff, nonstiff, and multi-rate systems of ordinary differential equations (ODEs) given in linearly implicit form M y’ = fE(t,y) + fI(t,y), where M is a given nonsingular matrix (possibly time dependent).
The right-hand side function is partitioned into two components–fE(t,y), containing the “slow” time scale components to be integrated explicitly, and fI(t,y), containing the “fast” time scale components to be integrated implicitly.
The methods used in ARKode are adaptive-step additive Runge Kutta methods, defined by combining two complementary Runge-Kutta methods–one explicit (ERK) and the other diagonally implicit (DIRK). Only the components in fI(t,y) must be solved implicitly, allowing for splittings tuned for use with optimal implicit solvers.
ARKode is packaged with a wide array of built-in methods, including adaptive explicit methods of orders 2-6, adaptive implicit methods of orders 2-5, and adaptive implicit-explicit (IMEX) methods of orders 3-5.
The implicit nonlinear systems within implicit integrators are solved approximately at each integration step using a modified Newton method, an Inexact Newton method, or an accelerated fixed-point solver. For the Newton-based methods and the serial or threaded NVECTOR modules in SUNDIALS, ARKode provides both direct (dense, band, or sparse) and preconditioned Krylov iterative (GMRES, BiCGStab, TFQMR, FGMRES, PCG) linear solvers. When used with one of the distributed parallel NVECTOR modules, including PETSc and hypre vectors, or a user-provided vector data structure, only the Krylov solvers are available, although a user may supply their own linear solver for any data structures if desired. For the serial vector structure, there is a banded preconditioner module called ARKBANDPRE for use with the Krylov solvers, while for the distributed memory parallel structure there is a preconditioner module called ARKBBDPRE which provides a band-block-diagonal preconditioner.
For use with Fortran applications, a set of Fortran/C interface routines, called FARKode, is also supplied. These are written in C, but assume that the user calling program and all user-supplied routines are in Fortran.
See Software page for download.
What’s new in v1.1.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.
- 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.
- Updated to return integers from linear solver and preconditioner ‘free’ functions.
- Bug fixes
- Fix in 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.
What’s new in v1.0.0?
- Initial release