HYPRE currently supports four conceptual interfaces:
Struct
): This interface
is appropriate for applications whose grids consist of unions of
logically rectangular grids with a fixed stencil pattern of nonzeros
at each grid point. This interface supports only a single unknown per
grid point.
See Chapter 3 for details.
SStruct
): This
interface is appropriate for applications whose grids are mostly
structured, but with some unstructured features. Examples include
block-structured grids, composite grids in structured adaptive mesh
refinement (AMR) applications, and overset grids. This interface
supports multiple unknowns per cell.
See Chapter 4 for details.
NOTE: This is a somewhat new interface and should be used with
caution as it matures.
FEI
): This is appropriate for
users who form their linear systems from a finite element
discretization. The interface mirrors typical finite element data
structures, including element stiffness matrices. Though this
interface is provided in HYPRE, its definition was determined
elsewhere (www.z.ca.sandia.gov/fei).
See Chapter 5 for details.
IJ
): This is the
traditional linear-algebraic interface. It can be used as a last
resort by users for whom the other grid-based interfaces are not
appropriate. It requires more work on the user's part, though still
less than building parallel sparse data structures. General solvers
and preconditioners are available through this interface, but not
specialized solvers which need more information. Our experience is
that users with legacy codes, in which they already have code for
building matrices in particular formats, find the IJ interface
relatively easy to use.
See Chapter 6 for details.
Generally, a user should choose the most specific interface that matches their application, because this will allow them to use specialized and more efficient solvers and preconditioners without losing access to more general solvers.