You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
279 lines
8.3 KiB
TeX
279 lines
8.3 KiB
TeX
\section{Preconditioner routines}
|
|
\label{sec:precs}
|
|
|
|
% \section{Preconditioners}
|
|
\label{sec:psprecs}
|
|
The MLD2P4 library contains the implementation of many preconditioning
|
|
techniques. The preconditioners may be applied as normal ``base''
|
|
preconditioners; alternatively multiple ``base'' preconditioners may
|
|
be combined in a multilevel framework.
|
|
|
|
The base (one-level) preconditioners include:
|
|
\begin{itemize}
|
|
\item Diagonal Scaling
|
|
\item Block Jacobi
|
|
\item Additive Schwarz, Restricted Additive Schwarz and
|
|
Additive Schwarz with Harmonic extensions;
|
|
\end{itemize}
|
|
The Jacobi and Additive Schwarz preconditioners can make use of the
|
|
following solvers:
|
|
\begin{itemize}
|
|
\item Level-$p$ Incomplete LU factorization ($ILU(p)$);
|
|
\item Threshold Incomplete LU factorization ($ILU(\tau,p)$);
|
|
\item Complete LU factorization by means of the following optional
|
|
external packages:
|
|
\begin{itemize}
|
|
\item UMFPACK;
|
|
\item SuperLU;
|
|
\item SuperLU\_Dist.
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
The supporting data type and subroutine interfaces are defined in the
|
|
module \verb|mld_prec_mod|; the module also overrides the variables
|
|
and tyep definitions of \verb|psb_prec_mod| so as to function as a
|
|
drop-in replacement for the PSBLAS methods. Thus if the user does not
|
|
wish to employ the additional MLD2P4 capabitlities, it is possible to
|
|
migrate an existing PSBLAS program without any source code
|
|
modifications, only a recompilation is needed.
|
|
|
|
%% We also provide a companion package of multi-level Additive
|
|
%% Schwarz preconditioners called MD2P4; this is actually a family of
|
|
%% preconditioners since there is the possibility to choose between
|
|
%% many variants, and is currently in an experimental stateIts
|
|
%% documentation is planned to appear after stabilization of the
|
|
%% package, which will characterize release 2.1 of our library.
|
|
|
|
|
|
|
|
|
|
\subroutine{mld\_precinit}{Initialize a preconditioner}
|
|
|
|
\syntax{call mld\_precinit}{prec, ptype, info}
|
|
\syntax*{call mld\_precinit}{prec, ptype, info, nlev}
|
|
|
|
\begin{description}
|
|
\item[Type:] Asynchronous.
|
|
\item[\bf On Entry]
|
|
\item[ptype] the type of preconditioner.
|
|
Scope: {\bf global} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: a character string, see usage notes.
|
|
\item[nlev] Number of levels in a multilevel precondtioner.
|
|
Scope: {\bf global} \\
|
|
Type: {\bf optional}\\
|
|
Specified as: an integer value, see usage notes.
|
|
%% \item[rs]
|
|
%% Scope: {\bf global} \\
|
|
%% Type: {\bf optional}\\
|
|
%% Specified as: a long precision real number.
|
|
\item[\bf On Exit]
|
|
|
|
\item[prec]
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: a preconditioner data structure \precdata.
|
|
\item[info]
|
|
Scope: {\bf global} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf out}.\\
|
|
Error code: if no error, 0 is returned.
|
|
\end{description}
|
|
\subsection*{Usage Notes}
|
|
%% The PSBLAS 2.0 contains a number of preconditioners, ranging from a
|
|
%% simple diagonal scaling to 2-level domain decomposition. These
|
|
%% preconditioners may use the SuperLU or the UMFPACK software, if
|
|
%% installed; see~\cite{SUPERLU,UMFPACK}.
|
|
Legal inputs to this subroutine are interpreted depending on the
|
|
$ptype$ string as follows\footnote{The string is case-insensitive}:
|
|
\begin{description}
|
|
\item[NONE] No preconditioning, i.e. the preconditioner is just a copy
|
|
operator.
|
|
\item[DIAG] Diagonal scaling; each entry of the input vector is
|
|
multiplied by the reciprocal of the sum of the absolute values of
|
|
the coefficients in the corresponding row of matrix $A$;
|
|
\item[BJAC] Precondition by a factorization of the
|
|
block-diagonal of matrix $A$, where block boundaries are determined
|
|
by the data allocation boundaries for each process; requires no
|
|
communication.
|
|
\item[AS] Additive Schwarz; default is to apply the Restricted
|
|
Additive Schwarz variant, with an $ILU(0)$ factorization
|
|
\item[ML] Multilevel preconditioner.
|
|
\end{description}
|
|
|
|
|
|
|
|
\subroutine{mld\_precset}{Set preconditioner features}
|
|
|
|
\syntax{call mld\_precset}{prec, what, val, info, ilev}
|
|
|
|
|
|
\begin{description}
|
|
\item[Type:] Asynchronous.
|
|
\item[\bf On Entry]
|
|
\item[prec] the preconditioner.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: an already initialized precondtioner data structure \precdata\\
|
|
\item[what] The feature to be set. \\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: an integer constants. Symbolic names are available in
|
|
the library module, see usage notes for legal values.
|
|
\item[val] The value to set the chosen feature to. \\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: an integer, double precision or character variable.
|
|
Symbolic names for some choices are available in the library module,
|
|
see usage notes for legal values.
|
|
\item[ilev] The level of a multilevel preconditioner to which the
|
|
feature choice should apply.\\
|
|
Scope: {\bf global} \\
|
|
Type: {\bf optional}\\
|
|
Specified as: an integer value, see usage notes.
|
|
\end{description}
|
|
|
|
\begin{description}
|
|
\item[\bf On Return]
|
|
\item[prec] the preconditioner.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: a precondtioner data structure \precdata\\
|
|
\item[info] Error code.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required} \\
|
|
Intent: {\bf out}.\\
|
|
An integer value; 0 means no error has been detected.
|
|
\end{description}
|
|
|
|
\subsection*{Usage Notes}
|
|
Legal inputs to this subroutine are interpreted depending on the value
|
|
of \verb|what| input as follows
|
|
\begin{description}
|
|
\item[mld\_coarse\_mat\_]
|
|
\end{description}
|
|
|
|
|
|
\subroutine{mld\_precbld}{Builds a preconditioner}
|
|
|
|
\syntax{call mld\_precbld}{a, desc\_a, prec, info}
|
|
|
|
\begin{description}
|
|
\item[Type:] Synchronous.
|
|
\item[\bf On Entry]
|
|
\item[a] the system sparse matrix.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}, target.\\
|
|
Specified as: a sparse matrix data structure \spdata.
|
|
\item[prec] the preconditioner.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: an already initialized precondtioner data structure \precdata\\
|
|
\item[desc\_a] the problem communication descriptor.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}, target.\\
|
|
Specified as: a communication descriptor data structure \descdata.
|
|
%% \item[upd]
|
|
%% Scope: {\bf global} \\
|
|
%% Type: {\bf optional}\\
|
|
%% Intent: {\bf in}.\\
|
|
%% Specified as: a character.
|
|
\end{description}
|
|
|
|
\begin{description}
|
|
\item[\bf On Return]
|
|
\item[prec] the preconditioner.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: a precondtioner data structure \precdata\\
|
|
\item[info] Error code.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required} \\
|
|
Intent: {\bf out}.\\
|
|
An integer value; 0 means no error has been detected.
|
|
\end{description}
|
|
|
|
|
|
|
|
\subroutine{mld\_precaply}{Preconditioner application routine}
|
|
|
|
\syntax{call mld\_precaply}{prec,x,y,desc\_a,info,trans,work}
|
|
\syntax*{call mld\_precaply}{prec,x,desc\_a,info,trans}
|
|
|
|
\begin{description}
|
|
\item[Type:] Synchronous.
|
|
\item[\bf On Entry]
|
|
\item[prec] the preconditioner.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: a preconditioner data structure \precdata.
|
|
\item[x] the source vector.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: a double precision array.
|
|
\item[desc\_a] the problem communication descriptor.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: a communication data structure \descdata.
|
|
\item[trans]
|
|
Scope: {\bf } \\
|
|
Type: {\bf optional}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: a character.
|
|
\item[work] an optional work space
|
|
Scope: {\bf local} \\
|
|
Type: {\bf optional}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: a double precision array.
|
|
\end{description}
|
|
|
|
\begin{description}
|
|
\item[\bf On Return]
|
|
\item[y] the destination vector.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf inout}.\\
|
|
Specified as: a double precision array.
|
|
\item[info] Error code.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required} \\
|
|
Intent: {\bf out}.\\
|
|
An integer value; 0 means no error has been detected.
|
|
\end{description}
|
|
|
|
|
|
|
|
\subroutine{mld\_prec\_descr}{Prints a description of current preconditioner}
|
|
|
|
\syntax{call mld\_prec\_descr}{prec}
|
|
|
|
\begin{description}
|
|
\item[Type:] Asynchronous.
|
|
\item[\bf On Entry]
|
|
\item[prec] the preconditioner.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Intent: {\bf in}.\\
|
|
Specified as: a preconditioner data structure \precdata.
|
|
\end{description}
|
|
|
|
|
|
|
|
%%% Local Variables:
|
|
%%% mode: latex
|
|
%%% TeX-master: "userguide"
|
|
%%% End:
|