mirror of
https://github.com/sfilippone/amg4psblas.git
synced 2026-10-06 14:44:55 +00:00
mld2p4:
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.
This commit is contained in:
+1
-1
@@ -86,7 +86,7 @@
|
||||
TOPFILE = userguide.tex
|
||||
SECFILE = title.tex abstract.tex overview.tex conventions.tex distribution.tex \
|
||||
building.tex gettingstarted.tex highlevelview.tex advanced.tex errors.tex \
|
||||
listofroutines.tex bibliography.tex
|
||||
listofroutines.tex bibliography.tex userinterface.tex
|
||||
FIGDIR = figures
|
||||
|
||||
XPDFFLAGS =
|
||||
|
||||
+13
-9
@@ -67,8 +67,8 @@ is referred to \cite{para_04,apnum_07,aaecc_07,dd2_96}.
|
||||
\subsection{Multi-level Schwarz Preconditioners\label{sec:multilevel}}
|
||||
|
||||
The Multilevel preconditioners implemented in MLD2P4 are obtained by combining
|
||||
Additive Schwarz preconditioners with coarse-space corrections; therefore
|
||||
we first provide a sketch of the Additive Schwarz preconditioners.
|
||||
AS preconditioners with coarse-space corrections; therefore
|
||||
we first provide a sketch of the AS preconditioners.
|
||||
|
||||
Given the linear system \Ref{system1},
|
||||
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
|
||||
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.
|
||||
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
|
||||
@@ -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 previous algorithms. For a detailed descrition of them, the reader is
|
||||
referred to \cite[Chapter 3]{dd2_96}.
|
||||
\textbf{Secondo me qui ci vorrebbe una descrizione algoritmica, a titolo di esempio,
|
||||
di un precondizionatore multilevel, ad esempio quello ibrido con pre-smoothing, sul tipo
|
||||
della descrizione in figura 1 della guida di Trilinos ML 4.0. CHE NE PENSATE?}
|
||||
\textbf{DESCRIZIONE ALGORITMICA, a titolo di esempio,
|
||||
di un precondizionatore multilevel, ad esempio quello ibrido con pre- o post-smoothing,
|
||||
sul tipo della descrizione in figura 1 della guida di Trilinos ML 4.0.}
|
||||
|
||||
|
||||
\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,
|
||||
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.\
|
||||
\[ N_r = \left\{s \in W: |a_{rs}| \geq \theta \sqrt{|a_{rr}a_{ss}|} \right\} \]
|
||||
for a given $\theta \in [0,1]$.
|
||||
\[ N_r = \left\{s \in W: |a_{rs}| > \theta \sqrt{|a_{rr}a_{ss}|} \right\}
|
||||
\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
|
||||
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
|
||||
@@ -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
|
||||
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,
|
||||
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}
|
||||
$P \in \Re^{n \times n_C}$, defined as
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
\section{Configuring and Building MLD2P4\label{sec:configuring}}
|
||||
- uso di GNU autoconf e automake \\
|
||||
- software di base necessario (MPI, BLACS, BLAS, PSBLAS - specificare versioni) \\
|
||||
- software opzionale (UMFPACK, SuperLU, SuperLUdist - specificare versioni e opzioni di configure) \\
|
||||
- software di base necessario (MPI, BLACS, BLAS, PSBLAS, UMFPACK ? - specificare versioni)\\
|
||||
- software opzionale (SuperLU, SuperLUdist - specificare versioni e opzioni di configure)\\
|
||||
- sistemi operativi e compilatori su cui MLD2P4 e' stato costruito con successo \\
|
||||
- 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}}
|
||||
- caratteri tipografici usati nella guida (vedi guida ML recente e guida Aztec) \\
|
||||
- convenzioni sui nomi di routine (differenza tra high-level e medium-level),
|
||||
strutture dati,\\
|
||||
moduli, costanti, etc. (vedi guida psblas) \\
|
||||
- versione reale e complessa\\
|
||||
- convenzioni sui nomi di routine (differenza nei nomi tra high-level e medium-level),
|
||||
strutture dati, moduli, costanti, etc. (vedi guida psblas) \\
|
||||
- versione reale e complessa, singola e doppia precisione\\
|
||||
+116
-83
@@ -5,7 +5,7 @@ Schwarz preconditioners with the Krylov solvers included in PSBLAS \cite{}.
|
||||
The following steps are required:
|
||||
\begin{enumerate}
|
||||
\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
|
||||
(\verb|s| = real single precision; \verb|d| = real 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.
|
||||
\item \emph{Allocate and initialize the preconditioner data structure, according to
|
||||
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
|
||||
type selected by the user. The default preconditioner associated to each preconditioner
|
||||
type is listed in Table~\ref{tab:precinit}; the string used by \verb|mld_precinit|
|
||||
to identify each preconditioner type is also given.
|
||||
\item \emph{Choose a specific preconditioner within the selected preconditioner type, by setting
|
||||
the preconditioner parameters.} This is performed by the routine \verb|mld_precset|.
|
||||
\verb|mld_precinit|, which also sets defaults for each preconditioner
|
||||
type selected by the user. The defaults associated to each preconditioner
|
||||
type are listed in Table~\ref{tab:precinit}, where the strings used by
|
||||
\verb|mld_precinit| to identify the preconditioner types are also given.
|
||||
\item \emph{Modify the selected preconditioner type, by properly setting
|
||||
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
|
||||
of the parameters associated to the selected preconditioner type, to obtain a variant
|
||||
of the default preconditioner.
|
||||
An example of use of \verb|mld_precset| is given in
|
||||
Section~\ref{sec:examples}, Figure~\ref{fig:example2}; a complete list of all the
|
||||
of the preconditioner.
|
||||
Examples of use of \verb|mld_precset| is given in Section~\ref{sec:examples};
|
||||
a complete list of all the
|
||||
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
|
||||
the routine \verb|mld_precbld|.
|
||||
\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 step is completely transparent to the user, since \verb|mld_precaply| is called
|
||||
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
|
||||
be performed when the preconditioner is no more used.
|
||||
\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
|
||||
calling the MLD2P4 routines. Furthermore, to apply MLD2P4 with the Krylov solvers
|
||||
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}.
|
||||
|
||||
\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{center}
|
||||
\begin{tabular}{|l|l|p{6.7cm}|}
|
||||
\hline
|
||||
Type & String & Default preconditioner \\ \hline
|
||||
\emph{Type} & \emph{String} & \emph{Default preconditioner} \\ \hline
|
||||
No preconditioner &\verb|'NOPREC'|& (Considered only to use the PSBLAS
|
||||
Krylov solvers with no preconditioner.) \\
|
||||
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
|
||||
same level and multiplicative through the levels),
|
||||
with post-smoothing only. Number of levels: 2;
|
||||
post-smoother: block-Jacobi preconditioner with ILU(0)
|
||||
on the local blocks; coarsest matrix: distributed among the
|
||||
processors; corase-level solver: 4 sweeps of the block-Jacobi
|
||||
solver, with the UMFPACK LU factorization on the blocks. \\
|
||||
post-smoother: RAS with overlap 1 and with ILU(0)
|
||||
on the local blocks; coarsest matrix: distributed
|
||||
among the processors; (approximate) coarse-level
|
||||
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
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
}
|
||||
\caption{Preconditioner types and default choices.\label{tab:precinit}}
|
||||
\caption{Preconditioner types, corresponding strings and default choices.
|
||||
\label{tab:precinit}}
|
||||
\end{table}
|
||||
|
||||
\subsection{Examples\label{sec:examples}}
|
||||
|
||||
The code reported in Figure~\ref{fig:example1} shows how to set and apply the MLD2P4 default
|
||||
multi-level preconditioner, i.e.\ the two-level hybrid post-smoothed Schwarz preconditioner,
|
||||
having block-Jacobi with ILU(0) on the blocks as basic preconditioner,
|
||||
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
|
||||
The code reported in Figure~\ref{fig:ex_default} shows how to set and apply the default
|
||||
multi-level preconditioner available in the real double precision version
|
||||
of MLD2P4 (see Table~\ref{tab:precinit}). This preconditioner is chosen
|
||||
by simply specifying \verb|'ML'| as second argument of \verb|mld_precinit|
|
||||
(a call to \verb|mld_precset| is not needed).
|
||||
The preconditioner is applied with the BiCGSTAB solver provided by PSBLAS.
|
||||
(a call to \verb|mld_precset| is not needed) and is applied with the BiCGSTAB
|
||||
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
|
||||
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
|
||||
here for brevity; the statements concerning the deallocation of the PSBLAS data structure
|
||||
are neglected too.
|
||||
The complete code can be found in the example program file \verb|example_ml_default.f90|
|
||||
in the directory \textbf{XXXXXX (SPECIFICARE).} Note that the modules \verb|psb_base_mod|
|
||||
The complete code can be found in the example program file \verb|example_ml.f90|
|
||||
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.
|
||||
\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{}.
|
||||
|
||||
\textbf{LE FIGURE SONO DECENTRATE, NONOSTANTE IL CENTER. CI VUOLE UNA MINIPAGE?}
|
||||
|
||||
\begin{figure}[tbp]
|
||||
\begin{center}
|
||||
{\small
|
||||
@@ -120,14 +140,15 @@ For details on the use of the PSBLAS routines, see the PSBLAS User's Guide \cite
|
||||
! vector management
|
||||
... ...
|
||||
!
|
||||
! initialize the default multi-level preconditioner
|
||||
! (two-level hybrid Schwarz, with ILU(0) as post-smoother
|
||||
! and 4 Block-Jacobi sweeps, with ILU(0) on the blocks,
|
||||
! as distributed coarsest-level solver)
|
||||
! initialize the default multi-level preconditioner,
|
||||
! i.e. two-level hybrid Schwarz, using RAS (with
|
||||
! overlap 1 and ILU(0) on the blocks) as post-smoother
|
||||
! and 4 block-Jacobi sweeps (with UMFPACK LU on the
|
||||
! blocks) as distributed coarse-level solver
|
||||
call mld_precinit(P,'ML',info)
|
||||
!
|
||||
! 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
|
||||
... ...
|
||||
@@ -147,91 +168,103 @@ For details on the use of the PSBLAS routines, see the PSBLAS User's Guide \cite
|
||||
stop
|
||||
\end{verbatim}
|
||||
}
|
||||
\caption{Setup and application of the default multilevel Schwarz preconditioner.
|
||||
\label{fig:example1}}
|
||||
\caption{Setup and application of the default multi-level Schwarz preconditioner.
|
||||
\label{fig:ex_default}}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Different versions of multilevel preconditioner can be obtained by changing
|
||||
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
|
||||
using RAS with overlap 1 as post-smoother, a coarsest matrix replicated
|
||||
on the processors and the LU factorization from UMFPACK as coarse-level solver.
|
||||
Figure~\ref{fig:ex_3lh} shows how to set a three-level hybrid Schwarz
|
||||
preconditioner, which uses block Jacobi with ILU(0) on the
|
||||
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
|
||||
preconditioner parameters are set by calling \verb|mld_precset|. Note that
|
||||
the type of multilevel framework (i.e.\ multiplicative among the levels,
|
||||
which corresponds to the hybrid multilevel preconditioner); the type
|
||||
of one-level AS preconditioner used as smoother (i.e.\ RAS)
|
||||
and its ``position'' (i.e.\ pre-smoother) are not specified since they
|
||||
are chosen by default when \verb|mld_precinit| is called.
|
||||
The construction and the application of the preconditioner
|
||||
the type of multilevel framework (i.e.\ multiplicative among the levels
|
||||
with post-smoothing only) is not specified since it is the default
|
||||
set by \verb|mld_precinit|. Figure~\ref{fig:ex_3la} shows how to
|
||||
set a three-level additive Schwarz preconditioner,
|
||||
which applies RAS, with overlap 1 and ILU(0) on the blocks,
|
||||
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.
|
||||
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
|
||||
concerning the setup of a three-level additive multi-level preconditioner,
|
||||
using ILU(0) as pre- and post-smoother, a distributed coarsest matrix and
|
||||
five block-Jacobi sweeps as coarsest-level solver, with
|
||||
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}.
|
||||
Finally, Figure~\ref{fig:ex_1l} shows the setup of a one-level
|
||||
additive Schwarz preconditioner, i.e. RAS with overlap 2. The corresponding code,
|
||||
including also the application of the preconditioner is in the example
|
||||
program file \verb|example_1lev.f90|.
|
||||
|
||||
\begin{figure}[tbp]
|
||||
\begin{center}
|
||||
{\small
|
||||
\begin{verbatim}
|
||||
... ...
|
||||
! setup a three-level hybrid Schwarz preconditioner,
|
||||
! using RAS with overlap 1 as post-smoother, a coarsest
|
||||
! matrix replicated on the processors, and the LU
|
||||
! factorization from UMFPACK as coarse-level solver
|
||||
! set a three-level hybrid Schwarz preconditioner,
|
||||
! which uses block Jacobi (with ILU(0) on the blocks)
|
||||
! as post-smoother, a coarsest matrix replicated on the
|
||||
! processors, and the LU factorization from UMFPACK
|
||||
! as coarse-level solver
|
||||
call mld_precinit(P,'ML',info,nlev=3)
|
||||
call_mld_precset(P,mld_smooth_type_,'AS',info)
|
||||
call mld_precset(P,mld_n_ovr_,1,info)
|
||||
call_mld_precset(P,mld_smoother_type_,'BJAC',info)
|
||||
call mld_precset(P,mld_coarse_mat,'REPL')
|
||||
call mld_precset(P,mld_coarse_solve,'UMF')
|
||||
... ...
|
||||
\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{figure}
|
||||
|
||||
\begin{figure}[tbp]
|
||||
\begin{figure}[htb]
|
||||
\begin{center}
|
||||
{\small
|
||||
\begin{verbatim}
|
||||
... ...
|
||||
! setup a three-level additive Schwarz preconditioner,
|
||||
! using ILU(0) as pre- and post-smoother, five block-Jacobi
|
||||
! sweeps as distributed coarsest-level solver, with ILU(0)
|
||||
! on the local blocks
|
||||
! set a three-level additive Schwarz preconditioner,
|
||||
! which uses RAS (with overlap 1 and ILU(0) on the blocks)
|
||||
! as pre- and post-smoother, and 5 block-Jacobi sweeps
|
||||
! (with UMFPACK LU on the blocks) as distributed
|
||||
! coarsest-level solver
|
||||
call mld_precinit(P,'ML',info,nlev=3)
|
||||
call mld_precset(P,mld_ml_type_,'ADD',info)
|
||||
call_mld_precset(P,mld_smooth_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_subsolve,'UMF')
|
||||
call_mld_precset(P,mld_smoother_pos_,'TWOSIDE',info)
|
||||
call mld_precset(P,mld_coarse_sweeps_,5)
|
||||
... ...
|
||||
\end{verbatim}
|
||||
}
|
||||
\caption{Setup of an additive three-level Schwarz preconditioner.\label{fig:example3}}
|
||||
\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}
|
||||
}
|
||||
\caption{Setup of a one-level Schwarz preconditioner.\label{fig:ex_1l}}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
\ \\
|
||||
\textbf{Note.} Any PSBLAS-based program using the basic preconditioners implemented in PSBLAS 2.0,
|
||||
i.e.\ the diagonal and block-Jacobi ones, can use the diagonal and block-Jacobi preconditioners
|
||||
implemented in MLD2P4 without any change in the code. The PSBLAS-base program must e only recompiled
|
||||
\textbf{Remark.} Any PSBLAS-based program using the basic preconditioners
|
||||
implemented in PSBLAS 2.0, i.e.\ the diagonal and block-Jacobi ones,
|
||||
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.
|
||||
|
||||
%%% Local Variables:
|
||||
|
||||
+168
-20
@@ -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|
|
||||
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
|
||||
and of the single or double precision. However, the appropriate preconditioner data type to be used with
|
||||
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,
|
||||
\emph{x} = \verb|d| for real double precision, \emph{x} = \verb|c| for complex single precision,
|
||||
\emph{x} = \verb|z| for complex double precision. A few parameters defining the preconditioner may be
|
||||
real single or double precision, depending on the package version (see Section~\ref{sec:precset}).
|
||||
|
||||
For each routine, the same user interface is available independently of the real/complex case
|
||||
and of the single/double precision. However, 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{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.
|
||||
|
||||
|
||||
\subsection{Subroutine mld\_precinit\label{sec:precinit}}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{|c|}
|
||||
\hline
|
||||
\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}
|
||||
|
||||
\noindent
|
||||
@@ -29,7 +42,7 @@ according to the preconditioner type chosen by the user.
|
||||
|
||||
\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)|.\\
|
||||
& The preconditioner data structure. Note that \emph{x} must be chosen according
|
||||
to the real/complex, single/double precision version of MLD2P4 under use.\\
|
||||
@@ -58,7 +71,7 @@ contained in \verb|val|.
|
||||
|
||||
\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)|.\\
|
||||
& The preconditioner data structure. Note that \emph{x} must be chosen according
|
||||
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|.
|
||||
|
||||
|
||||
\begin{table}[p]
|
||||
{\small
|
||||
% \begin{table}[p]
|
||||
\begin{sidewaystable}
|
||||
\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}|}
|
||||
\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
|
||||
\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
|
||||
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
|
||||
\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
|
||||
|
||||
\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
|
||||
\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
|
||||
\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
|
||||
\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
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
}
|
||||
\caption{Parameters defining the preconditioner.\label{tab:precinit}}
|
||||
\end{table}
|
||||
\end{sidewaystable}
|
||||
% \caption{Parameters defining the preconditioner.\label{tab:precinit}}
|
||||
|
||||
\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{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
|
||||
=========================================\\
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
\else
|
||||
\pdfbookmark{MLD2P4 User's and Reference Guide}{title}
|
||||
\fi
|
||||
%\newlength{\centeroffset}
|
||||
\newlength{\centeroffset}
|
||||
%\setlength{\centeroffset}{-0.5\oddsidemargin}
|
||||
%\addtolength{\centeroffset}{0.5\evensidemargin}
|
||||
%\addtolength{\textwidth}{-\centeroffset}
|
||||
|
||||
+11
-11
@@ -1,4 +1,4 @@
|
||||
\documentclass[11pt,a4paper,twoside]{article}
|
||||
\documentclass[a4paper]{article}
|
||||
\usepackage{pstricks}
|
||||
\usepackage{fancybox}
|
||||
\usepackage{amsfonts}
|
||||
@@ -15,7 +15,7 @@
|
||||
\usepackage{graphicx}
|
||||
\newtheorem{theorem}{Theorem}
|
||||
\newtheorem{corollary}{Corollary}
|
||||
|
||||
\usepackage{rotating}
|
||||
%\newboolean{mtc}
|
||||
%\setboolean{mtc}{true}
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
% /URI (http://ce.uniroma2.it/psblas)
|
||||
}
|
||||
|
||||
\setlength\oddsidemargin{.7in}
|
||||
\setlength\evensidemargin{.7in}
|
||||
\newlength{\centeroffset}
|
||||
\setlength{\centeroffset}{0.5\oddsidemargin}
|
||||
\addtolength{\centeroffset}{0.5\evensidemargin}
|
||||
\addtolength{\textwidth}{-\centeroffset}
|
||||
% \setlength\oddsidemargin{.7in}
|
||||
% \setlength\evensidemargin{.7in}
|
||||
% \newlength{\centeroffset}
|
||||
% \setlength{\centeroffset}{0.5\oddsidemargin}
|
||||
% \addtolength{\centeroffset}{0.5\evensidemargin}
|
||||
% \addtolength{\textwidth}{-\centeroffset}
|
||||
\pagestyle{myheadings}
|
||||
|
||||
\newcounter{subroutine}[subsection]
|
||||
@@ -115,10 +115,10 @@
|
||||
\include{building}
|
||||
\include{background}
|
||||
\include{gettingstarted}
|
||||
\include{highlevelview}
|
||||
\include{advanced}
|
||||
\include{userinterface}
|
||||
%\include{advanced}
|
||||
\include{errors}
|
||||
\include{listofroutines}
|
||||
%\include{listofroutines}
|
||||
|
||||
\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:
|
||||
+5877
-5270
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user