BPKIT Block Preconditioning Toolkit
BPKIT is a toolkit of block preconditioners for the iterative solution of
linear systems. The most effective general purpose and black-box type of
preconditioners are available, including block SSOR, block tridiagonal ILU,
and the block extension of point ILU with level-of-fill. Any of these
"global" preconditioners may be coupled with one of a large collection of
"local" preconditioners for approximately or exactly inverting or solving
with the diagonal or pivot blocks. These include a number of approximate
inverse techniques. By combining a global and local preconditioner, a wide
variety of preconditionings are possible, matched to the difficulty and
structure of the problem. For example, the following popular methods are
The blocks may be stored in dense or sparse formats, and user-defined data
structures may also be used. Variable block sizes are allowed within a
matrix. Operations with the blocks call the BLAS, LAPACK, or the sparse
BLAS, for efficiency across many platforms. The selection of larger blocks
usually gives higher performance. BPKIT supports the preconditioning of a
block of vectors, to enhance efficiency when block iterative methods are
used. A flexible GMRES iterative method is provided in BPKIT for users
who do not have an iterative method readily available. A test program
reads any linear system in Harwell-Boeing format and solves it using
any combination of preconditioners and parameters specified by the user.
This is important in the "experimentation" stage when trying to solve
problems from new applications. BPKIT is written in C++ and FORTRAN.
BPKIT is not parallel; for parallel applications BPKIT is suitable for the
local solvers used in each subdomain.
Block SSOR, using level-of-fill or threshold-based ILU to solve with
the diagonal blocks
A block version of level-based ILU using "exact" inverses for the
ILU on a block tridiagonal system, using an approximate inverse technique
suitable for the structure of the pivot blocks
Matrices with no block structure may be treated as a single block,
and a single local preconditioner may be used.
BPKIT is extensible. Local and global preconditioners may be added.
A few lines of C++ must be written in order to make the new "objects"
polymorphic with the others (i.e., may be treated like other local and
global preconditioners). User-defined data structures for the blocks
and block matrices can also be added.
The source code for BPKIT is freely provided.
The software is provided "as-is" without express or implied warranty.
The authors, contributors, and their institutions are not liable for
any loss, damage, or inconvenience caused by the use of this software.
BPKIT was created in 1995-1996. The 2006 version is a small update to
match the current C++ standard.
Edmond Chow and Michael A. Heroux,
An object-oriented framework for block preconditioning (preprint),
ACM Trans. Math. Softw., 24, (1998), pp. 159-183.
Edmond Chow and Michael A. Heroux,
BPKIT Reference Manual,
University of Minnesota Supercomputing Institute
Technical Report UMSI 96/183, September 1996.
There are some additional resources not documented in the manual pages:
HBTMat.scale (scale the HBT matrix),
APINVS.print (print debugging info),
ILUT.permtol (pivot tolerance for partial pivoting),
ILUT.pblock (block size to use for pivoting),
ILUT.stat (print ILUT statistics),
BILUK.print (print debugging info).
BPKIT was created by
Edmond Chow and
(click names for contact info).