mirror of
https://github.com/sfilippone/amg4psblas.git
synced 2026-10-06 14:44:55 +00:00
mld2p4-2:
config/pac.m4 docs/src/building.tex docs/src/distribution.tex docs/src/gettingstarted.tex docs/src/overview.tex docs/src/precs.tex docs/src/userinterface.tex tests/pdegen/runs/ppde.inp Doc fixes first step.
This commit is contained in:
+21
-8
@@ -10,11 +10,10 @@ to build the software.
|
||||
MLD2P4 is implemented almost entirely in Fortran~2003, with some
|
||||
interfaces to external libraries in C; the Fortran compiler
|
||||
must support the Fortran~2003 standard plus the extension \verb|MOLD=|
|
||||
feature, which
|
||||
enhances the usability of \verb|ALLOCATE|.
|
||||
feature, which enhances the usability of \verb|ALLOCATE|.
|
||||
Many compiles do this; in particular, this is
|
||||
supported by the GNU Fortran compiler, for which we
|
||||
recommend to use at least version 4.7.2.
|
||||
recommend to use at least version 4.8.
|
||||
The software defines data types and interfaces for
|
||||
real and complex data, in both single and double precision.
|
||||
|
||||
@@ -38,7 +37,7 @@ The following base libraries are needed:
|
||||
high-performance computing systems;
|
||||
\item[PSBLAS] \cite{PSBLASGUIDE,psblas_00} Parallel Sparse BLAS is
|
||||
available from \\ \verb|http://www.ce.uniroma2.it/psblas|; version
|
||||
3.3 (or later) is required. Indeed, all the prerequisites
|
||||
3.4.0 (or later) is required. Indeed, all the prerequisites
|
||||
listed so far are also prerequisites of PSBLAS.
|
||||
\end{description}
|
||||
Please note that the four previous libraries must have Fortran
|
||||
@@ -167,6 +166,15 @@ Optional Packages:
|
||||
--with-extra-libs List additional link flags here. For example,
|
||||
--with-extra-libs=-lspecial_system_lib or
|
||||
--with-extra-libs=-L/path/to/libs
|
||||
--with-mumps=LIBNAME Specify the libname for MUMPS. Default: "-lsmumps
|
||||
-ldmumps -lcmumps -lzmumps -lmumps_common -lpord"
|
||||
--with-mumpsdir=DIR Specify the directory for MUMPS library and
|
||||
includes. Note: you will need to add auxiliary
|
||||
libraries with --extra-libs; this depends on how
|
||||
MUMPS was configured and installed, at a minimum you
|
||||
will need SCALAPACK and BLAS
|
||||
--with-mumpsincdir=DIR Specify the directory for MUMPS includes.
|
||||
--with-mumpslibdir=DIR Specify the directory for MUMPS library.
|
||||
--with-umfpack=LIBNAME Specify the library name for UMFPACK and its support
|
||||
libraries. Default: "-lumfpack -lamd"
|
||||
--with-umfpackdir=DIR Specify the directory for UMFPACK library and
|
||||
@@ -217,12 +225,12 @@ it to find libraries and programs with nonstandard names/locations.
|
||||
|
||||
Report bugs to <bugreport@mld2p4.it>.
|
||||
\end{verbatim}
|
||||
For instance, if a user has built and installed PSBLAS 3.3 under the
|
||||
For instance, if a user has built and installed PSBLAS 3.4 under the
|
||||
\verb|/opt| directory and is
|
||||
using the SuiteSparse package (which includes UMFPACK), then MLD2P4
|
||||
might be configured with:
|
||||
\begin{verbatim}
|
||||
./configure --with-psblas=/opt/psblas-3.3/ \
|
||||
./configure --with-psblas=/opt/psblas-3.4/ \
|
||||
--with-umfpackincdir=/usr/include/suitesparse
|
||||
\end{verbatim}
|
||||
Once the configure script has completed execution, it will have
|
||||
@@ -230,8 +238,13 @@ generated the file \verb|Make.inc| which will then be used by all
|
||||
Makefiles in the directory tree; this file will be copied in the
|
||||
install directory under the name \verb|Make.inc.MLD2P4|.
|
||||
|
||||
In order to use the MUMPS solver based on multifrontal factorization, the user has to add MUMPS flags, include directories and libraries in the Make.inc file.
|
||||
The necessary MUMPS libraries are \verb|-ldmumps, -lsmumps -lzmumps -lzmumps -mumps_common -lpord|. The flag \verb|-DHAVE_MUMPS_| is mandatory too. Since MUMPS uses openmp and ScaLAPACK, \verb|LINKOPT=-fonemp| must be added as well, along with the ScaLAPACK flags, include directories and library (which can be set using the configure script).
|
||||
To use the MUMPS solver package,
|
||||
the user has to add the appropriate options to the configure script;
|
||||
by default we are looking for the libraries
|
||||
\verb|-ldmumps -lsmumps -lzmumps -lzmumps -mumps_common -lpord|.
|
||||
MUMPS often uses additional packages such as ScaLAPACK, ParMETIS,
|
||||
SCOTCH, as well as enabling OpenMP; in such cases it is necessary to
|
||||
add linker options with the \verb|--with-extra-libs| configure option.
|
||||
|
||||
To build the library the user will now enter
|
||||
\begin{verbatim}
|
||||
|
||||
@@ -18,4 +18,4 @@ account when treating derived works.
|
||||
The library defines a version string with the
|
||||
constant
|
||||
\[ \verb|mld_version_string_|\]
|
||||
whose current value is \verb|2.0.0|
|
||||
whose current value is \verb|2.1.0|
|
||||
|
||||
@@ -203,9 +203,12 @@ 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, has a coarsest matrix replicated on the processors,
|
||||
and solves the coarsest-level system with the LU factorization from UMFPACK~\cite{UMFPACK}.
|
||||
Figure~\ref{fig:ex_3lhm} shows how to set a three-level preconditioner similar to the one of ~\ref{fig:ex_3lh}, but the coarsest-level systems is solved with the multifrontal factorization from MUMPS~\cite{UMFPACK}.
|
||||
Note that MUMPS can be used on both replicated and distributed coarsest level matrices,
|
||||
as a global and local solver respectively.
|
||||
Figure~\ref{fig:ex_3lhm} shows how to set a three-level preconditioner
|
||||
similar to the one of ~\ref{fig:ex_3lh}, but the coarsest-level
|
||||
systems is solved with the multifrontal factorization from
|
||||
MUMPS~\cite{UMFPACK}.
|
||||
Note that MUMPS can be used on both replicated and distributed
|
||||
coarsest level matrices, as a global and local solver respectively.
|
||||
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
|
||||
@@ -221,12 +224,13 @@ solver. Again, \verb|mld_precset| is used only to set
|
||||
non-default values of the parameters (see Tables~\ref{tab:p_type}-\ref{tab:p_coarse}).
|
||||
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:ex_3lhm}-\ref{fig:ex_3la} are
|
||||
included in the example program file \verb|mld_dexample_ml.f90| too.
|
||||
The code fragments shown in in
|
||||
Figures~\ref{fig:ex_3lh}~\ref{fig:ex_3lhm}-\ref{fig:ex_3la} are
|
||||
included in the example program file \verb|mld_dexample_ml.f90| too.
|
||||
|
||||
Finally, Figure~\ref{fig:ex_1l} shows the setup of a one-level
|
||||
additive Schwarz preconditioner, i.e.\ RAS with overlap 2. The corresponding
|
||||
example program is available in \verb|mld_dexample_| \verb|1lev.f90|.
|
||||
additive Schwarz preconditioner, i.e.\ RAS with overlap 2. The
|
||||
corresponding example program is available in \verb|mld_dexample_1lev.f90|.
|
||||
|
||||
For all the previous preconditioners, example programs where the sparse matrix and
|
||||
the right-hand side are generated by discretizing a PDE with Dirichlet
|
||||
|
||||
@@ -29,7 +29,7 @@ discretization of a PDE). The \emph{smoothed aggregation} technique is applied
|
||||
as algebraic coarsening strategy~\cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}.
|
||||
\end{itemize}
|
||||
|
||||
Version 2.0 of the package is written in \emph{Fortran~2003}, following an
|
||||
Version 2.1 of the package is written in \emph{Fortran~2003}, following an
|
||||
\emph{object-oriented design} through the exploitation of features
|
||||
such as abstract data type creation, functional overloading and
|
||||
dynamic memory management.
|
||||
@@ -74,11 +74,12 @@ We provide here a description of the upper-layer routines, but not of the
|
||||
medium-layer ones.%% For a detailed description of the overall software architecture
|
||||
%% of MLD2P4 the reader is referred to~\cite{MLD2P4_TOMS}.
|
||||
|
||||
The user interface of version 2.0 is essentially identical to that of
|
||||
The user interface of version 2.1 is essentially identical (except for
|
||||
the support of additional solvers) to that of
|
||||
version 1.1. The internal implementation however has been changed
|
||||
significantly; as a result, it has become much easier to extend the library by
|
||||
adding new smoothers and/or solvers, thanks to the Fortran~2003 features
|
||||
exploited in the design of PSBLAS~3.0.
|
||||
exploited in the design of PSBLAS~3.
|
||||
|
||||
This guide is organized as follows. General information on the distribution of the source code
|
||||
is reported in Section~\ref{sec:distribution}, while details on the configuration
|
||||
|
||||
+12
-4
@@ -13,7 +13,8 @@ be combined in a multilevel framework.
|
||||
The base (one-level) preconditioners include:
|
||||
\begin{itemize}
|
||||
\item Diagonal Scaling
|
||||
\item Block Jacobi
|
||||
\item Block Jacobi
|
||||
\item Hybrid Gauss-Seidel;
|
||||
\item Additive Schwarz, Restricted Additive Schwarz and
|
||||
Additive Schwarz with Harmonic extensions;
|
||||
\end{itemize}
|
||||
@@ -109,7 +110,8 @@ $ptype$ string as follows\footnote{The string is case-insensitive}:
|
||||
|
||||
\subroutine{mld\_precset}{Set preconditioner features}
|
||||
|
||||
\syntax{call mld\_precset}{prec, what, val, info, ilev}
|
||||
\syntax{call mld\_precset}{prec, what, val, info, ilev, pos}
|
||||
\syntax{call prec\%set}{what, val, info, ilev, pos}
|
||||
|
||||
|
||||
\begin{description}
|
||||
@@ -124,8 +126,8 @@ Specified as: an already initialized precondtioner data structure \precdata\\
|
||||
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.
|
||||
Specified as: an integer constant or a string. 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}\\
|
||||
@@ -138,6 +140,12 @@ see usage notes for legal values.
|
||||
Scope: {\bf global} \\
|
||||
Type: {\bf optional}\\
|
||||
Specified as: an integer value, see usage notes.
|
||||
\item[pos] The position of the smoother/solver to which the current
|
||||
setting applies.
|
||||
feature choice should apply.\\
|
||||
Scope: {\bf global} \\
|
||||
Type: {\bf optional}\\
|
||||
Specified as: a character variable, with values \verb|pre| or \verb|post|.
|
||||
\end{description}
|
||||
|
||||
\begin{description}
|
||||
|
||||
+17
-12
@@ -3,10 +3,11 @@
|
||||
{\textsc{\ref{sec:userinterface} User Interface}}
|
||||
|
||||
|
||||
The basic user interface of MLD2P4 consists of six routines. The four routines \verb|mld_| \verb|precinit|,
|
||||
\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.
|
||||
The basic user interface of MLD2P4 consists of six routines. The four
|
||||
routines \verb|mld_| \verb|precinit|, \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.
|
||||
The routine \verb|mld_precfree| deallocates the preconditioner data structure, while
|
||||
\verb|mld_precdescr| prints a description of the preconditioner setup by the user.
|
||||
|
||||
@@ -83,7 +84,7 @@ contained in \verb|val|.
|
||||
The routine may also be invoked as a method
|
||||
of the preconditioner object as in the following:
|
||||
\begin{center}
|
||||
\verb|call p%set(what,val,info [,ilev])|\\
|
||||
\verb|call p%set(what,val,info [,ilev, pos])|\\
|
||||
\end{center}
|
||||
In this case it is also possible to specify an optional \verb|ilev|
|
||||
argument that restricts the effect of
|
||||
@@ -94,8 +95,8 @@ solver by extending one of the base MLD2P4 types, and has declared a
|
||||
variable of the new type in the main program, it is possible to pass
|
||||
the new smoother/solver variable to the setup routine as follows:
|
||||
\begin{center}
|
||||
\verb|call p%set(smoother,info [,ilev])|\\
|
||||
\verb|call p%set(solver,info [,ilev])|
|
||||
\verb|call p%set(smoother,info [,ilev ,pos])|\\
|
||||
\verb|call p%set(solver,info [,ilev ,poss])|
|
||||
\end{center}
|
||||
In this way, the variable will act as a \emph{mold} to which the
|
||||
preconditioner will conform, even though the MLD2P4 library is not
|
||||
@@ -241,16 +242,20 @@ according to their needs.
|
||||
for neglecting them. \\ \hline
|
||||
\verb|mld_sub_solve_| \break \verb|SUB_SOLVE| & \verb|character(len=*)|
|
||||
& \texttt{'DIAG'} \hspace{2.5cm}
|
||||
\texttt{'GS'} \hspace{2.5cm}
|
||||
\texttt{'GS'} \hspace{2.5cm} \texttt{'BWGS'} \hspace{2.5cm}
|
||||
\texttt{'ILU'} \hspace{2.5cm}
|
||||
\texttt{'MILU'} \hspace{2.5cm} \texttt{'ILUT'}
|
||||
\hspace{2.5cm} \texttt{'UMF'} \hspace{2.5cm} \texttt{'SLU'}
|
||||
\hspace{2.5cm}
|
||||
\texttt{'UMF'} \hspace{2.5cm}
|
||||
\texttt{'SLU'}
|
||||
\hspace{2.5cm} \texttt{'MUMPS'}
|
||||
& \texttt{'ILU'}
|
||||
& Predefined local solver: pointwise Jacobi
|
||||
(diagonal scaling),
|
||||
(forward) Gauss-Seidel, Backward
|
||||
Gauss-Seidel, ILU($p$), MILU($p$),
|
||||
ILU($p,t$), LU from UMFPACK, LU from
|
||||
SuperLU (plus triangular solve). \\ \hline
|
||||
ILU($p,t$), LU from UMFPACK, LU from
|
||||
SuperLU (plus triangular solve), LU from MUMPS. \\ \hline
|
||||
\verb|mld_sub_fillin_| \break \verb|SUB_FILLIN| & \verb|integer|
|
||||
& Any~int.~num.~$\ge 0$
|
||||
& 0
|
||||
@@ -306,7 +311,7 @@ according to their needs.
|
||||
& Aggregation algorithm. Currently, only the
|
||||
decoupled aggregation is available. \\ \hline
|
||||
\verb|mld_aggr_ord_| \break \verb|AGGR_ORD| & \verb|character(len=*)|
|
||||
& \texttt{'NAT'}
|
||||
& \texttt{'NATURAL'}
|
||||
& \texttt{'DEGREE'}
|
||||
& Initial ordering of indices for aggregation
|
||||
algorithm: natural ordering or sorted by
|
||||
|
||||
Reference in New Issue
Block a user