/** @defgroup ISTL Iterative Solvers Template Library (ISTL) @brief Iterative Solvers supporting block recursive matrix and vector classes at compile time. The Iterative Solver Template Library applies generic programming in C++ to the domain of iterative solvers of linear systems stemming from finite element discretizations. Those discretizations exhibit a lot of structure, e.g:
  1. Certain discretizations for systems of PDEs or higher order methods result in matrices where individual entries are replaced by small blocks, say of size \f$2\times 2\f$ or \f$4\times 4\f$. Dense blocks of different sizes e.g. arise in \f$hp\f$ Discontinuous Galerkin discretization methods. It is straightforward and efficient to treat these small dense blocks as fully coupled and solve them with direct methods within the iterative method.
  2. Equation-wise ordering for systems results in matrices having an \f$n\times n\f$ block structure where \f$n\f$ corresponds to the number of variables in the PDE and the blocks themselves are large and sparse. As an example we mention the Stokes system.
  3. Other discretisation, e.~g. those of reaction/diffusion systems, produce sparse matrices whose blocks are sparse matrices of small dense blocks,
Our matrix and vector interface supports a block recursive structure. Each sparse matrix entry can itself be either a sparse or a small dense matrix. The solvers use this recursive block structure via template meta programming at compile time. ISTL consists of the \ref ISTL_SPMV "matrix and vector API" and the \ref ISTL_Solvers "solvers" which use the \ref ISTL_Prec preconditioners. */