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.
231 lines
7.7 KiB
TeX
231 lines
7.7 KiB
TeX
\section{Preconditioner routines}
|
|
\label{sec:precs}
|
|
|
|
% \section{Preconditioners}
|
|
\label{sec:psprecs}
|
|
PSBLAS contains the implementation of many preconditioning
|
|
techniques some of which are very flexible thanks to the presence of
|
|
many parameters that is possible to adjust to fit the user's needs:
|
|
\begin{itemize}
|
|
\item Diagonal Scaling
|
|
\item Block Jacobi with ILU(0) factorization
|
|
\item Additive Schwarz with the Restricted Additive Schwarz and
|
|
Additive Schwarz with Harmonic extensions;
|
|
\item Two-Level Additive Schwarz; this is actually a family of
|
|
preconditioners since there is the possibility to choose between
|
|
many variants.
|
|
\end{itemize}
|
|
|
|
|
|
|
|
\subroutine{psb\_precset}{Sets the preconditioner type}
|
|
|
|
\syntax{call psb\_precset}{prec, ptype, iv, rs, ierr}
|
|
|
|
\begin{description}
|
|
\item[\bf On Entry]
|
|
\item[prec]
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a pronditioner data structure \precdata.
|
|
\item[ptype] the type of preconditioner.
|
|
Scope: {\bf global} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a character string, see usage notes.
|
|
\item[iv] integer parameters for the precondtioner.
|
|
Scope: {\bf global} \\
|
|
Type: {\bf required}\\
|
|
Specified as: an integer array, see usage notes.
|
|
\item[rs]
|
|
Scope: {\bf global} \\
|
|
Type: {\bf optional}\\
|
|
Specified as: a long precision real number.
|
|
|
|
\item[ierr]
|
|
Scope: {\bf global} \\
|
|
Type: {\bf required}\\
|
|
\end{description}
|
|
\section*{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[ILU] Precondition by the incomplete LU factorization of the
|
|
block-diagonal of matrix $A$, where block boundaries are determined
|
|
by the data allocation boundaries for each process; requires no
|
|
communication. Only $ILU(0)$ is currently implemented.
|
|
\item[AS] Additive Schwarz preconditioner (see~\cite{PARA04}); in this
|
|
case the user may specify additional flags through the integer
|
|
vector \verb|ir| as follows:
|
|
\begin{description}
|
|
\item[$iv(1)$] Number of overlap levels, an integer $novr>0$, default
|
|
$novr=1$.
|
|
\item[$iv(2)$] Restriction operator, legal values: \verb|psb_halo_|,
|
|
\verb|psb_none_|; default: \verb|psb_halo_|
|
|
\item[$iv(3)$] Prolongation operator, legal values: \verb|psb_none_|,
|
|
\verb|psb_sum_|, \verb|psb_avg_|, default: \verb|psb_none_|
|
|
\item[$iv(4)$] Factorization type, legal values: \verb|f_ilu_n_|,
|
|
\verb|f_slu_|, \verb|f_umf_|, default: \verb|f_ilu_n_|.
|
|
\end{description}
|
|
Note that the default corresponds to a Restricted Additive Schwarz
|
|
preconditioner with $ILU(0)$ and 1 level of overlap.
|
|
\end{description}
|
|
If a multilevel preconditioner is desired, the user should call
|
|
\verb|psb_precset| once choosing AS, and a second time specifying
|
|
$ptype=ML$ with the following optional parameters in $iv$ (see
|
|
also~\cite{APNUM,DD2}):
|
|
\begin{description}
|
|
\item[$iv(1)$] Type of multilevel correction, legal values: \verb|no_ml_|,
|
|
\verb|add_ml_prec_|, \verb|mult_ml_prec_|,
|
|
default: \verb|mult_ml_prec_|;
|
|
\item[$iv(2)$] Aggregation algorithm, legal values: \verb|loc_aggr_|;
|
|
\item[$iv(3)$] Smoother type, legal values: \verb|no_smth_|,
|
|
\verb|smth_omg_|, default: \verb|smth_omg_|;
|
|
\item[$iv(4)$] Coarse matrix allocation, legal values:
|
|
\verb|mat_distr_|, \verb|mat_repl_|, default: \verb|mat_distr_|
|
|
\item[$iv(5)$] Smoother position, legal values: \verb|pre_smooth_|,
|
|
\verb|post_smooth_|, \verb|smooth_both_|, default:
|
|
\verb|post_smooth_|
|
|
\item[$iv(6)$] Factorization type (for coarse matrix), legal values: \verb|f_ilu_n_|,
|
|
\verb|f_slu_|, \verb|f_umf_|, default: \verb|f_ilu_n_|;
|
|
\item[$iv(7)$] Number of Jacobi sweeps for coarse system correction,
|
|
default 1.
|
|
\item[$rs$] Set the smoother parameter $\omega$ a user defined value;
|
|
default: esitimate with the infinity norm of matrix $A$.
|
|
\end{description}
|
|
The 2-level preconditioners are based on the idea of building a
|
|
coarse-space approximation $A_C$ of the matrix $A$; given a set $W_C$
|
|
of coarse vertices, with size $n_C$, and a suitable restriction
|
|
operator $R_C \in \Re^{n_C \times n}$, $A_C$ is defined as
|
|
\[
|
|
A_C=R_C A R_C^T .
|
|
\]
|
|
The prolongator $R_C^T$ is built with the smoothed aggregation technique,
|
|
in which we start from a tentative prolongator that simply maps
|
|
fine-level entries onto their aggregates $P_C$; if the user chooses
|
|
\verb|no_smth_| this is the prolongator used, otherwise it is
|
|
multiplied by a smoother \[ S = I - \omega D^{-1} A \], where $D$ is
|
|
the diagonal of $A$ and $\omega$ may be imposed by the user or
|
|
estimated internally.
|
|
The coarse space correction may be added to the fine level solution
|
|
\verb|add_ml_prec_|
|
|
\[
|
|
M_{2L-A}^{-1} = M_{C}^{-1} + M_{1L}^{-1}.
|
|
\]
|
|
or it can be composed in a multiplicative framework as a pre-smoothed
|
|
correction
|
|
\[
|
|
M_{2L-H1}^{-1} = M_{C}^{-1} + \left( I - M_{C}^{-1}A \right) M_{1L}^{-1},
|
|
\]
|
|
post-smoothed correction
|
|
\[
|
|
M_{2L-H2}^{-1} = M_{1L}^{-1} + \left( I - M_{1L}^{-1}A \right) M_{C}^{-1}.
|
|
\]
|
|
or two-sided.
|
|
|
|
|
|
|
|
\subroutine{psb\_precbld}{Builds a preconditioner}
|
|
|
|
\syntax{call psb\_precbld}{a, desc\_a, prec, info, upd}
|
|
|
|
\begin{description}
|
|
\item[\bf On Entry]
|
|
\item[a] the system sparse matrix.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a sparse matrix data structure \spdata.
|
|
\item[desc\_a] the problem communication descriptor.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a communication descriptor data structure \descdata.
|
|
\item[upd]
|
|
Scope: {\bf global} \\
|
|
Type: {\bf optional}\\
|
|
Specified as: a character.
|
|
\end{description}
|
|
|
|
\begin{description}
|
|
\item[\bf On Return]
|
|
\item[prec] the preconditioner.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a precondtioner data structure \precdata\\
|
|
\item[info] the return error code.\\
|
|
Scope: {\bf global} \\
|
|
Type: {\bf required}\\
|
|
Specified as: an integer, upon successful completion $info=0$ \\
|
|
\end{description}
|
|
|
|
|
|
|
|
\subroutine{psb\_precaply}{Preconditioner application routine}
|
|
|
|
\syntax{call psb\_precaply}{prec,x,y,desc\_a,info,trans,work}
|
|
\syntax{call psb\_precaply}{prec,x,desc\_a,info,trans}
|
|
|
|
\begin{description}
|
|
\item[\bf On Entry]
|
|
\item[prec] the preconditioner.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a preconditioner data structure \precdata.
|
|
\item[x] the source vector.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf require}\\
|
|
Specified as: a double precision array.
|
|
\item[desc\_a] the problem communication descriptor.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a communication data structure \descdata.
|
|
\item[trans]
|
|
Scope: {\bf } \\
|
|
Type: {\bf optional}\\
|
|
Specified as: a character.
|
|
\item[work] an optional work space
|
|
Scope: {\bf local} \\
|
|
Type: {\bf optional}\\
|
|
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}\\
|
|
Specified as: a double precision array.
|
|
\item[info] the return error code.\\
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: an integer, upon successful completion $info=0$ .\\
|
|
\end{description}
|
|
|
|
|
|
|
|
\subroutine{psb\_prec\_descr}{Prints a description of current preconditioner}
|
|
|
|
\syntax{call psb\_prec\_descr}{prec}
|
|
|
|
\begin{description}
|
|
\item[\bf On Entry]
|
|
\item[prec] the preconditioner.
|
|
Scope: {\bf local} \\
|
|
Type: {\bf required}\\
|
|
Specified as: a preconditioner data structure \precdata.
|
|
\end{description}
|
|
|
|
|
|
|
|
%%% Local Variables:
|
|
%%% mode: latex
|
|
%%% TeX-master: "userguide"
|
|
%%% End:
|