docs/pdf/Makefile
 docs/pdf/background.tex
 docs/pdf/building.tex
 docs/pdf/conventions.tex
 docs/pdf/gettingstarted.tex
 docs/pdf/highlevelview.tex
 docs/pdf/title.tex
 docs/pdf/userguide.tex
 docs/pdf/userinterface.tex
 docs/userguide.pdf

further documentation fixes.
stopcriterion
Salvatore Filippone 17 years ago
parent 593cc629ae
commit fcf632ccdd

@ -86,7 +86,7 @@
TOPFILE = userguide.tex TOPFILE = userguide.tex
SECFILE = title.tex abstract.tex overview.tex conventions.tex distribution.tex \ SECFILE = title.tex abstract.tex overview.tex conventions.tex distribution.tex \
building.tex gettingstarted.tex highlevelview.tex advanced.tex errors.tex \ building.tex gettingstarted.tex highlevelview.tex advanced.tex errors.tex \
listofroutines.tex bibliography.tex listofroutines.tex bibliography.tex userinterface.tex
FIGDIR = figures FIGDIR = figures
XPDFFLAGS = XPDFFLAGS =

@ -67,8 +67,8 @@ is referred to \cite{para_04,apnum_07,aaecc_07,dd2_96}.
\subsection{Multi-level Schwarz Preconditioners\label{sec:multilevel}} \subsection{Multi-level Schwarz Preconditioners\label{sec:multilevel}}
The Multilevel preconditioners implemented in MLD2P4 are obtained by combining The Multilevel preconditioners implemented in MLD2P4 are obtained by combining
Additive Schwarz preconditioners with coarse-space corrections; therefore AS preconditioners with coarse-space corrections; therefore
we first provide a sketch of the Additive Schwarz preconditioners. we first provide a sketch of the AS preconditioners.
Given the linear system \Ref{system1}, Given the linear system \Ref{system1},
where $A=(a_{ij}) \in \Re^{n \times n}$ is a where $A=(a_{ij}) \in \Re^{n \times n}$ is a
@ -199,7 +199,7 @@ preconditioner is symmetric if $A$, $M_{1L}$ and $M_{C}$ are symmetric.
As previously noted, on parallel computers the number of sumatrices usually matches As previously noted, on parallel computers the number of sumatrices usually matches
the number of available processors. When the size of the system to be preconditioned the number of available processors. When the size of the system to be preconditioned
is very large, the use of many proccessors, i.e.\ of many small submatrices, often is very large, the use of many processors, i.e.\ of many small submatrices, often
leads to a large coarse-level system, whose solution may be computationally expensive. leads to a large coarse-level system, whose solution may be computationally expensive.
On the other hand, the use of few processors often leads to local sumatrices that On the other hand, the use of few processors often leads to local sumatrices that
are too expensive to be processed on single processors, because of memory and/or are too expensive to be processed on single processors, because of memory and/or
@ -213,9 +213,9 @@ are obtained as direct extensions of the two-level counterparts. Other combinati
of the smoothers and coarse-level corrections are possible, leading to variants of the smoothers and coarse-level corrections are possible, leading to variants
of the previous algorithms. For a detailed descrition of them, the reader is of the previous algorithms. For a detailed descrition of them, the reader is
referred to \cite[Chapter 3]{dd2_96}. referred to \cite[Chapter 3]{dd2_96}.
\textbf{Secondo me qui ci vorrebbe una descrizione algoritmica, a titolo di esempio, \textbf{DESCRIZIONE ALGORITMICA, a titolo di esempio,
di un precondizionatore multilevel, ad esempio quello ibrido con pre-smoothing, sul tipo di un precondizionatore multilevel, ad esempio quello ibrido con pre- o post-smoothing,
della descrizione in figura 1 della guida di Trilinos ML 4.0. CHE NE PENSATE?} sul tipo della descrizione in figura 1 della guida di Trilinos ML 4.0.}
\subsection{Smoothed Aggregation\label{sec:aggregation}} \subsection{Smoothed Aggregation\label{sec:aggregation}}
@ -242,8 +242,11 @@ in \cite{apnum_07}. According to \cite{brezina_vanek}, a modification of this al
has been actually considered, has been actually considered,
in which each aggregate $N_r$ is made of vertices of $W$ that are \emph{strongly coupled} in which each aggregate $N_r$ is made of vertices of $W$ that are \emph{strongly coupled}
to a certain root vertex $r \in W$, i.e.\ to a certain root vertex $r \in W$, i.e.\
\[ N_r = \left\{s \in W: |a_{rs}| \geq \theta \sqrt{|a_{rr}a_{ss}|} \right\} \] \[ N_r = \left\{s \in W: |a_{rs}| > \theta \sqrt{|a_{rr}a_{ss}|} \right\}
for a given $\theta \in [0,1]$. \cup \left\{ r \right\} ,
\]
for a given $\theta \in [0,1]$. \textbf{L'ALGORITMO USA IL MAGGIORE STRETTO? ALTRIMENTI
CON THETA=0 AGGREGHIAMO ANCHE I VERTICI CON COEFFICIENTE CORRISPONDENTE NULLO}
Since the previous algorithm has a sequential nature, a \emph{decoupled} version of Since the previous algorithm has a sequential nature, a \emph{decoupled} version of
it has been chosen, where each processor $i$ independently applies the algorithm to it has been chosen, where each processor $i$ independently applies the algorithm to
the set of vertices $W_i^0$ assigned to it in the initial data distribution. This the set of vertices $W_i^0$ assigned to it in the initial data distribution. This
@ -252,7 +255,8 @@ On the other hand, it may produce non-uniform aggregates near boundary vertices,
i.e.\ near vertices adjacent to vertices in other processors, and is strongly i.e.\ near vertices adjacent to vertices in other processors, and is strongly
dependent on the number of processors and on the initial partitioning of the matrix $A$. dependent on the number of processors and on the initial partitioning of the matrix $A$.
Nevertheless, this algorithm has been chosen for the implementation in MLD2P4, Nevertheless, this algorithm has been chosen for the implementation in MLD2P4,
since it has been shown to produce good results in practice \cite{Tuminaro_Tong_00}. since it has been shown to produce good results in practice
\cite{Tuminaro_Tong_00,apnum_07,aaecc_07}.
The prolongator $P_C=R_C^T$ is built starting from a \emph{tentative prolongator} The prolongator $P_C=R_C^T$ is built starting from a \emph{tentative prolongator}
$P \in \Re^{n \times n_C}$, defined as $P \in \Re^{n \times n_C}$, defined as

