@ -1,12 +1,13 @@
\section { User Interface\label { sec:userinterface} }
\section { User Interface\label { sec:userinterface} }
\markboth { \ underline { MLD2P4 User's and Reference Guide} }
\markboth { \ textsc { MLD2P4 User's and Reference Guide} }
{ \ underline { \ref { sec:userinterface} User Interface} }
{ \ textsc { \ref { sec:userinterface} User Interface} }
The basic user interface of MLD2P4 consists of six routines. The four routines \verb |mld_ precinit|,
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
\verb |mld_ precset|, \verb |mld_ precbld| and \verb |mld_ precaply| encapsulate all the functionalities
for the setup and the application of any one-level and multi-level
preconditioner implemented in the package.
preconditioner implemented in the package.
The routine \verb |mld_ precfree| deallocates the preconditioner data structure, while
The routine \verb |mld_ precfree| deallocates the preconditioner data structure, while
\verb |mld_ precdescr| prints a description of the preconditioner setup by the user.
\verb |mld_ prec\- descr| prints a description of the preconditioner setup by the user.
For each routine, the same user interface is overloaded with
For each routine, the same user interface is overloaded with
respect to the real/complex case and the single/double precision;
respect to the real/complex case and the single/double precision;
@ -27,7 +28,8 @@ i.e.
\emph { type} \verb |(|\emph { kind\_ parameter} \verb |)|, with \emph { type} =
\emph { type} \verb |(|\emph { kind\_ parameter} \verb |)|, with \emph { type} =
\verb |real|, \verb |complex| and \emph { kind\_ parameter} = \verb |kind(1.e0)|,
\verb |real|, \verb |complex| and \emph { kind\_ parameter} = \verb |kind(1.e0)|,
\verb |kind(1.d0)|, according to the sparse matrix and preconditioner
\verb |kind(1.d0)|, according to the sparse matrix and preconditioner
data structure; note that the PSBLAS module provides the constants \verb |psb_ spk_ |
data structure; note that the PSBLAS module \verb |psb_ base_ mod|
provides the constants \verb |psb_ spk_ |
= \verb |kind(1.e0)| and \verb |psb_ dpk_ | = \verb |kind(1.d0)|;
= \verb |kind(1.e0)| and \verb |psb_ dpk_ | = \verb |kind(1.d0)|;
\item real parameters defining the preconditioner must be declared
\item real parameters defining the preconditioner must be declared
according to the precision of the previous data structures
according to the precision of the previous data structures
@ -49,19 +51,20 @@ according to the preconditioner type chosen by the user.
\subsubsection * { Arguments}
\subsubsection * { Arguments}
\begin { tabular} { p{ 1.2cm} p{ 11 .5cm} }
\begin { tabular} { p{ 1.2cm} p{ 10 .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}
& The preconditioner data structure. Note that \emph { x}
must be chosen according to the real/complex, single/double
must be chosen according to the real/complex, single/double
precision version of MLD2P4 under use.\\
precision version of MLD2P4 under use.\\
\verb |ptype| & \verb |character(len=*), intent(in)|.\\
\verb |ptype| & \verb |character(len=*), intent(in)|.\\
& The type of preconditioner. Its values are specified in Table~\ref { tab:precinit} .\\
& The type of preconditioner. Its values are specified in Table~\ref { tab:precinit} .\\
Note that the uppercase and lowercase letters can be used indifferently.\\
\verb |info| & \verb |integer, intent(out)|.\\
\verb |info| & \verb |integer, intent(out)|.\\
& Error code. See Section~\ref { sec:errors} for details.\\
& Error code. If no error, 0 is returned. See Section~\ref { sec:errors} for details.\\
\verb |nlev| & \verb |integer, optional, intent(in)|.\\
\verb |nlev| & \verb |integer, optional, intent(in)|.\\
& The number of levels of the multilevel preconditioner.
& The number of levels of the multilevel preconditioner.
If \verb |nlev| is not present and \verb |ptype|='ML'/'ml' ,
If \verb |nlev| is not present and \verb |ptype|=\verb |'ML'|, \verb |'ml'| ,
then \verb |nlev|=2 is assumed. Otherwise, \verb |nlev| is ignored.
then \verb |nlev|=2 is assumed. Otherwise, \verb |nlev| is ignored.\\
\end { tabular}
\end { tabular}
@ -78,7 +81,7 @@ contained in \verb|val|.
\subsubsection * { Arguments}
\subsubsection * { Arguments}
\begin { tabular} { p{ 1.2cm} p{ 11 .5cm} }
\begin { tabular} { p{ 1.2cm} p{ 10 .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
& The preconditioner data structure. Note that \emph { x} must
be chosen according to the real/complex, single/double precision
be chosen according to the real/complex, single/double precision
@ -92,9 +95,13 @@ contained in \verb|val|.
\verb |intent(in)|.\\
\verb |intent(in)|.\\
& The value of the parameter to be set. The list of allowed
& The value of the parameter to be set. The list of allowed
values and the corresponding data types is given in
values and the corresponding data types is given in
Table~\ref { tab:params} .\\
Tables~\ref { tab:p_ type} -\ref { tab:p_ coarse} .
When the value is of type \verb |character(len=*)|,
uppercase and lowercase letters can be used indifferently.\\
\verb |info| & \verb |integer, intent(out)|.\\
\verb |info| & \verb |integer, intent(out)|.\\
& Error code. See Section~\ref { sec:errors} for details.\\
& Error code. If no error, 0 is returned. See Section~\ref { sec:errors}
for details.\\
%
% \verb |ilev| & \verb |integer, optional, intent(in)|.\\
% \verb |ilev| & \verb |integer, optional, intent(in)|.\\
% & For the multilevel preconditioner, the level at which the
% & For the multilevel preconditioner, the level at which the
% preconditioner parameter has to be set.
% preconditioner parameter has to be set.
@ -105,49 +112,50 @@ contained in \verb|val|.
\end { tabular}
\end { tabular}
\ \\
\ \\
A variety of (one-level and multi-level) preconditioner can be obtained
A variety of (one-level and multi-level) preconditioners can be obtained
by a suitable setting of the preconditioner parameters. These parameters
by a suitable setting of the preconditioner parameters. These parameters
can be logically divided into four groups, i.e.\ parameters defining
can be logically divided into four groups, i.e.\ parameters defining
\begin { enumerate}
\begin { enumerate}
\item the type of multi-level preconditioner;
\item the type of multi-level preconditioner;
\item the one-level preconditioner to be used as smoother;
\item the one-level preconditioner used as smoother;
\item the aggregation algorithm;
\item the aggregation algorithm;
\item the coarse-space correction at the coarsest level.
\item the coarse-space correction at the coarsest level.
\end { enumerate}
\end { enumerate}
A list of the parameters that can be set, along with their allowed and
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} .
default values, is given in Tables~\ref { tab:p_ type} -\ref { tab:p_ coarse} .
For a better understanding of the meaning of the parameters, the user
is referred to Section \ref { sec:background} .
%
% Note that the routine allows to set different features of the
% Note that the routine allows to set different features of the
% preconditioner at each level through the use of \verb |ilev|.
% preconditioner at each level through the use of \verb |ilev|.
% This should be done by users with experience in the field of
% This should be done by users with experience in the field of
% multi-level preconditioners. Non-expert users are recommended
% multi-level preconditioners. Non-expert users are recommended
% to call \verb | mld_ precset| without specifying \verb |ilev|.
% 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 { sidewaystable}
\begin { center}
\begin { center}
\begin { tabular} { |l|l|p{ 2cm} |l|p{ 7cm} |}
\begin { tabular} { |l|l|p{ 2cm} |l|p{ 7cm} |}
\hline
\hline
\verb |what| & \ emph{ data type} & \verb |val| & \emph { default} &
\verb |what| & \ textsc{ data type} & \verb |val| & \textsc { default} &
\ emph { comments} \\ \hline
\ textsc { comments} \\ \hline
% \multicolumn { 5} { |c|} { \emph { type of the multi-level preconditioner} } \\ \hline
% \multicolumn { 5} { |c|} { \emph { type of the multi-level preconditioner} } \\ \hline
\verb |mld_ ml_ type_ | & \verb |character(len=*)|
\verb |mld_ ml_ type_ | & \verb |character(len=*)|
& 'ADD' \ \ \ 'MULT'
& \texttt { 'ADD'} \ \ \ \texttt { 'MULT'}
& 'MULT'
& \texttt { 'MULT'}
& basic multi-level framework: additive or multiplicative
& basic multi-level framework: additive or multiplicative
among the levels always additive inside a level) \\
among the levels ( always additive inside a level) \\
\verb |mld_ smoother_ type_ |& \verb |character(len=*)|
\verb |mld_ smoother_ type_ |& \verb |character(len=*)|
& 'DIAG' \ \ \ 'BJAC' \ \ \ 'AS'
& \texttt { 'DIAG'} \ \ \ \texttt { 'BJAC'} \ \ \ \texttt { 'AS'}
& 'AS'
& \texttt { 'AS'}
& basic one-level preconditioner (i.e.\ smoother) of the
& basic one-level preconditioner (i.e.\ smoother) of the
multi-level preconditioner \\
multi-level preconditioner: diagonal, block Jacobi,
AS \\
\verb |mld_ smoother_ pos_ | & \verb |character(len=*)|
\verb |mld_ smoother_ pos_ | & \verb |character(len=*)|
& 'PRE' \ \ \ 'POST' \ \ \ 'TWOSIDE'
& \texttt { 'PRE'} \ \ \ \texttt { 'POST'} \ \ \ \texttt { 'TWOSIDE'}
& 'POST'
& \texttt { 'POST'}
& ``position'' of the smoother: pre-smoother, post-smoother,
& ``position'' of the smoother: pre-smoother, post-smoother,
pre-/ post-smoother \\
pre- and post-smoother \\
\hline
\hline
\end { tabular}
\end { tabular}
\end { center}
\end { center}
@ -157,72 +165,79 @@ ACCESSIBILE ALL'UTENTE.}
\begin { sidewaystable}
\begin { sidewaystable}
\begin { center}
\begin { center}
\begin { tabular} { |l|l|p{ 2cm} |l|p{ 7cm} |}
\begin { tabular} { |l|l|p{ 2.6 cm} |l|p{ 7cm} |}
\hline
\hline
\verb |what| & \ emph{ data type} & \verb |val| & \emph { default} &
\verb |what| & \ textsc{ data type} & \verb |val| & \textsc { default} &
\ emph { comments} \\ \hline
\ textsc { comments} \\ \hline
% \multicolumn { 5} { |c|} { \emph { basic one-level preconditioner (smoother)} } \\ \hline
% \multicolumn { 5} { |c|} { \emph { basic one-level preconditioner (smoother)} } \\ \hline
\verb |mld_ sub_ ovr| & \verb |integer|
\verb |mld_ sub_ ovr_ | & \verb |integer|
& any number $ \ge 0 $
& any integer number $ \ge 0 $
& 1
& 1
& number of overlap in the basic Schwarz preconditioner \\
& Number of overlap layers. \\
\verb |mld_ sub_ restr_ | & \verb |character(len=*)|
\verb |mld_ sub_ restr_ | & \verb |character(len=*)|
& 'HALO' \ \ \ 'NONE'
& \texttt { 'HALO'} \ \ \ \ \ \texttt { 'NONE'}
& 'HALO'
& \texttt { 'HALO'}
& type of restriction operator used in basic Schwarz preconditioner: 'HALO' for taking into account contributions from the overlap \\
& Type of restriction operator:
\texttt { 'HALO'} for taking into account the overlap, \texttt { 'NONE'}
for neglecting it. \\
\verb |mld_ sub_ prol_ | & \verb |character(len=*)|
\verb |mld_ sub_ prol_ | & \verb |character(len=*)|
& 'SUM' \ \ \ 'NONE'
& \texttt { 'SUM'} \ \ \ \ \ \texttt { 'NONE'}
& 'NONE'
& \texttt { 'NONE'}
& type of prolongator operator used in basic Schwarz preconditioner: 'NONE' for neglecting contributions from the overlap \\
& Type of prolongator operator:
\texttt { 'SUM'} for adding the contributions from the overlap, \texttt { 'NONE'}
for neglecting them. \\
\verb |mld_ sub_ solve_ | & \verb |character(len=*)|
\verb |mld_ sub_ solve_ | & \verb |character(len=*)|
& 'ILU' \ \ \ 'MILU' \ \ \ 'ILUT' \ \ \ 'UMF' \ \ \ 'SLU'
& \texttt { 'ILU'} \ \ \ \ \ \texttt { 'MILU'} \ \ \ \ \ \texttt { 'ILUT'} \ \ \ \ \
& 'UMF'
\texttt { 'UMF'} \ \ \ \ \ \texttt { 'SLU'}
& available local solver: 'ILU' for incomplete LU, 'MILU' for modified incomplete LU, 'ILUT'
& \texttt { 'UMF'}
for incomplete LU with threshold, 'UMF' for complete LU using UMFPACK~\cite { UMFPACK} version 4.4, 'SLU' for complete LU using SuperLU~\cite { SUPERLU} , version 3.0 \\
& Local solver: ILU($ p $ ), MILU($ p $ ), ILU($ p,t $ ), LU from UMFPACK, LU from SuperLU,
plus triangular solve. \\
\verb |mld_ sub_ fillin_ | & \verb |integer|
\verb |mld_ sub_ fillin_ | & \verb |integer|
& any number $ \ge 0 $
& any integer number $ \ge 0 $
& 0
& 0
& fill-in level for 'ILU', 'MILU' and 'ILUT' of local blocks \\
& Fill-in level $ p $ of the incomplete LU factorizations. \\
\verb |mld_ sub_ thresh_ | & \verb |real|
\verb |mld_ sub_ thresh_ | & \verb |real(|\emph { kind\_ parameter} \verb |)|
& any number $ \ge 0 . $
& any real number $ \ge 0 $
& 0.
& \texttt { 0.e0} (or \texttt { 0.d0} )
& drop tolerance for 'ILUT' \\
& Drop tolerance $ t $ in the ILU($ p,t $ ) factorization. \\
\verb |mld_ sub_ ren_ | & \verb |character(len=*)|
\verb |mld_ sub_ ren_ | & \verb |character(len=*)|
& 'RENUM\_ NONE', 'RENUM\_ GLOBAL' % , 'RENUM\_ GPS'
& \texttt { 'RENUM\_ NONE'} , \texttt { 'RENUM\_ GLOBAL'} % , \texttt { 'RENUM_ GPS'}
&
& \texttt { 'RENUM\_ NONE'}
& reordering algorithm for the local blocks \\
& Row and column reordering of the local submatrices: no reordering,
reordering according to the global numbering of the rows and columns of
the whole matrix. \\
\hline
\hline
\end { tabular}
\end { tabular}
\end { center}
\end { center}
\caption { Parameters defining the basic one-level preconditioner (smoother) .
\caption { Parameters defining the one-level preconditioner used as smoother .
\label { tab:p_ smoother} }
\label { tab:p_ smoother} }
\end { sidewaystable}
\end { sidewaystable}
\begin { sidewaystable}
\begin { sidewaystable}
\begin { center}
\begin { center}
\begin { tabular} { |l|l|p{ 2cm} |l|p{ 7cm} |}
\begin { tabular} { |l|l|p{ 2.6 cm} |l|p{ 7cm} |}
\hline
\hline
\verb |what| & \ emph{ data type} & \verb |val| & \emph { default} &
\verb |what| & \ textsc{ data type} & \verb |val| & \textsc { default} &
\ emph { comments} \\ \hline
\ textsc { comments} \\ \hline
% \multicolumn { 5} { |c|} { \emph { aggregation algorithm} } \\ \hline
% \multicolumn { 5} { |c|} { \emph { aggregation algorithm} } \\ \hline
\verb |mld_ aggr_ alg_ | & \verb |character(len=*)|
\verb |mld_ aggr_ alg_ | & \verb |character(len=*)|
& 'DEC'
& \texttt { 'DEC'}
& 'DEC'
& \texttt { 'DEC'}
& define the aggregation scheme. Now, only decoupled aggregation is available \\
& Aggregation algorithm. Currently, only the decoupled aggregation is available. \\
\verb |mld_ aggr_ kind_ | & \verb |character(len=*)|
\verb |mld_ aggr_ kind_ | & \verb |character(len=*)|
& 'SMOOTH', 'RAW'
& \texttt { 'SMOOTH'} \ \ \ \ \ \texttt { 'RAW'}
& 'SMOOTH'
& \texttt { 'SMOOTH'}
& define the type of aggregation technique (smoothed or nonsmoothed). \\
& Type of aggregation: smoothed or raw, i.e.\ using the tentative prolongator. \\
\verb |mld_ aggr_ thresh_ | & \verb |real|
\verb |mld_ aggr_ thresh_ | & \verb |real(|\emph { kind\_ parameter} \verb |) |
& any number $ \in [ 0 , 1 ] $
& any real number $ \in [ 0 , 1 ] $
& 0.
& \texttt { 0.e0} (or \texttt { 0.d0} )
& dropping threshold in aggregation \\
& The threshold $ \theta $ in the aggregation algorithm. \\
\verb |mld_ aggr_ eig_ | & \verb |character(len=*)|
\verb |mld_ aggr_ eig_ | & \verb |character(len=*)|
& 'A\_ NORMI'
& \texttt { 'A\_ NORMI'}
&
& \texttt { 'A\_ NORMI'}
& define the algorithm to evaluate the maximum eigenvalue of $ D ^ { - 1 } A $ for smoothed
& Estimate of the maximum eigenvalue of $ D ^ { - 1 } A $
aggregation. Currently only the infinity norm of the matrix A is available\\
for the smoothed aggregation. Currently, only the infinity norm of
the matrix is available. \\
\hline
\hline
\end { tabular}
\end { tabular}
\end { center}
\end { center}
@ -232,36 +247,44 @@ aggregation. Currently only the infinity norm of the matrix A is available\\
\begin { sidewaystable}
\begin { sidewaystable}
\begin { center}
\begin { center}
\begin { tabular} { |l|l|p{ 2cm} |l|p{ 7cm} |}
\begin { tabular} { |l|l|p{ 2.6 cm} |l|p{ 7cm} |}
\hline
\hline
\verb |what| & \ emph{ data type} & \verb |val| & \emph { default} &
\verb |what| & \ textsc{ data type} & \verb |val| & \textsc { default} &
\ emph { comments} \\ \hline
\ textsc { comments} \\ \hline
% \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 |character(len=*)|
\verb |mld_ coarse_ mat_ | & \verb |character(len=*)|
& 'DISTR', 'REPL'
& \texttt { 'DISTR'} \ \ \ \ \ \texttt { 'REPL'}
& 'DISTR'
& \texttt { 'DISTR'}
& Coarse matrix: distributed or replicated \\
& Coarsest matrix: distributed among the processors or replicated on each of them. \\
\verb |mld_ coarse_ solve_ | & \verb |character(len=*)|
\verb |mld_ coarse_ solve_ | & \verb |character(len=*)|
& 'BJAC' \ \ \ 'UMF' \ \ \ 'SLU' \ \ \ 'SLUDIST'
& \texttt { 'BJAC'} \ \ \ \ \ \texttt { 'UMF'} \ \ \ \ \ \ \ \ \texttt { 'SLU'}
& 'BJAC'
\ \ \ \ \ \texttt { 'SLUDIST'}
& Only 'BJAC' and 'SLUDIST' can be used for distributed coarse matrix. 'BJAC' corresponds to some sweeps of a block-Jacobi solver, while 'SLUDIST' corresponds
& \texttt { 'BJAC'}
to the use of the external package SuperLU\_ Dist~\cite { SUPERLUDIST} , version 2.0, for distributed sparse factorization and solve. \\
& Solver used at the coarsest level: block Jacobi, sequential LU from UMFPACK,
sequential LU from SuperLU, or distributed LU from SuperLU\_ Dist.
If the coarsest matrix is distributed, only \texttt { 'BJAC'} and \texttt { 'SLUDIST'}
can be chosen; if it is replicated, only \emph { 'BJAC'} or \texttt { 'SLUDIST'} can
be selected. \\
\verb |mld_ coarse_ subsolve_ | & \verb |character(len=*)|
\verb |mld_ coarse_ subsolve_ | & \verb |character(len=*)|
& 'ILU' \ \ \ 'MILU' \ \ \ 'ILUT' \ \ \ 'UMF' \ \ \ 'SLU'
& \texttt { 'ILU'} \ \ \ \ \ \ \ \texttt { 'MILU'} \ \ \ \ \ \ \ \ \texttt { 'ILUT'}
& 'UMF'
\ \ \ \ \ \ \ \texttt { 'UMF'} \ \ \ \ \ \ \ \texttt { 'SLU'}
& available solver for diagonal local blocks of the coarse matrix, when 'BJAC' is used as coarse solver\\
& \texttt { 'UMF'}
& Solver for the diagonal blocks of the coarse matrix, in case the block Jacobi solver
is chosen as coarsest-level solver: ILU($ p $ ), MILU($ p $ ), ILU($ p,t $ ), LU from UMFPACK,
LU from SuperLU, plus triangular solve. \\
\verb |mld_ coarse_ sweeps_ |& \verb |integer|
\verb |mld_ coarse_ sweeps_ |& \verb |integer|
& any number $ > 0 $
& any integer number $ > 0 $
& 4
& \texttt { 4}
& number of Block-Jacobi sweeps when 'BJAC' is used as coarse solver \\
& Number of Block-Jacobi sweeps when 'BJAC' is used as coarsest-level solver. \\
\verb |mld_ coarse_ fillin_ | & \verb |integer|
\verb |mld_ coarse_ fillin_ | & \verb |integer|
& any number $ \ge 0 $
& any integer number $ \ge 0 $
& 0
& \texttt { 0}
& fill-in level in incomplete factorization of local diagonal blocks of the coarse matrix, when 'BJAC' is used as coarse solver and 'ILU' or 'MILU' is used as local solver \textbf { MODIFICA NOME PARAM. NEL SW} \\
& Fill-in level $ p $ of the incomplete LU factorizations. \\
\verb |mld_ coarse_ thresh_ | & \verb |real|
\verb |mld_ coarse_ thresh_ | & \verb |real(|\emph { kind\_ parameter} \verb |)|
& any number $ \ge 0 . $
& any real number $ \ge 0 $
& 0.
& \texttt { 0.d0} (or \texttt { 0.e0} )
& drop tolerance in incomplete factorization of local diagonal blocks of the coarse matrix, when 'BJAC' is used as coarse solver and 'ILUT' is used as local solver \\ \hline
& Drop tolerance $ t $ in the ILU($ p,t $ ) factorization. \\
\hline
\end { tabular}
\end { tabular}
\end { center}
\end { center}
\caption { Parameters defining the coarse-space correction at the coarsest
\caption { Parameters defining the coarse-space correction at the coarsest
@ -282,20 +305,20 @@ the user through the routines \verb|mld_precinit| and \verb|mld_precset|.
\subsubsection * { Arguments}
\subsubsection * { Arguments}
\begin { tabular} { p{ 1.2cm} p{ 11 .5cm} }
\begin { tabular} { p{ 1.2cm} p{ 10 .5cm} }
\verb |a| & \verb |type(psb_ |\emph { x} \verb |spmat_ type), intent(in)|. \\
\verb |a| & \verb |type(psb_ |\emph { x} \verb |spmat_ type), intent(in)|. \\
& The sparse matrix structure containing the local part of the
& The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that \emph { x} must be chosen according
matrix to be preconditioned. 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.
See the PSBLAS User's Guide for details \cite { PSBLASGUIDE} .\\
See the PSBLAS User's Guide for details \cite { PSBLASGUIDE} .\\
\verb |desc_ a| & \verb |type(psb_ desc_ type), intent(in)|. \\
\verb |desc_ a| & \verb |type(psb_ desc_ type), intent(in)|. \\
& The communication descriptor of a. See the PSBLAS User's Guide for
& The communication descriptor of \verb | a| . See the PSBLAS User's Guide for
details \cite { PSBLASGUIDE} .\\
details \cite { PSBLASGUIDE} .\\
\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.\\
\verb |info| & \verb |integer, intent(out)|.\\
\verb |info| & \verb |integer, intent(out)|.\\
& Error code. See Section~\ref { sec:errors} for details.\\
& Error code. If no error, 0 is returned. See Section~\ref { sec:errors} for details.\\
\end { tabular}
\end { tabular}
\clearpage
\clearpage
@ -308,16 +331,16 @@ the user through the routines \verb|mld_precinit| and \verb|mld_precset|.
\noindent
\noindent
This routine computes $ y = op ( M ^ { - 1 } ) \, x $ , where $ M $ is a previously built
This routine computes $ y = op ( M ^ { - 1 } ) \, x $ , where $ M $ is a previously built
preconditioner, stored in the \verb |p| data structure , and $ op $
preconditioner, stored into \verb |p| , and $ op $
denotes the preconditioner itself or its transpose, according to
denotes the preconditioner itself or its transpose, according to
the value of \verb |trans|.
the value of \verb |trans|.
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
\verb |mld_ precaply| is called within the PSBLAS routine \verb |mld_ krylov|
\verb |mld_ precaply| is called within the PSBLAS routine \verb |mld_ krylov|
and hence is completely transparent to the user.
and hence it i s completely transparent to the user.
\subsubsection * { Arguments}
\subsubsection * { Arguments}
\begin { tabular} { p{ 1.2cm} p{ 11 .5cm} }
\begin { tabular} { p{ 1.2cm} p{ 10 .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, containing the local part of $ M $ .
& The preconditioner data structure, containing the local part of $ M $ .
Note that \emph { x} must be chosen according
Note that \emph { x} must be chosen according
@ -334,7 +357,7 @@ and hence is completely transparent to the user.
& The communication descriptor associated to the matrix to be
& The communication descriptor associated to the matrix to be
preconditioned.\\
preconditioned.\\
\verb |info| & \verb |integer, intent(out)|.\\
\verb |info| & \verb |integer, intent(out)|.\\
& Error code. See Section~\ref { sec:errors} for details.\\
& Error code. If no error, 0 is returned. See Section~\ref { sec:errors} for details.\\
\verb |trans| & \verb |character(len=1), optional, intent(in).|\\
\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 |'N','n'| then $ op ( M ^ { - 1 } ) = M ^ { - 1 } $ ;
if \verb |trans| = \verb |'T','t'| then $ op ( M ^ { - 1 } ) = M ^ { - T } $
if \verb |trans| = \verb |'T','t'| then $ op ( M ^ { - 1 } ) = M ^ { - T } $
@ -359,24 +382,24 @@ This routine deallocates the preconditioner data structure.
\subsubsection * { Arguments}
\subsubsection * { Arguments}
\begin { tabular} { p{ 1.2cm} p{ 11 .5cm} }
\begin { tabular} { p{ 1.2cm} p{ 10 .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.\\
\verb |info| & \verb |integer, intent(out)|.\\
\verb |info| & \verb |integer, intent(out)|.\\
& Error code. See Section~\ref { sec:errors} for details.\\
& Error code. If no error, 0 is returned. See Section~\ref { sec:errors} for details.\\
\end { tabular}
\end { tabular}
\subsection { Subroutine mld\_ precdescr\label { sec:precdescr} }
\subsection { Subroutine mld\_ precdescr\label { sec:precdescr} }
\begin { center}
\begin { center}
\verb |mld_ precdescr(p,iout)|\\
\verb |mld_ precdescr(p,info,i out)|\\
\end { center}
\end { center}
\noindent
\noindent
This routine prints a description of the preconditioner
This routine prints a description of the preconditioner
to a file.
to the standard output or to a file.
\subsubsection * { Arguments}
\subsubsection * { Arguments}
@ -384,9 +407,11 @@ to a file.
\verb |p| & \verb |type(mld_ |\emph { x} \verb |prec_ type), intent(in)|.\\
\verb |p| & \verb |type(mld_ |\emph { x} \verb |prec_ type), intent(in)|.\\
& 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.\\
\verb |info| & \verb |integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref { sec:errors} for details.\\
\verb |iout| & \verb |integer, intent(in), optional|.\\
\verb |iout| & \verb |integer, intent(in), optional|.\\
& The id of the file where the preconditioner description
& The id of the file where the preconditioner description
will be printed, default is standard output.\\
will be printed; the default is the standard output.\\
\end { tabular}
\end { tabular}
% % % Local Variables:
% % % Local Variables: