\section{Overview\label{overview}}
\Az{} is an iterative library that greatly simplifies the parallelization
process when solving the linear system of equations \[ Ax = b \] where $A$ is a
user supplied $n \times n$ sparse matrix, $b$ is a user supplied vector of
length $n$ and $x$ is a vector of length $n$ to be computed.  \Az{} is intended
as a software tool for users who want to avoid cumbersome parallel programming
details but who have large sparse linear systems requiring efficient use of a
parallel processing system.  The most complicated parallelization task for an
\Az{} user is the distributed matrix specification for the particular
application.  Although this may seem difficult, a collection of data
transformation tools are provided that allow creation of distributed sparse
unstructured matrices for parallel solution with ease of effort that is similar
to a serial implementation.  Background information regarding the data
transformation tools can be found in~\cite{aztec-utils}. Once the distributed
matrix is created, computation can occur on any of the parallel machines
running \Az{}: 
workstation clusters (DEC, SGI, SUN, LINUX, etc.), Cray T3E,  
Intel TeraFlop, Intel Paragon, IBM SP2, nCUBE 2 as well as other 
MPI platforms, vector machines or serial machines.

\Az{} includes a number of Krylov iterative methods such as conjugate gradient
(CG), generalized minimum residual (GMRES) and stabilized biconjugate gradient
(BiCGSTAB) to solve systems of equations.  These Krylov methods are used in
conjunction with various preconditioners such as polynomial preconditioners or
domain decomposition using LU or incomplete LU factorizations within
subdomains.  Background information concerning the iterative methods and the
preconditioners can be found in~\cite{aztec-alg}.  Although the matrix $A$ can
be general, the package has been designed for matrices arising from the
approximation of partial differential equations (PDEs). In particular, the
preconditioners, iterative methods and parallelization techniques are oriented
toward systems arising from PDE applications.  Lastly, \Az{} can work
with user-supplied matrix-vector product routines or two specific
sparse matrix formats 
(in which case \Az{} provides the matrix-vector product)
% and can perform incomplete factorizations)
-- a point-entry modified sparse row
(MSR) format or a block-entry variable block row (VBR) format.  These two
formats have been generalized for parallel implementation and, as such, are
referred to as ``distributed'' yielding DMSR and DVBR references.

The remainder of this guide describes how \Az{} is invoked within an
application.  \Az{} is written in ANSI-standard C and as such, all arrays in
the descriptions which follow begin indexing with 0.  Also, all function
prototypes (loosely, descriptions) are presented in ANSI C format.
Section~\ref{highlevel} discusses iterative method, preconditioning and
convergence options.  Section~\ref{data_formats} explains vectors and sparse
matrix formats supported by \Az{}.  In Section~\ref{highlevel_data_inter} we
discuss the data transformation tool for creating distributed vectors and
matrices. A concrete detailed programming example using this tool is given in
Section~\ref{examples} and some advance topics are discussed in
Section~\ref{advanced_topics}.  
Finally, 
Section~\ref{matrix.free} discusses Aztec's matrix-free interface and
Section~\ref{subroutines} gives a
glossary of \Az{} functions available to users.
% while in Section~\ref{comp_link} we discuss
%compiling and linking \Az{} on different systems with different
%applications.

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "az_ug_20"
%%% End:
