**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 and documentation.