\section{General Overview\label{sec:overview}} \markboth{\textsc{MLD2P4 User's and Reference Guide}} {\textsc{\ref{sec:overview} General Overview}} The \textsc{Multi-Level Domain Decomposition Parallel Preconditioners Package based on PSBLAS (MLD2P4}) provides \emph{multi-level Schwarz preconditioners}~\cite{dd2_96}, to be used in the iterative solutions of sparse linear systems: \begin{equation} Ax=b, \label{system1} \end{equation} where $A$ is a square, real or complex, sparse matrix with a symmetric sparsity pattern. % %\textbf{NOTA: Caso non simmetrico, aggregazione con $(A+A^T)$ fatta! %Dovremmo implementare uno smoothed prolongator %adeguato e fare qualcosa di consistente anche con 1-lev Schwarz.} % These preconditioners have the following general features: \begin{itemize} \item both \emph{additive and hybrid multilevel} variants are implemented, i.e.\ variants that are additive among the levels and inside each level, and variants that are multiplicative among the levels and additive inside each level; the basic Additive Schwarz (AS) preconditioners are obtained by considering only one level; \item a \emph{purely algebraic} approach is used to generate a sequence of coarse-level corrections to a basic AS preconditioner, without explicitly using any information on the geometry of the original problem (e.g.\ the discretization of a PDE). The \emph{smoothed aggregation} technique is applied as algebraic coarsening strategy~\cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}. \end{itemize} The package is written in \emph{Fortran~95}, following an \emph{object-oriented approach} through the exploitation of features such as abstract data type creation, functional overloading and dynamic memory management. % , while providing a smooth % path towards the integration in legacy application codes. The parallel implementation is based on a Single Program Multiple Data (SPMD) paradigm for distributed-memory architectures. Single and double precision implementations of MLD2P4 are available for both the real and the complex case, that can be used through a single interface. MLD2P4 has been designed to implement scalable and easy-to-use multilevel preconditioners in the context of the \emph{PSBLAS (Parallel Sparse BLAS) computational framework}~\cite{psblas_00}. PSBLAS is a library originally developed to address the parallel implementation of iterative solvers for sparse linear system, by providing basic linear algebra operators and data management facilities for distributed sparse matrices; it also includes parallel Krylov solvers, built on the top of the basic PSBLAS kernels. The preconditioners available in MLD2P4 can be used with these Krylov solvers. The choice of PSBLAS has been mainly motivated by the need of having a portable and efficient software infrastructure implementing ``de facto'' standard parallel sparse linear algebra kernels, to pursue goals such as performance, portability, modularity ed extensibility in the development of the preconditioner package. On the other hand, the implementation of MLD2P4 has led to some revisions and extentions of the PSBLAS kernels, leading to the recent PSBLAS 2.0 version~\cite{PSBLASGUIDE}. The inter-process comunication required by MLD2P4 is encapsulated into the PSBLAS routines, except few cases where MPI~\cite{MPI1} is explicitly called. Therefore, MLD2P4 can be run on any parallel machine where PSBLAS and MPI implementations are available. MLD2P4 has a layered and modular software architecture where three main layers can be identified. The lower layer consists of the PSBLAS kernels, the middle one implements the construction and application phases of the preconditioners, and the upper one provides a uniform and easy-to-use interface to all the preconditioners. This architecture allows for different levels of use of the package: few black-box routines at the upper layer allow non-expert users to easily build any preconditioner available in MLD2P4 and to apply it within a PSBLAS Krylov solver. On the other hand, the routines of the middle and lower layer can be used and extended by expert users to build new versions of multi-level Schwarz preconditioners. We provide here a description of the upper-layer routines, but not of the medium-layer ones. This guide is organized as follows. The notational conventions used in the guide and in the naming of the MLD2P4 routines are reported in Section~\ref{sec:conventions}. Information on the distribution of the source code and the related license is given in Section~\ref{sec:distribution}, while details on the configuration and installation of package are given in Section~\ref{sec:building}. A description of multi-level Schwarz preconditioners based on smoothed aggregation is provided in Section~\ref{sec:background}, to help the users in choosing among the different preconditioners implemented in MLD2P4. The basics for building and applying the preconditioners with the Krylov solvers implemented in PSBLAS are reported in Section~\ref{sec:started}, where the Fortran 95 codes of a few sample programs are also shown. A reference guide for the upper-layer routines of MLD2P4, that are the user interface, is provided in Section~\ref{sec:userinterface}. The error handling mechanism used by the package is briefly described in Section~\ref{sec:errors}. The copyright terms concerning the distribution and modification of MLD2P4 are reported in Appendix~\ref{sec:license}. %%% Local Variables: %%% mode: latex %%% TeX-master: "userguide" %%% End: