The SUNDIALS library comes packaged with a variety of `SUNMatrix`

implementations, designed for simulations requiring direct linear
solvers for problems in serial or shared-memory parallel
environments. SUNDIALS additionally provides a simple interface for
generic matrices (akin to a C++ *abstract base class*). All of the
major SUNDIALS packages (CVODE(s), IDA(s), KINSOL, ARKODE), are
constructed to only depend on these generic matrix operations, making
them immediately extensible to new user-defined matrix objects. For
each of the SUNDIALS-provided matrix types, SUNDIALS also provides at
least two `SUNLinearSolver`

implementations that factor these
matrix objects and use them in the solution of linear systems.