Multigrid can be formulated as an algorithm for an abstract problem that is independent of the partial differential equation, domain, discretization method, and number of processors. In such an abstract setting, problems not arising from partial differential equations can be treated also (c.f. aggregation-disaggregation methods). Quite general theory exists for linear problems, e.g., C. C. Douglas and J. Douglas, SIAM J. Numer. Anal., 30 (1993), pp. 136--158.
The general theory was motivated by a series of abstract solvers (Madpack). The latest version (5) was motivated by the theory and user feedback. Madpack now provides a wide variety of iterative and direct solvers, preconditioners, and interpolation and projection schemes, including user call back ones.
It allows for matrices to be stored in sparse, dense, and stencil formats. The matrices can be symmetric or nonsymmetric with real, complex, or user defined data types.
The type of solvers and design decisions (including language, data structures, external library support, and call backs) are discussed here. Based on the author's experiences with two versions of Madpack, a better approach is proposed here. This is based on a mixed language formulation (C and Fortran+preprocessor). Reasons for not just using Fortran, C, or C++ are given.
Key words: multigrid, iterative methods, solvers, computer languages