@ -1,7 +1,7 @@
\section{Configuring and Building MLD2P4\label{sec:configuring}} \section{Configuring and Building MLD2P4\label{sec:configuring}}
- uso di GNU autoconf e automake \\ - uso di GNU autoconf e automake \\
- software di base necessario (MPI, BLACS, BLAS, PSBLAS - specificare versioni) \\ - software di base necessario (MPI, BLACS, BLAS, PSBLAS, UMFPACK ? - specificare versioni)\\
- software opzionale (UMFPACK, SuperLU, SuperLUdist - specificare versioni e opzioni di configure) \\ - software opzionale (SuperLU, SuperLUdist - specificare versioni e opzioni di configure)\\
- sistemi operativi e compilatori su cui MLD2P4 e' stato costruito con successo \\ - sistemi operativi e compilatori su cui MLD2P4 e' stato costruito con successo \\
- sono previste opzioni di configurazione per il debugging o per il profiling? \\ - sono previste opzioni di configurazione per il debugging o per il profiling? \\
- albero delle directory \\ - albero delle directory generato al momento dell'installazione\\

@ -1,6 +1,5 @@
\section{Notational Conventions\label{sec:conventions}} \section{Notational Conventions\label{sec:conventions}}
- caratteri tipografici usati nella guida (vedi guida ML recente e guida Aztec) \\ - caratteri tipografici usati nella guida (vedi guida ML recente e guida Aztec) \\
- convenzioni sui nomi di routine (differenza tra high-level e medium-level), - convenzioni sui nomi di routine (differenza nei nomi tra high-level e medium-level),
strutture dati,\\ strutture dati, moduli, costanti, etc. (vedi guida psblas) \\
moduli, costanti, etc. (vedi guida psblas) \\ - versione reale e complessa, singola e doppia precisione\\
- versione reale e complessa\\

@ -5,7 +5,7 @@ Schwarz preconditioners with the Krylov solvers included in PSBLAS \cite{}.
The following steps are required: The following steps are required:
\begin{enumerate} \begin{enumerate}
\item \emph{Declare the preconditioner data structure}. It is a derived data type, \item \emph{Declare the preconditioner data structure}. It is a derived data type,
\verb|mld_|\emph{x}\verb|prec_type|,where \emph{x} may be \verb|s|, \verb|d|, \verb|c| \verb|mld_|\-\emph{x}\verb|prec_type|, where \emph{x} may be \verb|s|, \verb|d|, \verb|c|
or \verb|z|, according to the basic data type of the sparse matrix or \verb|z|, according to the basic data type of the sparse matrix
(\verb|s| = real single precision; \verb|d| = real double precision; (\verb|s| = real single precision; \verb|d| = real double precision;
\verb|c| = complex single precision; \verb|z| = complex double precision). \verb|c| = complex single precision; \verb|z| = complex double precision).
@ -13,43 +13,55 @@ The following steps are required:
following an object-oriented approach. following an object-oriented approach.
\item \emph{Allocate and initialize the preconditioner data structure, according to \item \emph{Allocate and initialize the preconditioner data structure, according to
a preconditioner type chosen by the user}. This is performed by the routine a preconditioner type chosen by the user}. This is performed by the routine
\verb|mld_precinit|, which also sets a default preconditioner for each preconditioner \verb|mld_precinit|, which also sets defaults for each preconditioner
type selected by the user. The default preconditioner associated to each preconditioner type selected by the user. The defaults associated to each preconditioner
type is listed in Table~\ref{tab:precinit}; the string used by \verb|mld_precinit| type are listed in Table~\ref{tab:precinit}, where the strings used by
to identify each preconditioner type is also given. \verb|mld_precinit| to identify the preconditioner types are also given.
\item \emph{Choose a specific preconditioner within the selected preconditioner type, by setting \item \emph{Modify the selected preconditioner type, by properly setting
the preconditioner parameters.} This is performed by the routine \verb|mld_precset|. preconditioner parameters.} This is performed by the routine \verb|mld_precset|.
This routine must be called only if the user wants to modify the default values This routine must be called only if the user wants to modify the default values
of the parameters associated to the selected preconditioner type, to obtain a variant of the parameters associated to the selected preconditioner type, to obtain a variant
of the default preconditioner. of the preconditioner.
An example of use of \verb|mld_precset| is given in Examples of use of \verb|mld_precset| is given in Section~\ref{sec:examples};
Section~\ref{sec:examples}, Figure~\ref{fig:example2}; a complete list of all the a complete list of all the
preconditioner parameters and their allowed and default values is provided in preconditioner parameters and their allowed and default values is provided in
Section~\ref{sec:highlevel}. Section~\ref{sec:userinterface}, Tables~\ref{tab:p_type}-\ref{tab:p_coarse}.
\item \emph{Build the preconditioner for a given matrix.} This is performed by \item \emph{Build the preconditioner for a given matrix.} This is performed by
the routine \verb|mld_precbld|. the routine \verb|mld_precbld|.
\item \emph{Apply the preconditioner at each iteration of a Krylov solver.} \item \emph{Apply the preconditioner at each iteration of a Krylov solver.}
This is performed by the routine \verb|mld_precaply|. When using the PSBLAS Krylov solvers, This is performed by the routine \verb|mld_precaply|. When using the PSBLAS Krylov solvers,
this step is completely transparent to the user, since \verb|mld_precaply| is called this step is completely transparent to the user, since \verb|mld_precaply| is called
by the PSBLAS routine implementing the Krylov solver (\verb|psb_krylov|). by the PSBLAS routine implementing the Krylov solver (\verb|psb_krylov|).
\item \emph{Deallocate the preconditioner data structure}. This is performed by \item \emph{Free the preconditioner data structure}. This is performed by
the routine \verb|mld_precfree|. This step is complementary to step 1 and should the routine \verb|mld_precfree|. This step is complementary to step 1 and should
be performed when the preconditioner is no more used. be performed when the preconditioner is no more used.
\end{enumerate} \end{enumerate}
A detailed description of the above routines is given in Section~\ref{sec:highlevel}. A detailed description of the above routines is given in Section~\ref{sec:userinterface}.
Note that the Fortran 95 module \verb|mld_prec_mod| must be used in the program Note that the Fortran 95 module \verb|mld_prec_mod| must be used in the program
calling the MLD2P4 routines. Furthermore, to apply MLD2P4 with the Krylov solvers calling the MLD2P4 routines. Furthermore, to apply MLD2P4 with the Krylov solvers
from PSBLAS, the module \verb|psb_krylov_mod| must be used too. from PSBLAS, the module \verb|psb_krylov_mod| must be used too.
\textbf{DOBBIAMO SPECIFICARE QUALCHE ALTRO MODULO, AD ESEMPIO psb\_base\_mod?}
Examples showing the basic use of MLD2P4 are reported in Section~\ref{sec:examples}. Examples showing the basic use of MLD2P4 are reported in Section~\ref{sec:examples}.
\noindent
\textbf{Remark.} The coarsest-level solver used by the default two-level
preconditioner has been chosen by taking into account that, on parallel
machines, it often leads to the smallest execution time when applied to
linear systems coming from finite-difference discretizations of basic
elliptic PDE problems, considered as standard tests for multi-level Schwarz
preconditioners \cite{apnum_07,aaecc_07}. However, this solver does not correspond
to the smallest number of iterations of the preconditioned Krylov method, which is
usually obtained by applying a direct solver, e.g.\ based on the LU factorization, at
the coarsest level (see Section~\ref{sec:userinterface} for coarsest-level
solvers available in MLD2P4).
\begin{table}[th] \begin{table}[th]
{ {
\begin{center} \begin{center}
\begin{tabular}{|l|l|p{6.7cm}|} \begin{tabular}{|l|l|p{6.7cm}|}
\hline \hline
Type & String & Default preconditioner \\ \hline \emph{Type} & \emph{String} & \emph{Default preconditioner} \\ \hline
No preconditioner &\verb|'NOPREC'|& (Considered only to use the PSBLAS No preconditioner &\verb|'NOPREC'|& (Considered only to use the PSBLAS
Krylov solvers with no preconditioner.) \\ Krylov solvers with no preconditioner.) \\
Diagonal & \verb|'DIAG'| & --- \\ Diagonal & \verb|'DIAG'| & --- \\
@ -59,39 +71,47 @@ Additive Schwarz & \verb|'AS'| & Restricted Additive Schwarz (RAS),
Multilevel &\verb|'ML'| & Multi-level hybrid preconditioner (additive on the Multilevel &\verb|'ML'| & Multi-level hybrid preconditioner (additive on the
same level and multiplicative through the levels), same level and multiplicative through the levels),
with post-smoothing only. Number of levels: 2; with post-smoothing only. Number of levels: 2;
post-smoother: block-Jacobi preconditioner with ILU(0) post-smoother: RAS with overlap 1 and with ILU(0)
on the local blocks; coarsest matrix: distributed among the on the local blocks; coarsest matrix: distributed
processors; corase-level solver: 4 sweeps of the block-Jacobi among the processors; (approximate) coarse-level
solver, with the UMFPACK LU factorization on the blocks. \\ solver: 4 sweeps of the block-Jacobi solver,
with the UMFPACK LU factorization
on the blocks (double precision versions) or
\textbf{XXXXXXXXX} (single precision versions)\\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
} }
\caption{Preconditioner types and default choices.\label{tab:precinit}} \caption{Preconditioner types, corresponding strings and default choices.
\label{tab:precinit}}
\end{table} \end{table}
\subsection{Examples\label{sec:examples}} \subsection{Examples\label{sec:examples}}
The code reported in Figure~\ref{fig:example1} shows how to set and apply the MLD2P4 default The code reported in Figure~\ref{fig:ex_default} shows how to set and apply the default
multi-level preconditioner, i.e.\ the two-level hybrid post-smoothed Schwarz preconditioner, multi-level preconditioner available in the real double precision version
having block-Jacobi with ILU(0) on the blocks as basic preconditioner, of MLD2P4 (see Table~\ref{tab:precinit}). This preconditioner is chosen
a coarse matrix distributed among the processors, and four block-Jacobi
sweeps, with the UMFPACK sparse LU factorization on the blocks, as approximate coarse-level solver.
The choice of this preconditioner is made
by simply specifying \verb|'ML'| as second argument of \verb|mld_precinit| by simply specifying \verb|'ML'| as second argument of \verb|mld_precinit|
(a call to \verb|mld_precset| is not needed). (a call to \verb|mld_precset| is not needed) and is applied with the BiCGSTAB
The preconditioner is applied with the BiCGSTAB solver provided by PSBLAS. solver provided by PSBLAS. The setup and application of the default multi-level
preconditioners for the real single precision and the complex, single and double
precision, versions are obtained with straightforward modifications of the example.
The part of the code concerning the The part of the code concerning the
reading and assembling of the sparse matrix and the right-hand side vector, performed reading and assembling of the sparse matrix and the right-hand side vector, performed
through the PSBLAS routines for sparse matrix and vector management, is not reported through the PSBLAS routines for sparse matrix and vector management, is not reported
here for brevity; the statements concerning the deallocation of the PSBLAS data structure here for brevity; the statements concerning the deallocation of the PSBLAS data structure
are neglected too. are neglected too.
The complete code can be found in the example program file \verb|example_ml_default.f90| The complete code can be found in the example program file \verb|example_ml.f90|
in the directory \textbf{XXXXXX (SPECIFICARE).} Note that the modules \verb|psb_base_mod| in the directory \textbf{XXXXXX (COMPLETARE. DIRE CHE I FILE IN REALTA' SONO DUE, UNO CON
LA GENERAZIONE DELLA MATRICE ED UNO CON LA LETTURA).} Note that the modules \verb|psb_base_mod|
and \verb|psb_util_mod| at the beginning of the code are required by PSBLAS. and \verb|psb_util_mod| at the beginning of the code are required by PSBLAS.
\textbf{O psb\_base\_mod} E' RICHIESTO ANCHE DA MLD2P4?)
For details on the use of the PSBLAS routines, see the PSBLAS User's Guide \cite{}. For details on the use of the PSBLAS routines, see the PSBLAS User's Guide \cite{}.
\textbf{LE FIGURE SONO DECENTRATE, NONOSTANTE IL CENTER. CI VUOLE UNA MINIPAGE?}
\begin{figure}[tbp] \begin{figure}[tbp]
\begin{center} \begin{center}
{\small {\small
@ -120,14 +140,15 @@ For details on the use of the PSBLAS routines, see the PSBLAS User's Guide \cite
! vector management ! vector management
... ... ... ...
! !
! initialize the default multi-level preconditioner ! initialize the default multi-level preconditioner,
! (two-level hybrid Schwarz, with ILU(0) as post-smoother ! i.e. two-level hybrid Schwarz, using RAS (with
! and 4 Block-Jacobi sweeps, with ILU(0) on the blocks, ! overlap 1 and ILU(0) on the blocks) as post-smoother
! as distributed coarsest-level solver) ! and 4 block-Jacobi sweeps (with UMFPACK LU on the
! blocks) as distributed coarse-level solver
call mld_precinit(P,'ML',info) call mld_precinit(P,'ML',info)
! !
! build the preconditioner ! build the preconditioner
call psb_precbld(A,P,DESC_A,info) call psb_precbld(A,P,desc_A,info)
! !
! set the solver parameters and the initial guess ! set the solver parameters and the initial guess
... ... ... ...
@ -147,91 +168,103 @@ For details on the use of the PSBLAS routines, see the PSBLAS User's Guide \cite
stop stop
\end{verbatim} \end{verbatim}
} }
\caption{Setup and application of the default multilevel Schwarz preconditioner. \caption{Setup and application of the default multi-level Schwarz preconditioner.
\label{fig:example1}} \label{fig:ex_default}}
\end{center} \end{center}
\end{figure} \end{figure}
Different versions of multilevel preconditioner can be obtained by changing Different versions of multilevel preconditioner can be obtained by changing
the default values of the preconditioner parameters. The code reported in the default values of the preconditioner parameters. The code reported in
Figure~\ref{fig:example2} shows how to set a three-level hybrid Schwarz preconditioner Figure~\ref{fig:ex_3lh} shows how to set a three-level hybrid Schwarz
using RAS with overlap 1 as post-smoother, a coarsest matrix replicated preconditioner, which uses block Jacobi with ILU(0) on the
on the processors and the LU factorization from UMFPACK as coarse-level solver. local blocks as post-smoother, a coarsest matrix replicated on the processors,
and the LU factorization from UMFPACK as coarse-level solver.
The number of levels is specified by using \verb|mld_precinit|; the other The number of levels is specified by using \verb|mld_precinit|; the other
preconditioner parameters are set by calling \verb|mld_precset|. Note that preconditioner parameters are set by calling \verb|mld_precset|. Note that
the type of multilevel framework (i.e.\ multiplicative among the levels, the type of multilevel framework (i.e.\ multiplicative among the levels
which corresponds to the hybrid multilevel preconditioner); the type with post-smoothing only) is not specified since it is the default
of one-level AS preconditioner used as smoother (i.e.\ RAS) set by \verb|mld_precinit|. Figure~\ref{fig:ex_3la} shows how to
and its ``position'' (i.e.\ pre-smoother) are not specified since they set a three-level additive Schwarz preconditioner,
are chosen by default when \verb|mld_precinit| is called. which applies RAS, with overlap 1 and ILU(0) on the blocks,
The construction and the application of the preconditioner as pre- and post-smoother, and five block-Jacobi sweeps, with
the UMFPACK LU factorization on the blocks, as distributed coarsest-level
solver. Again, \verb|mld_precset| is used only to set
non-default values of the parameters (see Tables~\ref{tab:ptype}-\ref{tab:pcoarse}).
In both cases, the construction and the application of the preconditioner
are carried out as for the default multi-level preconditioner. are carried out as for the default multi-level preconditioner.
The code fragments shown in in Figures~\ref{fig:ex_3lh}-\ref{fig:3la} are
included in the example program file \verb|example_ml.f90|.
\textbf{LO STESSO PROGRAMMA CONTIENE I TRE ESEMPI, CON UN SWITCH TRA L'UNO E L'ALTRO
O FACCIAMO 3 PROGRAMMI DISTINTI? NON RICORDO CHE COSA ABBIAMO DECISO.}
As a further example, we report in Figure~\ref{fig:example3} the code Finally, Figure~\ref{fig:ex_1l} shows the setup of a one-level
concerning the setup of a three-level additive multi-level preconditioner, additive Schwarz preconditioner, i.e. RAS with overlap 2. The corresponding code,
using ILU(0) as pre- and post-smoother, a distributed coarsest matrix and including also the application of the preconditioner is in the example
five block-Jacobi sweeps as coarsest-level solver, with program file \verb|example_1lev.f90|.
ILU(0) on the local blocks. Again, \verb|mld_precset| is used only to set
the values of the parameters that are not default values.
For a detailed description of the parameters associated to a preconditioner
type, including their allowed and default values, the user is referred to
\textbf{SPECIFICARE.}
An example program including the code fragments
shown in in Figures~\ref{fig:example2} and \ref{fig:example3} is in
\verb|XXX/.../example_3lev.f90|. \textbf{COMPLETARE. Fare un programma solo
per i due esempi, in cui uno e' commentato e l'altro no.}
One more example program, showing the setup and application of a one-level
additive Schwarz preconditioner can be found in \verb|XXX/.../example_1lev.f90|.
\textbf{COMPLETARE}.
\begin{figure}[tbp] \begin{figure}[tbp]
\begin{center} \begin{center}
{\small {\small
\begin{verbatim} \begin{verbatim}
... ... ... ...
! setup a three-level hybrid Schwarz preconditioner, ! set a three-level hybrid Schwarz preconditioner,
! using RAS with overlap 1 as post-smoother, a coarsest ! which uses block Jacobi (with ILU(0) on the blocks)
! matrix replicated on the processors, and the LU ! as post-smoother, a coarsest matrix replicated on the
! factorization from UMFPACK as coarse-level solver ! processors, and the LU factorization from UMFPACK
! as coarse-level solver
call mld_precinit(P,'ML',info,nlev=3) call mld_precinit(P,'ML',info,nlev=3)
call_mld_precset(P,mld_smooth_type_,'AS',info) call_mld_precset(P,mld_smoother_type_,'BJAC',info)
call mld_precset(P,mld_n_ovr_,1,info)
call mld_precset(P,mld_coarse_mat,'REPL') call mld_precset(P,mld_coarse_mat,'REPL')
call mld_precset(P,mld_coarse_solve,'UMF') call mld_precset(P,mld_coarse_solve,'UMF')
... ... ... ...
\end{verbatim} \end{verbatim}
} }
\caption{Setup of a hybrid three-level Schwarz preconditioner.\label{fig:example2}} \caption{Setup of a hybrid three-level Schwarz preconditioner.\label{fig:ex_3lh}}
\end{center} \end{center}
\end{figure} \end{figure}
\begin{figure}[tbp] \begin{figure}[htb]
\begin{center} \begin{center}
{\small {\small
\begin{verbatim} \begin{verbatim}
... ... ... ...
! setup a three-level additive Schwarz preconditioner, ! set a three-level additive Schwarz preconditioner,
! using ILU(0) as pre- and post-smoother, five block-Jacobi ! which uses RAS (with overlap 1 and ILU(0) on the blocks)
! sweeps as distributed coarsest-level solver, with ILU(0) ! as pre- and post-smoother, and 5 block-Jacobi sweeps
! on the local blocks ! (with UMFPACK LU on the blocks) as distributed
! coarsest-level solver
call mld_precinit(P,'ML',info,nlev=3) call mld_precinit(P,'ML',info,nlev=3)
call mld_precset(P,mld_ml_type_,'ADD',info) call mld_precset(P,mld_ml_type_,'ADD',info)
call_mld_precset(P,mld_smooth_pos_,'TWOSIDE',info) call_mld_precset(P,mld_smoother_pos_,'TWOSIDE',info)
call mld_precset(P,mld_n_ovr_,1,info) call mld_precset(P,mld_coarse_sweeps_,5)
call mld_precset(P,mld_coarse_sweeps,5) ... ...
call mld_precset(P,mld_coarse_subsolve,'UMF') \end{verbatim}
}
\caption{Setup of an additive three-level Schwarz preconditioner.\label{fig:ex_3la}}
\end{center}
\end{figure}
\begin{figure}[htb]
\begin{center}
{\small
\begin{verbatim}
... ...
! set RAS with overlap 2 and ILU(0) on the local blocks
call mld_precinit(P,'AS',info)
call mld_precset(P,mld_sub_ovr_,2,info)
... ... ... ...
\end{verbatim} \end{verbatim}
} }
\caption{Setup of an additive three-level Schwarz preconditioner.\label{fig:example3}} \caption{Setup of a one-level Schwarz preconditioner.\label{fig:ex_1l}}
\end{center} \end{center}
\end{figure} \end{figure}
\ \\ \ \\
\textbf{Note.} Any PSBLAS-based program using the basic preconditioners implemented in PSBLAS 2.0, \textbf{Remark.} Any PSBLAS-based program using the basic preconditioners
i.e.\ the diagonal and block-Jacobi ones, can use the diagonal and block-Jacobi preconditioners implemented in PSBLAS 2.0, i.e.\ the diagonal and block-Jacobi ones,
implemented in MLD2P4 without any change in the code. The PSBLAS-base program must e only recompiled can use the diagonal and block-Jacobi preconditioners
implemented in MLD2P4 without any change in the code.
The PSBLAS-based program must be only recompiled
and linked to the MLD2P4 library. and linked to the MLD2P4 library.
%%% Local Variables: %%% Local Variables:

@ -6,21 +6,34 @@ for the setup and application of any one-level and multi-level preconditioner im
The routine \verb|mld_precfree| deallocates the preconditioner data structure, while \verb|mld_precdescr| The routine \verb|mld_precfree| deallocates the preconditioner data structure, while \verb|mld_precdescr|
prints a description of the preconditioner setup by the user. prints a description of the preconditioner setup by the user.
For each routine, the same user interface is available independently of the real or complex case For each routine, the same user interface is available independently of the real/complex case
and of the single or double precision. However, the appropriate preconditioner data type to be used with and of the single/double precision. However, arguments with appropriate data types must
each version of the package must be explicitly chosen by the user, i.e.\ a preconditioner data structure of type \verb|mld_|\emph{x}\verb|prec_type| must be declared, where \emph{x} = \verb|s| for real single precision, be passed to the routine, i.e.\
\emph{x} = \verb|d| for real double precision, \emph{x} = \verb|c| for complex single precision, \begin{itemize}
\emph{x} = \verb|z| for complex double precision. A few parameters defining the preconditioner may be \item the sparse matrix data structure, containing the matrix to be preconditioned, must be of type
real single or double precision, depending on the package version (see Section~\ref{sec:precset}). \verb|mld_|\emph{x}\verb|spmat_type|
with \emph{x} = \verb|s| for real single precision, \emph{x} = \verb|d| for real double precision,
\emph{x} = \verb|c| for complex single precision, \emph{x} = \verb|z| for complex double precision;
\item the preconditioner data structure must be of type \verb|mld_|\emph{x}\verb|prec_type|, with \emph{x} =
\verb|s|, \verb|d|, \verb|c|, \verb|z|, according to the sparse matrix data structure;
\item the arrays containing the vectors $v$ and $w$ involved in the preconditioner application $w=M^{-1}v$
must be of type \emph{type}\verb|(|\emph{precision}\verb|)|, with \emph{type} = \verb|real|, \verb|complex| and
\emph{precision} = \verb|1.|, \verb|1.d0|, according to the sparse matrix and preonditioner data structure;
\item some parameters defining the preconditioner are \verb|real(1.)| or \verb|real(1.d0)|, according
to the precision of the previous data structures (see Section \ref{sec:precset}).
\end{itemize}
A description of each routine is given in the remainder of this section. A description of each routine is given in the remainder of this section.
\subsection{Subroutine mld\_precinit\label{sec:precinit}} \subsection{Subroutine mld\_precinit\label{sec:precinit}}
\begin{center} \begin{center}
\begin{tabular}{|c|}
\hline
\verb|mld_precinit(p,ptype,info)|\\ \verb|mld_precinit(p,ptype,info)|\\
\verb|mld_precinit(p,ptype,info,nlev)| \verb|mld_precinit(p,ptype,info,nlev)|\\
\hline
\end{tabular}
\end{center} \end{center}
\noindent \noindent
@ -29,7 +42,7 @@ according to the preconditioner type chosen by the user.
\subsubsection*{Arguments} \subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{10.6cm}} \begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\ \verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according & The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\ to the real/complex, single/double precision version of MLD2P4 under use.\\
@ -58,7 +71,7 @@ contained in \verb|val|.
\subsubsection*{Arguments} \subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{10.6cm}} \begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\ \verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according & The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\ to the real/complex, single/double precision version of MLD2P4 under use.\\
@ -99,13 +112,9 @@ This should be done by users with experience in the field of multi-level precond
Non-expert users are recommended to call \verb| mld_precset| without specifying \verb|ilev|. Non-expert users are recommended to call \verb| mld_precset| without specifying \verb|ilev|.
\begin{table}[p] % \begin{table}[p]
{\small \begin{sidewaystable}
\begin{center} \begin{center}
\textbf{QUESTA TABELLA VA RUOTATA DI 90 GRADI E SUDDIVISA IN DUE TABELLE, TOGLIENDO SMALL}
\hspace*{-3cm}
\begin{tabular}{|l|l|p{1.5cm}|l|p{6cm}|} \begin{tabular}{|l|l|p{1.5cm}|l|p{6cm}|}
\hline \hline
\verb|what| & \emph{data type} & \verb|val| & \verb|ilev| & \emph{comments} \\ \hline \verb|what| & \emph{data type} & \verb|val| & \verb|ilev| & \emph{comments} \\ \hline
@ -128,7 +137,15 @@ Non-expert users are recommended to call \verb| mld_precset| without specifying
& ``position'' of the smoother: pre-smoother, post-smoother, pre-/post-smoother & ``position'' of the smoother: pre-smoother, post-smoother, pre-/post-smoother
\textbf{per l'utente NON HA SENSO settarlo ai livelli 2,..., nlev; l'utente \textbf{per l'utente NON HA SENSO settarlo ai livelli 2,..., nlev; l'utente
deve specificare un livello tra 1 e nlev-1 e la precset deve shiftare il livello deve specificare un livello tra 1 e nlev-1 e la precset deve shiftare il livello
tenendo conto della struttura del tipo di dato precondizionatore} \\ \hline tenendo conto della struttura del tipo di
dato precondizionatore} \\ \hline
\end{tabular}
\end{center}
\end{sidewaystable}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{1.5cm}|l|p{6cm}|}
\multicolumn{5}{|c|}{\emph{basic one-level preconditioner (smoother)}} \\ \hline \multicolumn{5}{|c|}{\emph{basic one-level preconditioner (smoother)}} \\ \hline
\verb|mld_n_ovr| & \verb|mld_n_ovr| &
& &
@ -158,6 +175,14 @@ Non-expert users are recommended to call \verb| mld_precset| without specifying
& &
& &
& \textbf{MANCA COSTANTE STRINGA ASSOCIATA} \\ \hline & \textbf{MANCA COSTANTE STRINGA ASSOCIATA} \\ \hline
\end{tabular}
\end{center}
\end{sidewaystable}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{1.5cm}|l|p{6cm}|}
\multicolumn{5}{|c|}{\emph{aggregation algorithm}} \\ \hline \multicolumn{5}{|c|}{\emph{aggregation algorithm}} \\ \hline
\verb|mld_aggr_alg_| & \verb|mld_aggr_alg_| &
& &
@ -175,6 +200,12 @@ Non-expert users are recommended to call \verb| mld_precset| without specifying
& &
& &
& \textbf{NON E' DEFINITA LA STRINGA CORRISPONDENTE a mld\_max\_norm} \\ \hline & \textbf{NON E' DEFINITA LA STRINGA CORRISPONDENTE a mld\_max\_norm} \\ \hline
\end{tabular}
\end{center}
\end{sidewaystable}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{1.5cm}|l|p{6cm}|}
\multicolumn{5}{|c|}{\emph{coarse-space correction at the coarsest level}} \\ \hline \multicolumn{5}{|c|}{\emph{coarse-space correction at the coarsest level}} \\ \hline
\verb|mld_coarse_mat_| & \verb|mld_coarse_mat_| &
& &
@ -202,13 +233,130 @@ Non-expert users are recommended to call \verb| mld_precset| without specifying
& \textbf{AGGIUNGERE THRESHOLD ILU(t)} \\ \hline & \textbf{AGGIUNGERE THRESHOLD ILU(t)} \\ \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
} \end{sidewaystable}
\caption{Parameters defining the preconditioner.\label{tab:precinit}} % \caption{Parameters defining the preconditioner.\label{tab:precinit}}
\end{table}
\clearpage
\subsection{Subroutine mld\_precbld\label{sec:precbld}}
\begin{center}
\verb|mld_precbld(a,desc_a,p,info)|\\
\end{center}
\noindent
This routine builds the preconditioner according to the requirements made by
the user through the routines \verb|mld_precinit| and \verb|mld_precset|.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|a| & \verb|type(psb_|\emph{x}\verb|spmat_type), intent(in)|. \\
& The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.
See the PSBLAS User's Guide for details \cite{ }.\\
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor of a. See the PSBLAS User's Guide for
details \cite{ }.\\
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\end{tabular}
\clearpage \clearpage
\subsection{Subroutine mld\_precaply\label{sec:precaply}}
\begin{center}
\verb|mld_precaply(p,x,y,desc_a,info)|\\
\verb|mld_precaply(p,x,y,desc_a,info,trans,work)|\\
\end{center}
\noindent
This routine computes $y = op(M^{-1})\, x$, where $M$ is a previously built
preconditioner, stored in the \verb|p| data structure, and $op$
denotes the preconditioner itself or its transpose, according to the value of \verb|trans|.
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,\verb|mld_precaply| is called
within the PSBLAS routine \verb|mld_krylov| and hence is completely transparent
to the user.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure, containing the local part of $M$.
Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|x| & \emph{type}\verb|(|\emph{precision}\verb|), dimension(:), intent(in)|.\\
& The local part of the vector $x$. Note that \emph{type} and \emph{precision}
must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|y| & \emph{type}\verb|(|\emph{precision}\verb|), dimension(:), intent(out)|.\\
& The local part of the vector $y$. Note that \emph{type} and \emph{precision}
must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor associated to the matrix to be
preconditioned.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\verb|trans| & \verb|character(len=1), optional, intent(in).|\\
& If trans='N','n' then $op(M^{-1}) = M^{-1}$;
if trans='T','t' then $op(M^{-1}) = M^{-T}$ (transpose of $M^{-1})$.\\
\verb|work| & \emph{type}\verb|(|\emph{precision}\verb|), dimension(:), optional, target|.\\
& Workspace. Its size must be at
least $4 *$ \verb|psb_cd_get_local_cols(desc_a)| (see the PSBLAS User's Guide).
Note that \emph{type} and \emph{precision} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\\\
\end{tabular}
\clearpage
\subsection{Subroutine mld\_precfree\label{sec:precfree}}
\begin{center}
\verb|mld_precfree(p,info)|\\
\end{center}
\noindent
This routine deallocates the preconditioner data structure.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\end{tabular}
\clearpage
\subsection{Subroutine mld\_precdescr\label{sec:precdescr}}
\begin{center}
\verb|mld_precdescr(p)|\\
\verb|mld_precdescr(iout,p)|\\
\end{center}
\noindent
This routine prints a description of the preconditioner to the standard output or to a file.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{10.6cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(in)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|iout| & \verb|integer, intent(in)|.\\
& The id of the file where the preconditioner description
will be printed. If \verb|iout| is missing, the description is printed on
the standard output.\\
\end{tabular}
\clearpage
\noindent \noindent
=========================================\\ =========================================\\

@ -7,7 +7,7 @@
\else \else
\pdfbookmark{MLD2P4 User's and Reference Guide}{title} \pdfbookmark{MLD2P4 User's and Reference Guide}{title}
\fi \fi
%\newlength{\centeroffset} \newlength{\centeroffset}
%\setlength{\centeroffset}{-0.5\oddsidemargin} %\setlength{\centeroffset}{-0.5\oddsidemargin}
%\addtolength{\centeroffset}{0.5\evensidemargin} %\addtolength{\centeroffset}{0.5\evensidemargin}
%\addtolength{\textwidth}{-\centeroffset} %\addtolength{\textwidth}{-\centeroffset}

@ -1,4 +1,4 @@
\documentclass[11pt,a4paper,twoside]{article} \documentclass[a4paper]{article}
\usepackage{pstricks} \usepackage{pstricks}
\usepackage{fancybox} \usepackage{fancybox}
\usepackage{amsfonts} \usepackage{amsfonts}
@ -15,7 +15,7 @@
\usepackage{graphicx} \usepackage{graphicx}
\newtheorem{theorem}{Theorem} \newtheorem{theorem}{Theorem}
\newtheorem{corollary}{Corollary} \newtheorem{corollary}{Corollary}
\usepackage{rotating}
%\newboolean{mtc} %\newboolean{mtc}
%\setboolean{mtc}{true} %\setboolean{mtc}{true}
@ -35,12 +35,12 @@
% /URI (http://ce.uniroma2.it/psblas) % /URI (http://ce.uniroma2.it/psblas)
} }
\setlength\oddsidemargin{.7in} % \setlength\oddsidemargin{.7in}
\setlength\evensidemargin{.7in} % \setlength\evensidemargin{.7in}
\newlength{\centeroffset} % \newlength{\centeroffset}
\setlength{\centeroffset}{0.5\oddsidemargin} % \setlength{\centeroffset}{0.5\oddsidemargin}
\addtolength{\centeroffset}{0.5\evensidemargin} % \addtolength{\centeroffset}{0.5\evensidemargin}
\addtolength{\textwidth}{-\centeroffset} % \addtolength{\textwidth}{-\centeroffset}
\pagestyle{myheadings} \pagestyle{myheadings}
\newcounter{subroutine}[subsection] \newcounter{subroutine}[subsection]
@ -115,10 +115,10 @@
\include{building} \include{building}
\include{background} \include{background}
\include{gettingstarted} \include{gettingstarted}
\include{highlevelview} \include{userinterface}
\include{advanced} %\include{advanced}
\include{errors} \include{errors}
\include{listofroutines} %\include{listofroutines}
\cleardoublepage \cleardoublepage

@ -0,0 +1,396 @@
\section{User Interface\label{sec:userinterface}}
The basic user interface of MLD2P4 consists of six routines. The four routines \verb|mld_precinit|,
\verb|mld_precset|, \verb|mld_precbld| and \verb|mld_precaply| encapsulate all the functionalities for the setup and application of any one-level and multi-level
preconditioner implemented in the package.
The routine \verb|mld_precfree| deallocates the preconditioner data structure, while
\verb|mld_precdescr| prints a description of the preconditioner setup by the user.
For each routine, the same user interface is overloaded with
respect to the real/complex case and the single/double precision;
arguments with appropriate data types must be passed to the routine,
i.e.
\begin{itemize}
\item the sparse matrix data structure, containing the matrix to be
preconditioned, must be of type \verb|mld_|\emph{x}\verb|spmat_type|
with \emph{x} = \verb|s| for real single precision, \emph{x} = \verb|d|
for real double precision, \emph{x} = \verb|c| for complex single precision,
\emph{x} = \verb|z| for complex double precision;
\item the preconditioner data structure must be of type
\verb|mld_|\emph{x}\verb|prec_type|, with \emph{x} =
\verb|s|, \verb|d|, \verb|c|, \verb|z|, according to the sparse
matrix data structure;
\item the arrays containing the vectors $v$ and $w$ involved in
the preconditioner application $w=M^{-1}v$ must be of type
\emph{type}\verb|(|\emph{kind\_parameter}\verb|)|, with \emph{type} =
\verb|real|, \verb|complex| and \emph{kind\_parameter} = \verb|kind(1.)|,
\verb|kind(1.d0)|, according to the sparse matrix and preconditioner
data structure; note that the PSBLAS module provides the constants \verb|psb_spk_|
= \verb|kind(1.)| and \verb|psb_dpk_| = \verb|kind(1.d0)|;
\item real parameters defining the preconditioner must be declared
according to the precision of the previous data structures
(see Section \ref{sec:precset}).
\end{itemize}
A description of each routine is given in the remainder of this section.
\subsection{Subroutine mld\_precinit\label{sec:precinit}}
\begin{center}
\verb|mld_precinit(p,ptype,info)| \\
\verb|mld_precinit(p,ptype,info,nlev)| \\
\end{center}
\noindent
This routine allocates and initializes the preconditioner data structure,
according to the preconditioner type chosen by the user.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.
\textbf{CONTROLLARE SE DEVE ESSERE INOUT O SOLO OUT} \\
& The preconditioner data structure. Note that \emph{x}
must be chosen according to the real/complex, single/double
precision version of MLD2P4 under use.\\
\verb|ptype| & \verb|character(len=*), intent(in)|.\\
& The type of preconditioner. Its values are specified in Table~\ref{tab:precinit}.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\verb|nlev| & \verb|integer, optional, intent(in)|.\\
& The number of levels of the multilevel preconditioner.
If \verb|nlev| is not present and \verb|ptype|='ML'/'ml',
then \verb|nlev|=2 is assumed. Otherwise, \verb|nlev| is ignored.
\end{tabular}
\subsection{Subroutine mld\_precset\label{sec:precset}}
\begin{center}
\verb|mld_precset(p,what,val,info)|\\
\end{center}
\noindent
This routine sets the parameters defining the preconditioner. More
precisely, the parameter identified by \verb|what| is assigned the value
contained in \verb|val|.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must
be chosen according to the real/complex, single/double precision
version of MLD2P4 under use.\\
\verb|what| & \verb|integer, intent(in)|. \\
& The number identifying the parameter to be set.
A mnemonic constant has been associated to each of these
numbers, as reported in Tables~\ref{tab:p_type}-\ref{tab:p_coarse}.\\
\verb|val | & \verb|integer| \emph{or} \verb|character(len=*)| \emph{or}
\verb|real(kind(1.))| \emph{or} \verb|real(kind(1.d0))|,
\verb|intent(in)|.\\
& The value of the parameter to be set. The list of allowed
values and the corresponding data types is given in
Table~\ref{tab:params}.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
%\verb|ilev| & \verb|integer, optional, intent(in)|.\\
% & For the multilevel preconditioner, the level at which the
% preconditioner parameter has to be set.
% The levels are numbered in increasing
% order starting from the finest one, i.e.\ level 1 is the finest level.
% If \verb|ilev| is not present, the parameter identified by \verb|what|
% is set at all the appropriate levels (see Table~\ref{tab:params}).
\end{tabular}
\ \\
A variety of (one-level and multi-level) preconditioner can be obtained
by a suitable setting of the preconditioner parameters. These parameters
can be logically divided into four groups, i.e.\ parameters defining
\begin{enumerate}
\item the type of multi-level preconditioner;
\item the one-level preconditioner to be used as smoother;
\item the aggregation algorithm;
\item the coarse-space correction at the coarsest level.
\end{enumerate}
A list of the parameters that can be set, along with their allowed and
default values, is given in Tables~\ref{tab:p_type}-\ref{tab:p_coarse}.
%Note that the routine allows to set different features of the
%preconditioner at each level through the use of \verb|ilev|.
%This should be done by users with experience in the field of
%multi-level preconditioners. Non-expert users are recommended
%to call \verb| mld_precset| without specifying \verb|ilev|.
\textbf{CORREGGERE LA ROUTINE E LA DOC INTERNA - ilev NON E' PIU'
ACCESSIBILE ALL'UTENTE.}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{2cm}|l|p{7cm}|}
\hline
\verb|what| & \emph{data type} & \verb|val| & \emph{default} &
\emph{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{type of the multi-level preconditioner}}\\ \hline
\verb|mld_ml_type_| & \verb|character(len=*)|
& 'ADD' \ \ \ 'MULT'
& 'MULT'
& basic multi-level framework: additive or multiplicative
among the levels always additive inside a level) \\
\verb|mld_smoother_type_|& \verb|character(len=*)|
& 'DIAG' \ \ \ 'BJAC' \ \ \ 'AS'
& 'AS'
& basic one-level preconditioner (i.e.\ smoother) of the
multi-level preconditioner
\textbf{CAMBIARE NOME COSTANTE NEL SW, ORA E'
mld\_prec\_type. INIBIRE no\_prec NELL'AMBITO DEL
MULTILEVEL.} \\
\verb|mld_smoother_pos_| & \verb|character(len=*)|
& 'PRE' \ \ \ 'POST' \ \ \ 'TWOSIDE'
& 2,...,\verb|nlev|
& ``position'' of the smoother: pre-smoother, post-smoother,
pre-/post-smoother \textbf{PREFERISCO TWOSIDE A BOTH
PERCHE' E' DIVERSO DA TRILINOS} \\
\hline
\end{tabular}
\end{center}
\caption{Parameters defining the type of multi-level preconditioner.
\label{tab:p_type}}
\end{sidewaystable}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{2cm}|l|p{7cm}|}
\hline
\verb|what| & \emph{data type} & \verb|val| & \emph{default} &
\emph{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{basic one-level preconditioner (smoother)}} \\ \hline
\verb|mld_sub_ovr| & \verb|integer|
& any number $\ge 0$
& 1
& \textbf{CAMBIARE NOME PARAMETRO NEL SW} \\
\verb|mld_sub_restr_| &
&
&
& \\
\verb|mld_sub_prol_| &
&
&
& \\
\verb|mld_sub_solve_| &
&
&
& \\
\verb|mld_sub_fillin_| &
&
&
& \textbf{CAMBIARE NOME PARAMETRO NEL SW} \\
\verb|mld_sub_thresh_| &
&
&
& \\
\verb|mld_sub_ren_| &
&
&
& \textbf{MANCA COSTANTE STRINGA ASSOCIATA} \\
\hline
\end{tabular}
\end{center}
\caption{Parameters defining the basic one-level preconditioner (smoother).
\label{tab:p_smoother}}
\end{sidewaystable}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{2cm}|l|p{7cm}|}
\hline
\verb|what| & \emph{data type} & \verb|val| & \emph{default} &
\emph{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{aggregation algorithm}} \\ \hline
\verb|mld_aggr_alg_| &
&
&
& \\
\verb|mld_aggr_kind_| &
&
&
& \\
\verb|mld_aggr_thresh_| &
&
&
& \\
\verb|mld_aggr_eig_| &
&
&
& \textbf{MANCA STRINGA CORRISPONDENTE a mld\_max\_norm} \\
\hline
\end{tabular}
\end{center}
\caption{Parameters defining the aggregation algorithm.
\label{tab:p_aggregation}}
\end{sidewaystable}
\begin{sidewaystable}
\begin{center}
\begin{tabular}{|l|l|p{2cm}|l|p{7cm}|}
\hline
\verb|what| & \emph{data type} & \verb|val| & \emph{default} &
\emph{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{coarse-space correction at the coarsest level}}\\ \hline
\verb|mld_coarse_mat_| &
&
&
& \\
\verb|mld_coarse_solve_| &
&
&
& \textbf{VEDI OSSERVAZIONI EMAIL 15-16/06/08}\\
\verb|mld_coarse_subsolve_| &
&
&
& \textbf{VEDI OSSERVAZIONI EMAIL 15-16/06/08}\\
\verb|mld_coarse_sweeps_|&
&
&
& \\
\verb|mld_coarse_fillin_| &
&
&
& \textbf{MODIFICA NOME PARAM. NEL SW} \\
\verb|mld_coarse_thresh_| &
&
&
& \\ \hline
\end{tabular}
\end{center}
\caption{Parameters defining the coarse-space correction at the coarsest
level.\label{tab:p_coarse}}
\end{sidewaystable}
\clearpage
\subsection{Subroutine mld\_precbld\label{sec:precbld}}
\begin{center}
\verb|mld_precbld(a,desc_a,p,info)|\\
\end{center}
\noindent
This routine builds the preconditioner according to the requirements made by
the user through the routines \verb|mld_precinit| and \verb|mld_precset|.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|a| & \verb|type(psb_|\emph{x}\verb|spmat_type), intent(in)|. \\
& The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.
See the PSBLAS User's Guide for details \cite{ }.\\
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor of a. See the PSBLAS User's Guide for
details \cite{ }.\\
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\end{tabular}
\clearpage
\subsection{Subroutine mld\_precaply\label{sec:precaply}}
\begin{center}
\verb|mld_precaply(p,x,y,desc_a,info)|\\
\verb|mld_precaply(p,x,y,desc_a,info,trans,work)|\\
\end{center}
\noindent
This routine computes $y = op(M^{-1})\, x$, where $M$ is a previously built
preconditioner, stored in the \verb|p| data structure, and $op$
denotes the preconditioner itself or its transpose, according to
the value of \verb|trans|.
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
\verb|mld_precaply| is called within the PSBLAS routine \verb|mld_krylov|
and hence is completely transparent to the user.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure, containing the local part of $M$.
Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|x| & \emph{type}\verb|(|\emph{kind\_parameter}\verb|), dimension(:), intent(in)|.\\
& The local part of the vector $x$. Note that \emph{type} and
\emph{kind\_parameter} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|y| & \emph{type}\verb|(|\emph{kind\_parameter}\verb|), dimension(:), intent(out)|.\\
& The local part of the vector $y$. Note that \emph{type} and
\emph{kind\_parameter} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor associated to the matrix to be
preconditioned.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\verb|trans| & \verb|character(len=1), optional, intent(in).|\\
& If \verb|trans| = \verb|'N','n'| then $op(M^{-1}) = M^{-1}$;
if \verb|trans| = \verb|'T','t'| then $op(M^{-1}) = M^{-T}$
(transpose of $M^{-1})$.\\
\verb|work| & \emph{type}\verb|(|\emph{kind\_parameter}\verb|), dimension(:), optional, target|.\\
& Workspace. Its size must be at
least \verb|4 * psb_cd_get_local_cols(desc_a)| (see the PSBLAS User's Guide).
Note that \emph{type} and \emph{kind\_parameter} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\end{tabular}
\subsection{Subroutine mld\_precfree\label{sec:precfree}}
\begin{center}
\verb|mld_precfree(p,info)|\\
\end{center}
\noindent
This routine deallocates the preconditioner data structure.
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{11.5cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. See Section~\ref{sec:errors} for details.\\
\end{tabular}
\subsection{Subroutine mld\_precdescr\label{sec:precdescr}}
\begin{center}
\verb|mld_precdescr(p,iout)|\\
\end{center}
\noindent
This routine prints a description of the preconditioner
to the standard output or to a file.
\textbf{FARE UNA SOLA ROUTINE, COL PARAMETRO IOUT OPZIONALE.}
\subsubsection*{Arguments}
\begin{tabular}{p{1.2cm}p{10.6cm}}
\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(in)|.\\
& The preconditioner data structure. Note that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|iout| & \verb|integer, intent(in)|.\\
& The id of the file where the preconditioner description
will be printed. If \verb|iout| is missing, the description is printed on
the standard output.\\
\end{tabular}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "userguide"
%%% End:

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save