JTPACK77 is a toolkit containing various Fortran routines developed over the past several years. It contains some BLAS-like routines, some LAPACK-like routines, various iterative solvers, and utility routines like timers, random number generators, I/O routines, routines to parse command-line arguments to Fortran programs, etc.
The library was designed to allow use at a number of levels. At the most basic level, there are several high-level solver routines that can be used in almost a black-box manner for solving linear systems by accepting reasonable default values for various control parameters. Alternatively, one can exert more control by dictating control parameters or by adding user-written routines for certain operations. Finally, the library can be used as a toolkit for building and investigating new algorithms.
Many of the routines in JTPACK77 operate on entities which from a mathematical point of view are vectors or matrices. (I will refer to the computational entities corresponding to both vectors and matrices as arrays, which can be stored in a variety of formats.) Examples of operations might be:
The term ``vector'' implies a one-dimensional array, and indeed, the current implementation of JTPACK77 requires this to be the case (this restriction could be relaxed in the future). However, JTPACK77 allows considerable flexibility in how matrices are stored. Indeed, one of the most interesting aspects of JTPACK77 is that it is implemented in such a manner as to hide the storage format of matrices from all but the lowest-level routines. Matrices, typically two-dimensional mathematical objects, can be stored as a one-dimensional, two-dimensional, three-dimensional, etc. arrays for computational purposes. This means that the same high-level routines can be used for all supported storage formats, and that new storage formats can be implemented quite easily. However, at this point only a few basic storage formats have been implemented (the formats needed by myself and the current users).
In addition, JTPACK77 also provides the option of using reverse communication for all storage-dependent operations (e.g. matrix-vector multiplication, preconditioning, etc.). In this case the host code performs these operations, and JTPACK77 need know nothing about how the coefficient is stored.