Templates offer three significant advantages. First, templates are general and reusable. Thus, they can simplify ports to diverse machines. This feature is important given the diversity of parallel architectures.

Second, templates exploit the expertise of two distinct groups. The expert numerical analyst creates a template reflecting in-depth knowledge of a specific numerical technique. The computational scientist then provides ``value-added'' capability to the general template description, customizing it for specific contexts or applications needs.

And third, templates are not language specific. Rather, they are
displayed in an Algol-like structure, which is readily translatable
into the target language such as `FORTRAN` (with the use of the
Basic Linear Algebra Subprograms, or `BLAS` ,
whenever possible) and `C`. By using these familiar styles, we
believe that the users will have trust in the algorithms. We also
hope that users will gain a better understanding of numerical
techniques and parallel programming.

For each template, we provide some or all of the following:

- a mathematical description of the flow of the iteration;
- discussion of convergence and stopping criteria;
- suggestions for applying a method to special matrix types
(
*e.g.*, banded systems); - advice for tuning (for example, which preconditioners are applicable and which are not);
- tips on parallel implementations; and
- hints as to when to use a method, and why.

For each of the templates, the following can be obtained via electronic mail.

- a
`MATLAB`implementation based on dense matrices; - a
`FORTRAN-77`program with calls to`BLAS`; - a
`C++`template implementation for matrix/vector classes.

Mon Nov 20 08:52:54 EST 1995