html/index.html
 html/node1.html
 html/node10.html
 html/node11.html
 html/node12.html
 html/node13.html
 html/node14.html
 html/node15.html
 html/node16.html
 html/node17.html
 html/node18.html
 html/node19.html
 html/node2.html
 html/node20.html
 html/node21.html
 html/node22.html
 html/node23.html
 html/node24.html
 html/node25.html
 html/node26.html
 html/node3.html
 html/node4.html
 html/node5.html
 html/node6.html
 html/node7.html
 html/node8.html
 html/node9.html
 html/userhtml.html
 src/Makefile
 src/building.tex
 src/userguide.tex
 src/userhtml.tex
 userguide.pdf


Fixed mail hyperlink.
This commit is contained in:
Salvatore Filippone
2008-07-24 13:00:39 +00:00
parent 7829b23b6a
commit 2a2601c1ee
33 changed files with 4592 additions and 4544 deletions
+248 -170
View File
@@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Getting Started</TITLE>
<META NAME="description" CONTENT="Getting Started">
<TITLE>Smoothed Aggregation</TITLE>
<META NAME="description" CONTENT="Smoothed Aggregation">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@@ -18,228 +18,306 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node15.html">
<LINK REL="previous" HREF="node10.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="previous" HREF="node12.html">
<LINK REL="up" HREF="node11.html">
<LINK REL="next" HREF="node14.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html216"
<A NAME="tex2html219"
HREF="node14.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html212"
HREF="userhtml.html">
<A NAME="tex2html215"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html206"
<A NAME="tex2html211"
HREF="node12.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html214"
<A NAME="tex2html217"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html217"
HREF="node14.html">Examples</A>
<B> Up:</B> <A NAME="tex2html213"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html207"
HREF="node12.html">Smoothed Aggregation</A>
&nbsp; <B> <A NAME="tex2html215"
<B> Next:</B> <A NAME="tex2html220"
HREF="node14.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html216"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html212"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
&nbsp; <B> <A NAME="tex2html218"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00070000000000000000"></A><A NAME="sec:started"></A>
<H2><A NAME="SECTION00062000000000000000"></A><A NAME="sec:aggregation"></A>
<BR>
Getting Started
</H1>
Smoothed Aggregation
</H2>
<P>
We describe the basics for building and applying MLD2P4 one-level and multi-level
Schwarz preconditioners with the Krylov solvers included in PSBLAS [<A
HREF="node24.html#PSBLASGUIDE">14</A>].
The following steps are required:
In order to define the restriction operator <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img67.png"
ALT="$R_C$">, which is used to compute
the coarse-level matrix <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img43.png"
ALT="$A_C$">, MLD2P4 uses the <I>smoothed aggregation</I>
algorithm described in [<A
HREF="node25.html#BREZINA_VANEK">1</A>,<A
HREF="node25.html#VANEK_MANDEL_BREZINA">24</A>].
The basic idea of this algorithm is to build a coarse set of vertices
<IMG
WIDTH="32" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$W_C$"> by suitably grouping the vertices of <IMG
WIDTH="24" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img10.png"
ALT="$W$"> into disjoint subsets
(aggregates), and to define the coarse-to-fine space transfer operator <IMG
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img68.png"
ALT="$R_C^T$"> by
applying a suitable smoother to a simple piecewise constant
prolongation operator, to improve the quality of the coarse-space correction.
<P>
Three main steps can be identified in the smoothed aggregation procedure:
<OL>
<LI><I>Declare the preconditioner data structure</I>. It is a derived data type,
<code>mld_</code><I>x</I><code>prec_</code> <code>type</code>, where <I>x</I> may be <code>s</code>, <code>d</code>, <code>c</code>
or <code>z</code>, according to the basic data type of the sparse matrix
(<code>s</code> = real single precision; <code>d</code> = real double precision;
<code>c</code> = complex single precision; <code>z</code> = complex double precision).
This data structure is accessed by the user only through the MLD2P4 routines,
following an object-oriented approach.
<LI>coarsening of the vertex set <IMG
WIDTH="24" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img10.png"
ALT="$W$">, to obtain <IMG
WIDTH="32" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$W_C$">;
</LI>
<LI><I>Allocate and initialize the preconditioner data structure, according to
a preconditioner type chosen by the user</I>. This is performed by the routine
<code>mld_precinit</code>, which also sets defaults for each preconditioner
type selected by the user. The defaults associated to each preconditioner
type are given in Table&nbsp;<A HREF="#tab:precinit">1</A>, where the strings used by
<code>mld_precinit</code> to identify the preconditioner types are also given.
Note that these strings are valid also if uppercase letters are substituted by
corresponding lowercase ones.
<LI>construction of the prolongator <IMG
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img68.png"
ALT="$R_C^T$">;
</LI>
<LI><I>Modify the selected preconditioner type, by properly setting
preconditioner parameters.</I> This is performed by the routine <code>mld_precset</code>.
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 preconditioner. Examples of use of <code>mld_precset</code> are given in
Section&nbsp;<A HREF="node14.html#sec:examples">5.1</A>; a complete list of all the
preconditioner parameters and their allowed and default values is provided in
Section&nbsp;<A HREF="node15.html#sec:userinterface">6</A>, Tables&nbsp;<A HREF="#tab:p_type">2</A>-<A HREF="#tab:p_coarse">5</A>.
</LI>
<LI><I>Build the preconditioner for a given matrix.</I> This is performed by
the routine <code>mld_precbld</code>.
</LI>
<LI><I>Apply the preconditioner at each iteration of a Krylov solver.</I>
This is performed by the routine <code>mld_precaply</code>. When using the PSBLAS Krylov solvers,
this step is completely transparent to the user, since <code>mld_precaply</code> is called
by the PSBLAS routine implementing the Krylov solver (<code>psb_krylov</code>).
</LI>
<LI><I>Free the preconditioner data structure</I>. This is performed by
the routine <code>mld_</code> <code>precfree</code>. This step is complementary to step 1 and should
be performed when the preconditioner is no more used.
<LI>application of <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img67.png"
ALT="$R_C$"> and <IMG
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img68.png"
ALT="$R_C^T$"> to build <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img43.png"
ALT="$A_C$">.
</LI>
</OL>
A detailed description of the above routines is given in Section&nbsp;<A HREF="node15.html#sec:userinterface">6</A>.
Examples showing the basic use of MLD2P4 are reported in Section&nbsp;<A HREF="node14.html#sec:examples">5.1</A>.
<P>
Note that the Fortran 95 module <code>mld_prec_mod</code>, containing the definition of the
preconditioner data type and the interfaces to the routines of MLD2P4,
must be used in any program calling such routines.
The modules <code>psb_base_mod</code>, for the sparse matrix and communication descriptor
data types, and <code>psb_krylov_mod</code>, for interfacing with the
Krylov solvers, must be also used (see Section&nbsp;<A HREF="node14.html#sec:examples">5.1</A>).
<P>
<BR><B>Remark 1.</B> 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 [<A
HREF="node24.html#aaecc_07">3</A>,<A
HREF="node24.html#apnum_07">4</A>]. However, this solver does
not necessarily correspond to the smallest number of iterations of the
preconditioned Krylov method, which is usually obtained by applying
a direct solver to the coarsest-level system, e.g. based on the LU
factorization (see Section&nbsp;<A HREF="node15.html#sec:userinterface">6</A>
for the coarsest-level solvers available in MLD2P4).
<P>
<BR><B>Remark 2.</B> The include path for MLD2P4 must override
those for PSBLAS, e.g. the latter must come first in the sequence
passed to the compiler, as the MLD2P4 version of the Krylov solver
interfaces must override that of PSBLAS. This will change in the future
when the support for the <code>class</code> statement becomes widespread in Fortran
compilers.
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="923"></A>
<TABLE>
<CAPTION><STRONG>Table 1:</STRONG>
Preconditioner types, corresponding strings and default choices.
</CAPTION>
<TR><TD>
To perform the coarsening step, we have implemented the aggregation algorithm sketched
in [<A
HREF="node25.html#apnum_07">4</A>]. According to [<A
HREF="node25.html#VANEK_MANDEL_BREZINA">24</A>], a modification of
this algorithm has been actually considered,
in which each aggregate <IMG
WIDTH="26" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img69.png"
ALT="$N_r$"> is made of vertices of <IMG
WIDTH="24" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img10.png"
ALT="$W$"> that are <I>strongly coupled</I>
to a certain root vertex <IMG
WIDTH="53" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img70.png"
ALT="$r \in W$">, i.e. <BR><P></P>
<DIV ALIGN="CENTER">
<TABLE CELLPADDING=3 BORDER="1" ALIGN="CENTER">
<TR><TD ALIGN="LEFT"><SMALL>TYPE</SMALL></TD>
<TD ALIGN="LEFT"><SMALL>STRING</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=221><SMALL>DEFAULT PRECONDITIONER</SMALL></TD>
</TR>
<TR><TD ALIGN="LEFT">No preconditioner</TD>
<TD ALIGN="LEFT"><code>'NOPREC'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=221>Considered only to use the PSBLAS
Krylov solvers with no preconditioner.</TD>
</TR>
<TR><TD ALIGN="LEFT">Diagonal</TD>
<TD ALIGN="LEFT"><code>'DIAG'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=221>--</TD>
</TR>
<TR><TD ALIGN="LEFT">Block Jacobi</TD>
<TD ALIGN="LEFT"><code>'BJAC'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=221>Block Jacobi with ILU(0) on the local blocks.</TD>
</TR>
<TR><TD ALIGN="LEFT">Additive Schwarz</TD>
<TD ALIGN="LEFT"><code>'AS'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=221>Restricted Additive Schwarz (RAS),
with overlap 1 and ILU(0) on the local blocks.</TD>
</TR>
<TR><TD ALIGN="LEFT">Multilevel</TD>
<TD ALIGN="LEFT"><code>'ML'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=221>Multi-level hybrid preconditioner (additive on the
same level and multiplicative through the levels),
with post-smoothing only.
Number of levels: 2.
Post-smoother: RAS with overlap 1 and ILU(0)
on the local blocks.
Aggregation: decoupled smoothed aggregation with
threshold <IMG
WIDTH="45" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img86.png"
ALT="$\theta = 0$">.
Coarsest matrix: distributed among the processors.
Coarsest-level solver:
4 sweeps of the block-Jacobi solver,
with LU (or ILU) factorization of the blocks
(UMFPACK for the double precision versions and
SuperLU for the single precision ones, if the packages
have been installed; ILU(0), otherwise).</TD>
</TR>
</TABLE>
<!-- MATH
\begin{displaymath}
N_r = \left\{s \in W: |a_{rs}| > \theta \sqrt{|a_{rr}a_{ss}|} \right\}
\cup \left\{ r \right\} ,
\end{displaymath}
-->
<IMG
WIDTH="319" HEIGHT="38" BORDER="0"
SRC="img71.png"
ALT="\begin{displaymath}N_r = \left\{s \in W: \vert a_{rs}\vert &gt; \theta \sqrt{\vert a_{rr}a_{ss}\vert} \right\}
\cup \left\{ r \right\} ,
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
for a given <!-- MATH
$\theta \in [0,1]$
-->
<IMG
WIDTH="69" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
SRC="img72.png"
ALT="$\theta \in [0,1]$">.
Since this algorithm has a sequential nature, a <I>decoupled</I> version of
it has been chosen, where each processor <IMG
WIDTH="10" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img73.png"
ALT="$i$"> independently applies the algorithm to
the set of vertices <IMG
WIDTH="31" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img74.png"
ALT="$W_i^0$"> assigned to it in the initial data distribution. This
version is embarrassingly parallel, since it does not require any data communication.
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 <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$">.
Nevertheless, this algorithm has been chosen for the implementation in MLD2P4,
since it has been shown to produce good results in practice
[<A
HREF="node25.html#aaecc_07">3</A>,<A
HREF="node25.html#apnum_07">4</A>,<A
HREF="node25.html#TUMINARO_TONG">23</A>].
<P>
</TD></TR>
</TABLE>
</DIV><P></P>
The prolongator <IMG
WIDTH="75" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img75.png"
ALT="$P_C=R_C^T$"> is built starting from a <I>tentative prolongator</I>
<!-- MATH
$P \in \Re^{n \times n_C}$
-->
<IMG
WIDTH="90" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
SRC="img76.png"
ALT="$P \in \Re^{n \times n_C}$">, defined as
<BR>
<DIV ALIGN="RIGHT">
<!-- MATH
\begin{equation}
P=(p_{ij}), \quad p_{ij}=
\left\{ \begin{array}{ll}
1 & \quad \mbox{if} \; i \in V^j_C \\
0 & \quad \mbox{otherwise}
\end{array} \right. .
\end{equation}
-->
<TABLE WIDTH="100%" ALIGN="CENTER">
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:tent_prol"></A><IMG
WIDTH="290" HEIGHT="52" BORDER="0"
SRC="img77.png"
ALT="\begin{displaymath}
P=(p_{ij}), \quad p_{ij}=
\left\{ \begin{array}{ll}
1 &amp; \qu...
...\in V^j_C \\
0 &amp; \quad \mbox{otherwise}
\end{array} \right. .
\end{displaymath}"></TD>
<TD WIDTH=10 ALIGN="RIGHT">
(2)</TD></TR>
</TABLE>
<BR CLEAR="ALL"></DIV><P></P>
<IMG
WIDTH="27" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img78.png"
ALT="$P_C$"> is obtained by
applying to <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img79.png"
ALT="$P$"> a smoother <!-- MATH
$S \in \Re^{n \times n}$
-->
<IMG
WIDTH="78" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
SRC="img80.png"
ALT="$S \in \Re^{n \times n}$">:
<BR>
<DIV ALIGN="RIGHT">
<!-- MATH
\begin{equation}
P_C = S P,
\end{equation}
-->
<TABLE WIDTH="100%" ALIGN="CENTER">
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:smoothed_prol"></A><IMG
WIDTH="73" HEIGHT="30" BORDER="0"
SRC="img81.png"
ALT="\begin{displaymath}
P_C = S P,
\end{displaymath}"></TD>
<TD WIDTH=10 ALIGN="RIGHT">
(3)</TD></TR>
</TABLE>
<BR CLEAR="ALL"></DIV><P></P>
in order to remove oscillatory components from the range of the prolongator
and hence to improve the convergence properties of the multi-level
Schwarz method [<A
HREF="node25.html#BREZINA_VANEK">1</A>,<A
HREF="node25.html#StubenGMD69_99">22</A>].
A simple choice for <IMG
WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img82.png"
ALT="$S$"> is the damped Jacobi smoother:
<BR>
<DIV ALIGN="RIGHT">
<!-- MATH
\begin{equation}
S = I - \omega D^{-1} A ,
\end{equation}
-->
<TABLE WIDTH="100%" ALIGN="CENTER">
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:jac_smoother"></A><IMG
WIDTH="126" HEIGHT="30" BORDER="0"
SRC="img83.png"
ALT="\begin{displaymath}
S = I - \omega D^{-1} A ,
\end{displaymath}"></TD>
<TD WIDTH=10 ALIGN="RIGHT">
(4)</TD></TR>
</TABLE>
<BR CLEAR="ALL"></DIV><P></P>
where the value of <IMG
WIDTH="16" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
SRC="img84.png"
ALT="$\omega$"> can be chosen
using some estimate of the spectral radius of <IMG
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img85.png"
ALT="$D^{-1}A$"> [<A
HREF="node25.html#BREZINA_VANEK">1</A>].
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html218"
HREF="node14.html">Examples</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html216"
<A NAME="tex2html219"
HREF="node14.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html212"
HREF="userhtml.html">
<A NAME="tex2html215"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html206"
<A NAME="tex2html211"
HREF="node12.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html214"
<A NAME="tex2html217"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html217"
HREF="node14.html">Examples</A>
<B> Up:</B> <A NAME="tex2html213"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html207"
HREF="node12.html">Smoothed Aggregation</A>
&nbsp; <B> <A NAME="tex2html215"
<B> Next:</B> <A NAME="tex2html220"
HREF="node14.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html216"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html212"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
&nbsp; <B> <A NAME="tex2html218"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->