mld2p4-2:

Docs updates.
stopcriterion
Salvatore Filippone 8 years ago
parent f47513eb80
commit 05ab5f4d55

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 B

After

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 B

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 B

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 583 B

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 B

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 B

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 B

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

After

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 B

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 B

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 B

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 B

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 B

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 B

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 B

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 B

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 B

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 B

After

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 559 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 238 B

@ -23,18 +23,18 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html24"
<A NAME="tex2html23"
HREF="node1.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_g.png">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png">
<A NAME="tex2html22"
<A NAME="tex2html21"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html25"
<B> Next:</B> <A NAME="tex2html24"
HREF="node1.html">Abstract</A>
&nbsp; <B> <A NAME="tex2html23"
&nbsp; <B> <A NAME="tex2html22"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -77,76 +77,74 @@ Feb. 28, 2017
<A NAME="CHILD_LINKS"></A>
<UL>
<LI><A NAME="tex2html26"
<LI><A NAME="tex2html25"
HREF="node1.html">Abstract</A>
<LI><A NAME="tex2html27"
<LI><A NAME="tex2html26"
HREF="node2.html">Contents</A>
<LI><A NAME="tex2html28"
<LI><A NAME="tex2html27"
HREF="node3.html">General Overview</A>
<LI><A NAME="tex2html29"
<LI><A NAME="tex2html28"
HREF="node4.html">Code Distribution</A>
<LI><A NAME="tex2html30"
<LI><A NAME="tex2html29"
HREF="node5.html">Configuring and Building MLD2P4</A>
<UL>
<LI><A NAME="tex2html31"
<LI><A NAME="tex2html30"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html32"
<LI><A NAME="tex2html31"
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html33"
<LI><A NAME="tex2html32"
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html34"
<LI><A NAME="tex2html33"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html35"
<LI><A NAME="tex2html34"
HREF="node10.html">Example and test programs</A>
</UL>
<BR>
<LI><A NAME="tex2html36"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<LI><A NAME="tex2html35"
HREF="node11.html">Multigrid Background</A>
<UL>
<LI><A NAME="tex2html36"
HREF="node12.html">AMG preconditioners</A>
</UL>
<BR>
<LI><A NAME="tex2html37"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
HREF="node13.html">Getting Started</A>
<UL>
<LI><A NAME="tex2html38"
HREF="node13.html">Smoothed Aggregation</A>
HREF="node14.html">Examples</A>
</UL>
<BR>
<LI><A NAME="tex2html39"
HREF="node14.html">Getting Started</A>
HREF="node15.html">User Interface</A>
<UL>
<LI><A NAME="tex2html40"
HREF="node15.html">Examples</A>
</UL>
<BR>
HREF="node16.html">Subroutine init</A>
<LI><A NAME="tex2html41"
HREF="node16.html">User Interface</A>
<UL>
HREF="node17.html">Subroutine set</A>
<LI><A NAME="tex2html42"
HREF="node17.html">Subroutine init</A>
HREF="node18.html">Subroutine build</A>
<LI><A NAME="tex2html43"
HREF="node18.html">Subroutine set</A>
HREF="node19.html">Subroutine hierarchy_build</A>
<LI><A NAME="tex2html44"
HREF="node19.html">Subroutine bld</A>
HREF="node20.html">Subroutine smoothers_build</A>
<LI><A NAME="tex2html45"
HREF="node20.html">Subroutine hierarchy_bld</A>
HREF="node21.html">Subroutine apply</A>
<LI><A NAME="tex2html46"
HREF="node21.html">Subroutine smoothers_bld</A>
HREF="node22.html">Subroutine free</A>
<LI><A NAME="tex2html47"
HREF="node22.html">Subroutine apply</A>
<LI><A NAME="tex2html48"
HREF="node23.html">Subroutine free</A>
<LI><A NAME="tex2html49"
HREF="node24.html">Subroutine descr</A>
HREF="node23.html">Subroutine descr</A>
</UL>
<BR>
<LI><A NAME="tex2html48"
HREF="node24.html">Adding smoothers and solvers to MLD2P4</A>
<LI><A NAME="tex2html49"
HREF="node25.html">Error Handling</A>
<LI><A NAME="tex2html50"
HREF="node25.html">Adding smoothers and solvers to MLD2P4</A>
HREF="node26.html">License</A>
<LI><A NAME="tex2html51"
HREF="node26.html">Error Handling</A>
HREF="node27.html">Bibliography</A>
<LI><A NAME="tex2html52"
HREF="node27.html">License</A>
<LI><A NAME="tex2html53"
HREF="node28.html">Bibliography</A>
<LI><A NAME="tex2html54"
HREF="node29.html">About this document ...</A>
HREF="node28.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html65"
<A NAME="tex2html63"
HREF="node2.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html61"
<A NAME="tex2html59"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html55"
<A NAME="tex2html53"
HREF="userhtml.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html63"
<A NAME="tex2html61"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html66"
<B> Next:</B> <A NAME="tex2html64"
HREF="node2.html">Contents</A>
<B> Up:</B> <A NAME="tex2html62"
<B> Up:</B> <A NAME="tex2html60"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html56"
<B> Previous:</B> <A NAME="tex2html54"
HREF="userhtml.html">userhtml</A>
&nbsp; <B> <A NAME="tex2html64"
&nbsp; <B> <A NAME="tex2html62"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -55,24 +55,22 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Abstract</A>
</H1>
MLD2P4 (M<SMALL>ULTI-</SMALL>L<SMALL>EVEL </SMALL>D<SMALL>OMAIN </SMALL>D<SMALL>ECOMPOSITION </SMALL>P<SMALL>ARALLEL </SMALL>P<SMALL>RECONDITIONERS </SMALL>P<SMALL>ACKAGE BASED ON
</SMALL>PSBLAS) is a package of parallel algebraic multi-level preconditioners.
The first release made available various versions of
one-level additive and multi-level additive
and hybrid Schwarz preconditioners.
The package has been extended to include further multi-level cycles and smoothers widely used in
multigrid methods.
In the multi-level case, a purely algebraic approach
is applied to generate coarse-level corrections, so that no geometric background is needed
concerning the matrix to be preconditioned. The matrix is assumed to be square, real
or complex.
MLD2P4 (M<SMALL>ULTI-</SMALL>L<SMALL>EVEL </SMALL>D<SMALL>OMAIN </SMALL>D<SMALL>ECOMPOSITION </SMALL>P<SMALL>ARALLEL </SMALL>P<SMALL>RECONDITIONERS </SMALL>P<SMALL>ACKAGE
BASED ON </SMALL>PSBLAS) is a package of parallel algebraic multi-level preconditioners.
The first release of MLD2P4 made available multi-level additive and hybrid Schwarz
preconditioners, as well as one-level additive Schwarz preconditioners. The package
has been extended to include further multi-level cycles and smoothers widely used in
multigrid methods. In the multi-level case, a purely algebraic approach is applied to
generate coarse-level corrections, so that no geometric background is needed
concerning the matrix to be preconditioned. The matrix is assumed to be square,
real or complex.
<P>
MLD2P4 has been designed to provide scalable and easy-to-use preconditioners in the
context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)
MLD2P4 has been designed to provide scalable and easy-to-use preconditioners
in the context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)
computational framework and can be used in conjuction with the Krylov solvers
available in this framework. MLD2P4 enables the user to easily specify different features
of an algebraic multi-level preconditioner, thus allowing to search
available in this framework. MLD2P4 enables the user to easily specify different
features of an algebraic multi-level preconditioner, thus allowing to search
for the ``best'' preconditioner for the problem at hand.
<P>
@ -92,26 +90,26 @@ the user interface of MLD2P4.
<HR>
<!--Navigation Panel-->
<A NAME="tex2html65"
<A NAME="tex2html63"
HREF="node2.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html61"
<A NAME="tex2html59"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html55"
<A NAME="tex2html53"
HREF="userhtml.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html63"
<A NAME="tex2html61"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html66"
<B> Next:</B> <A NAME="tex2html64"
HREF="node2.html">Contents</A>
<B> Up:</B> <A NAME="tex2html62"
<B> Up:</B> <A NAME="tex2html60"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html56"
<B> Previous:</B> <A NAME="tex2html54"
HREF="userhtml.html">userhtml</A>
&nbsp; <B> <A NAME="tex2html64"
&nbsp; <B> <A NAME="tex2html62"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -25,26 +25,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html200"
<A NAME="tex2html197"
HREF="node11.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html196"
<A NAME="tex2html193"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html192"
<A NAME="tex2html189"
HREF="node9.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html198"
<A NAME="tex2html195"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html201"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Up:</B> <A NAME="tex2html197"
<B> Next:</B> <A NAME="tex2html198"
HREF="node11.html">Multigrid Background</A>
<B> Up:</B> <A NAME="tex2html194"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html193"
<B> Previous:</B> <A NAME="tex2html190"
HREF="node9.html">Bug reporting</A>
&nbsp; <B> <A NAME="tex2html199"
&nbsp; <B> <A NAME="tex2html196"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -62,19 +62,20 @@ both of them are further divided into <code>fileread</code> and
<DD>contains a set of simple example programs with a
predefined choice of preconditioners, selectable via integer
values. These are intended to get an acquaintance with the
multilevel preconditioners.
multi-level preconditioners available in MLD2P4.
</DD>
<DT><STRONG><TT>tests</TT></STRONG></DT>
<DD>contains a set of more sophisticated examples that
will allow the user, via the input files in the <code>runs</code>
subdirectories, to experiment with the full range of preconditioners
implemented in the library.
implemented in the package.
</DD>
</DL>
The <code>fileread</code> directories contain sample programs that read
sparse matrices from files, according to the Matrix Market or the
Harwell-Boeing storage format; the <code>pdegen</code> instead generate
matrices in full parallel mode from the discretization of a sample PDE.
Harwell-Boeing storage format; the <code>pdegen</code> programs generate
matrices in full parallel mode from the discretization of a sample partial
differential equation.
<BR><HR>
</BODY>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Multi-level Domain Decomposition Background</TITLE>
<META NAME="description" CONTENT="Multi-level Domain Decomposition Background">
<TITLE>Multigrid Background</TITLE>
<META NAME="description" CONTENT="Multigrid Background">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,7 +18,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node14.html">
<LINK REL="next" HREF="node13.html">
<LINK REL="previous" HREF="node5.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node12.html">
@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html212"
<A NAME="tex2html209"
HREF="node12.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html208"
<A NAME="tex2html205"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html202"
<A NAME="tex2html199"
HREF="node10.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html210"
<A NAME="tex2html207"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html213"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<B> Up:</B> <A NAME="tex2html209"
<B> Next:</B> <A NAME="tex2html210"
HREF="node12.html">AMG preconditioners</A>
<B> Up:</B> <A NAME="tex2html206"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html203"
<B> Previous:</B> <A NAME="tex2html200"
HREF="node10.html">Example and test programs</A>
&nbsp; <B> <A NAME="tex2html211"
&nbsp; <B> <A NAME="tex2html208"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -53,126 +53,48 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<H1><A NAME="SECTION00060000000000000000"></A><A NAME="sec:background"></A>
<BR>
Multi-level Domain Decomposition Background
</H1>
<P>
<I>Domain Decomposition</I> (DD) preconditioners, coupled with Krylov iterative
solvers, are widely used in the parallel solution of large and sparse linear systems.
These preconditioners are based on the divide and conquer technique: the matrix
to be preconditioned is divided into submatrices, a ``local'' linear system
involving each submatrix is (approximately) solved, and the local solutions are used
to build a preconditioner for the whole original matrix. This process
often corresponds to dividing a physical domain associated to the original matrix
into subdomains, e.g. in a PDE discretization, to (approximately) solving the
subproblems corresponding to the subdomains and to building an approximate
solution of the original problem from the local solutions
[<A
HREF="node28.html#Cai_Widlund_92">6</A>,<A
HREF="node28.html#dd1_94">7</A>,<A
HREF="node28.html#dd2_96">23</A>].
<P>
<I>Additive Schwarz</I> preconditioners are DD preconditioners using overlapping
submatrices, i.e. with some common rows, to couple the local information
related to the submatrices (see, e.g., [<A
HREF="node28.html#dd2_96">23</A>]).
The main motivation for choosing Additive Schwarz preconditioners is their
intrinsic parallelism. A drawback of these
preconditioners is that the number of iterations of the preconditioned solvers
generally grows with the number of submatrices. This may be a serious limitation
on parallel computers, since the number of submatrices usually matches the number
of available processors. Optimal convergence rates, i.e. iteration numbers
independent of the number of submatrices, can be obtained by correcting the
preconditioner through a suitable approximation of the original linear system
in a coarse space, which globally couples the information related to the single
submatrices.
<P>
<I>Two-level Schwarz</I> preconditioners are obtained
by combining basic (one-level) Schwarz preconditioners with a coarse-level
correction. In this context, the one-level preconditioner is often
called `smoother'. Different two-level preconditioners are obtained by varying the
choice of the smoother and of the coarse-level correction, and the
way they are combined [<A
HREF="node28.html#dd2_96">23</A>]. The same reasoning can be applied starting
from the coarse-level system, i.e. a coarse-space correction can be built
from this system, thus obtaining <I>multi-level</I> preconditioners.
<P>
It is worth noting that optimal preconditioners do not necessarily correspond
to minimum execution times. Indeed, to obtain effective multi-level preconditioners
a tradeoff between optimality of convergence and the cost of building and applying
the coarse-space corrections must be achieved. The choice of the number of levels,
i.e. of the coarse-space corrections, also affects the effectiveness of the
preconditioners. One more goal is to get convergence rates as less sensitive
as possible to variations in the matrix coefficients.
<P>
Two main approaches can be used to build coarse-space corrections. The geometric approach
applies coarsening strategies based on the knowledge of some physical grid associated
to the matrix and requires the user to define grid transfer operators from the fine
to the coarse levels and vice versa. This may result difficult for complex geometries;
furthermore, suitable one-level preconditioners may be required to get efficient
interplay between fine and coarse levels, e.g. when matrices with highly varying coefficients
are considered. The algebraic approach builds coarse-space corrections using only matrix
information. It performs a fully automatic coarsening and enforces the interplay between
the fine and coarse levels by suitably choosing the coarse space and the coarse-to-fine
interpolation [<A
HREF="node28.html#Stuben_01">25</A>].
<P>
MLD2P4 uses a pure algebraic approach for building the sequence of coarse matrices
starting from the original matrix. The algebraic approach is based on the <I>smoothed
aggregation</I> algorithm [<A
HREF="node28.html#BREZINA_VANEK">1</A>,<A
HREF="node28.html#VANEK_MANDEL_BREZINA">27</A>]. A decoupled version
of this algorithm is implemented, where the smoothed aggregation is applied locally
to each submatrix [<A
HREF="node28.html#TUMINARO_TONG">26</A>]. In the next two subsections we provide
a brief description of the multi-level Schwarz preconditioners and of the smoothed
aggregation technique as implemented in MLD2P4. For further details the reader
is referred to [<A
HREF="node28.html#para_04">2</A>,<A
HREF="node28.html#aaecc_07">3</A>,<A
HREF="node28.html#apnum_07">4</A>,<A
HREF="node28.html#MLD2P4_TOMS">8</A>,<A
HREF="node28.html#dd2_96">23</A>].
<P>
<BR><HR>
Multigrid Background
</H1> Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the parallel solution of large and sparse linear systems, because of their optimality in the solution of linear systems arising from the discretization of scalar elliptic Partial Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic scalability, is the property of having a computational cost per iteration that depends linearly on the problem size, and a convergence rate that is independent of the problem size. Multigrid preconditioners are based on a recursive application of a two-grid process consisting of smoother iterations and a coarse-space (or coarse-level) correction. The smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel ones, or more complex subspace-correction methods, such as the Schwarz ones. The coarse-space correction consists of solving, in an appropriately chosen coarse space, the residual equation associated with the approximate solution computed by the smoother, and of using the solution of this equation to correct the previous approximation. The transfer of information between the original (fine) space and the coarse one is performed by using suitable restriction and prolongation operators. The construction of the coarse space and the corresponding transfer operators is carried out by applying a so-called coarsening algorithm to the system matrix. Two main approaches can be used to perform coarsening: the geometric approach, which exploits the knowledge of some physical grid associated with the matrix and requires the user to define transfer operators from the fine to the coarse level and vice versa, and the algebraic approach, which builds the coarse-space correction and the associate transfer operators using only matrix information. The first approach may be difficult when the system comes from discretizations on complex geometries; furthermore, ad hoc one-level smoothers may be required to get an efficient interplay between fine and coarse levels, e.g., when matrices with highly varying coefficients are considered. The second approach performs a fully automatic coarsening and enforces the interplay between fine and coarse level by suitably choosing the coarse space and the coarse-to-fine interpolation (see, e.g., [<A
HREF="node27.html#Briggs2000">2</A>,<A
HREF="node27.html#Stuben_01">27</A>,<A
HREF="node27.html#dd2_96">25</A>] for details.) MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation algorithm [<A
HREF="node27.html#BREZINA_VANEK">1</A>,<A
HREF="node27.html#VANEK_MANDEL_BREZINA">29</A>], for building the sequence of coarse matrices and transfer operators, starting from the original one. A decoupled version of this algorithm is implemented, where the smoothed aggregation is applied locally to each submatrix [<A
HREF="node27.html#TUMINARO_TONG">28</A>]. A brief description of the AMG preconditioners implemented in MLD2P4 is given in Sections&nbsp;<A HREF="node12.html#sec:multilevel">4.1</A>-<A HREF="#sec:smoothers">4.3</A>. For further details the reader is referred to [<A
HREF="node27.html#para_04">3</A>,<A
HREF="node27.html#aaecc_07">4</A>,<A
HREF="node27.html#apnum_07">5</A>,<A
HREF="node27.html#MLD2P4_TOMS">9</A>]. We note that optimal multigrid preconditioners do not necessarily correspond to minimum execution times in a parallel setting. Indeed, to obtain effective parallel multigrid preconditioners, a tradeoff between the optimality and the cost of building and applying the smoothers and the coarse-space corrections must be achieved. Effective parallel preconditioners require algorithmic scalability to be coupled with implementation scalability, i.e., a computational cost per iteration which remains (almost) constant as the number of parallel processors increases. <BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html214"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html215"
HREF="node13.html">Smoothed Aggregation</A>
<LI><A NAME="tex2html211"
HREF="node12.html">AMG preconditioners</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html212"
<A NAME="tex2html209"
HREF="node12.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html208"
<A NAME="tex2html205"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html202"
<A NAME="tex2html199"
HREF="node10.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html210"
<A NAME="tex2html207"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html213"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<B> Up:</B> <A NAME="tex2html209"
<B> Next:</B> <A NAME="tex2html210"
HREF="node12.html">AMG preconditioners</A>
<B> Up:</B> <A NAME="tex2html206"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html203"
<B> Previous:</B> <A NAME="tex2html200"
HREF="node10.html">Example and test programs</A>
&nbsp; <B> <A NAME="tex2html211"
&nbsp; <B> <A NAME="tex2html208"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Multi-level Schwarz Preconditioners</TITLE>
<META NAME="description" CONTENT="Multi-level Schwarz Preconditioners">
<TITLE>AMG preconditioners</TITLE>
<META NAME="description" CONTENT="AMG preconditioners">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,7 +18,6 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node13.html">
<LINK REL="previous" HREF="node11.html">
<LINK REL="up" HREF="node11.html">
<LINK REL="next" HREF="node13.html">
@ -26,26 +25,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html226"
<A NAME="tex2html220"
HREF="node13.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html222"
<A NAME="tex2html216"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html216"
<A NAME="tex2html212"
HREF="node11.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html224"
<A NAME="tex2html218"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html227"
HREF="node13.html">Smoothed Aggregation</A>
<B> Up:</B> <A NAME="tex2html223"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html217"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
&nbsp; <B> <A NAME="tex2html225"
<B> Next:</B> <A NAME="tex2html221"
HREF="node13.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html217"
HREF="node11.html">Multigrid Background</A>
<B> Previous:</B> <A NAME="tex2html213"
HREF="node11.html">Multigrid Background</A>
&nbsp; <B> <A NAME="tex2html219"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -53,713 +52,105 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<H2><A NAME="SECTION00061000000000000000"></A><A NAME="sec:multilevel"></A>
<BR>
Multi-level Schwarz Preconditioners
</H2>
AMG preconditioners
</H2> In order to describe the AMG preconditioners available in MLD2P4, we consider a linear system <BR>
<DIV ALIGN="RIGHT">
<P>
The Multilevel preconditioners implemented in MLD2P4 are obtained by combining
AS preconditioners with coarse-space corrections; therefore
we first provide a sketch of the AS preconditioners.
<P>
Given the linear system ,
<!-- MATH
\begin{equation}
Ax=b,
\end{equation}
-->
<TABLE WIDTH="100%" ALIGN="CENTER">
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:system"></A><IMG
WIDTH="58" HEIGHT="30" BORDER="0"
SRC="img1.png"
ALT="\begin{displaymath}
Ax=b,
\end{displaymath}"></TD>
<TD WIDTH=10 ALIGN="RIGHT">
(2)</TD></TR>
</TABLE>
<BR CLEAR="ALL"></DIV><P></P>
where <!-- MATH
$A=(a_{ij}) \in \Re^{n \times n}$
$A=(a_{ij}) \in \mathbb{R}^{n \times n}$
-->
<IMG
WIDTH="137" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
SRC="img4.png"
ALT="$A=(a_{ij}) \in \Re^{n \times n}$"> is a
nonsingular sparse matrix with a symmetric nonzero pattern,
let <IMG
WIDTH="92" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
SRC="img5.png"
ALT="$G=(W,E)$"> be the adjacency graph of <IMG
ALT="$A=(a_{ij}) \in \mathbb{R}^{n \times n}$"> is a nonsingular sparse matrix; for ease of presentation we assume <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$">, where <!-- MATH
$W=\{1, 2, \ldots, n\}$
-->
<IMG
WIDTH="139" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
SRC="img6.png"
ALT="$W=\{1, 2, \ldots, n\}$">
and <!-- MATH
$E=\{(i,j) : a_{ij} \neq 0\}$
-->
<IMG
WIDTH="162" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
SRC="img7.png"
ALT="$E=\{(i,j) : a_{ij} \neq 0\}$"> are the vertex set and the edge set of <IMG
WIDTH="18" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img8.png"
ALT="$G$">,
respectively. Two vertices are called adjacent if there is an edge connecting
them. For any integer <IMG
WIDTH="45" HEIGHT="34" ALIGN="MIDDLE" BORDER="0"
SRC="img9.png"
ALT="$\delta &gt; 0$">, a <IMG
WIDTH="13" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img10.png"
ALT="$\delta$">-overlap
partition of <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$W$"> can be defined recursively as follows.
Given a 0-overlap (or non-overlapping) partition of <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$W$">,
i.e. a set of <IMG
WIDTH="20" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img12.png"
ALT="$m$"> disjoint nonempty sets <!-- MATH
$W_i^0 \subset W$
-->
<IMG
WIDTH="73" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img13.png"
ALT="$W_i^0 \subset W$"> such that
<!-- MATH
$\cup_{i=1}^m W_i^0 = W$
-->
<IMG
WIDTH="108" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img14.png"
ALT="$\cup_{i=1}^m W_i^0 = W$">, a <IMG
WIDTH="13" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img10.png"
ALT="$\delta$">-overlap
partition of <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$W$"> is obtained by considering the sets
<!-- MATH
$W_i^\delta \supset W_i^{\delta-1}$
-->
<IMG
WIDTH="97" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img15.png"
ALT="$W_i^\delta \supset W_i^{\delta-1}$"> obtained by including the vertices that
are adjacent to any vertex in <!-- MATH
$W_i^{\delta-1}$
-->
<IMG
WIDTH="48" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img16.png"
ALT="$W_i^{\delta-1}$">.
<P>
Let <IMG
WIDTH="22" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img17.png"
ALT="$n_i^\delta$"> be the size of <IMG
WIDTH="31" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img18.png"
ALT="$W_i^\delta$"> and <!-- MATH
$R_i^{\delta} \in
\Re^{n_i^\delta \times n}$
-->
<IMG
WIDTH="93" HEIGHT="45" ALIGN="MIDDLE" BORDER="0"
SRC="img19.png"
ALT="$R_i^{\delta} \in
\Re^{n_i^\delta \times n}$"> the restriction operator that maps
a vector <IMG
WIDTH="57" HEIGHT="34" ALIGN="MIDDLE" BORDER="0"
SRC="img20.png"
ALT="$v \in \Re^n$"> onto the vector <!-- MATH
$v_i^{\delta} \in \Re^{n_i^\delta}$
-->
<IMG
WIDTH="70" HEIGHT="45" ALIGN="MIDDLE" BORDER="0"
SRC="img21.png"
ALT="$v_i^{\delta} \in \Re^{n_i^\delta}$">
containing the components of <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"> corresponding to the vertices in
<IMG
WIDTH="31" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img18.png"
ALT="$W_i^\delta$">. The transpose of <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img23.png"
ALT="$R_i^{\delta}$"> is a
prolongation operator from <!-- MATH
$\Re^{n_i^\delta}$
-->
<IMG
WIDTH="33" HEIGHT="24" ALIGN="BOTTOM" BORDER="0"
SRC="img24.png"
ALT="$\Re^{n_i^\delta}$"> to <IMG
WIDTH="26" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img25.png"
ALT="$\Re^n$">.
The matrix <!-- MATH
$A_i^\delta=R_i^\delta A (R_i^\delta)^T \in
\Re^{n_i^\delta \times n_i^\delta}$
-->
<IMG
WIDTH="201" HEIGHT="45" ALIGN="MIDDLE" BORDER="0"
SRC="img26.png"
ALT="$A_i^\delta=R_i^\delta A (R_i^\delta)^T \in
\Re^{n_i^\delta \times n_i^\delta}$"> can be considered
as a restriction of <IMG
ALT="$A$"> is real, but the results are valid for the complex case as well. Let us assume as finest index space the set of row (column) indices of <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$"> corresponding to the set <IMG
WIDTH="30" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img27.png"
ALT="$W_i^{\delta}$">.
<P>
The <I>classical one-level AS</I> preconditioner is defined by
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{AS}^{-1}= \sum_{i=1}^m (R_i^{\delta})^T
(A_i^\delta)^{-1} R_i^{\delta},
\end{displaymath}
-->
<IMG
WIDTH="207" HEIGHT="58" BORDER="0"
SRC="img28.png"
ALT="\begin{displaymath}
M_{AS}^{-1}= \sum_{i=1}^m (R_i^{\delta})^T
(A_i^\delta)^{-1} R_i^{\delta},
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
where <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img29.png"
ALT="$A_i^\delta$"> is assumed to be nonsingular. Its application
to a vector <IMG
WIDTH="57" HEIGHT="34" ALIGN="MIDDLE" BORDER="0"
SRC="img20.png"
ALT="$v \in \Re^n$"> within a Krylov solver requires the following
three steps:
<OL>
<LI>restriction of <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"> as <!-- MATH
$v_i = R_i^{\delta} v$
-->
<IMG
WIDTH="71" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img30.png"
ALT="$v_i = R_i^{\delta} v$">, <IMG
WIDTH="96" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
SRC="img31.png"
ALT="$i=1,\ldots,m$">;
</LI>
<LI>solution of the linear systems <!-- MATH
$A_i^\delta w_i = v_i$
-->
<IMG
WIDTH="80" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img32.png"
ALT="$A_i^\delta w_i = v_i$">,
<IMG
WIDTH="96" HEIGHT="33" ALIGN="MIDDLE" BORDER="0"
SRC="img31.png"
ALT="$i=1,\ldots,m$">;
</LI>
<LI>prolongation and sum of the <IMG
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img33.png"
ALT="$w_i$">'s, i.e. <!-- MATH
$w = \sum_{i=1}^m (R_i^{\delta})^T w_i$
-->
<IMG
WIDTH="145" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img34.png"
ALT="$w = \sum_{i=1}^m (R_i^{\delta})^T w_i$">.
</LI>
</OL>
Note that the linear systems at step 2 are usually solved approximately,
e.g. using incomplete LU factorizations such as ILU(<IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img35.png"
ALT="$p$">), MILU(<IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img35.png"
ALT="$p$">) and
ILU(<IMG
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img36.png"
ALT="$p,t$">) [<A
HREF="node28.html#Saad_book">22</A>, Chapter 10].
<P>
A variant of the classical AS preconditioner that outperforms it
in terms of convergence rate and of computation and communication
time on parallel distributed-memory computers is the so-called <I>Restricted AS
(RAS)</I> preconditioner&nbsp;[<A
HREF="node28.html#CAI_SARKIS">5</A>,<A
HREF="node28.html#EFSTATHIOU">15</A>]. It
is obtained by zeroing the components of <IMG
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img33.png"
ALT="$w_i$"> corresponding to the
overlapping vertices when applying the prolongation. Therefore,
RAS differs from classical AS by the prolongation operators,
which are substituted by <!-- MATH
$(\tilde{R}_i^0)^T \in \Re^{n_i^\delta \times n}$
-->
<IMG
WIDTH="117" HEIGHT="45" ALIGN="MIDDLE" BORDER="0"
SRC="img37.png"
ALT="$(\tilde{R}_i^0)^T \in \Re^{n_i^\delta \times n}$">,
where <IMG
WIDTH="26" HEIGHT="42" ALIGN="MIDDLE" BORDER="0"
SRC="img38.png"
ALT="$\tilde{R}_i^0$"> is obtained by zeroing the rows of <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img39.png"
ALT="$R_i^\delta$">
corresponding to the vertices in <!-- MATH
$W_i^\delta \backslash W_i^0$
ALT="$A$">, i.e., <!-- MATH
$\Omega = \{1, 2, \ldots, n\}$
-->
<IMG
WIDTH="66" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img40.png"
ALT="$W_i^\delta \backslash W_i^0$">:
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{RAS}^{-1}= \sum_{i=1}^m (\tilde{R}_i^0)^T
(A_i^\delta)^{-1} R_i^{\delta}.
\end{displaymath}
-->
<IMG
WIDTH="217" HEIGHT="58" BORDER="0"
SRC="img41.png"
ALT="\begin{displaymath}
M_{RAS}^{-1}= \sum_{i=1}^m (\tilde{R}_i^0)^T
(A_i^\delta)^{-1} R_i^{\delta}.
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
Analogously, the AS variant called <I>AS with Harmonic extension (ASH)</I>
is defined by
<BR><P></P>
WIDTH="132" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
SRC="img5.png"
ALT="$\Omega = \{1, 2, \ldots, n\}$">. Any algebraic multilevel preconditioners implemented in MLD2P4 generates a hierarchy of index spaces and a corresponding hierarchy of matrices, <BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{ASH}^{-1}= \sum_{i=1}^m (R_i^{\delta})^T
(A_i^\delta)^{-1} \tilde{R}_i^0.
\Omega^1 \equiv \Omega \supset \Omega^2 \supset \ldots \supset \Omega^{nlev}, \quad A^1 \equiv A, A^2, \ldots, A^{nlev},
\end{displaymath}
-->
<IMG
WIDTH="219" HEIGHT="58" BORDER="0"
SRC="img42.png"
ALT="\begin{displaymath}M_{ASH}^{-1}= \sum_{i=1}^m (R_i^{\delta})^T
(A_i^\delta)^{-1} \tilde{R}_i^0.
\end{displaymath}">
WIDTH="398" HEIGHT="30" BORDER="0"
SRC="img6.png"
ALT="\begin{displaymath}\Omega^1 \equiv \Omega \supset \Omega^2 \supset \ldots \supset \Omega^{nlev}, \quad A^1 \equiv A, A^2, \ldots, A^{nlev}, \end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
We note that for <IMG
WIDTH="45" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img43.png"
ALT="$\delta=0$"> the three variants of the AS preconditioner are
all equal to the block-Jacobi preconditioner.
<P>
As already observed, the convergence rate of the one-level Schwarz
preconditioned iterative solvers deteriorates as the number <IMG
WIDTH="20" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img12.png"
ALT="$m$"> of partitions
of <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$W$"> increases [<A
HREF="node28.html#dd1_94">7</A>,<A
HREF="node28.html#dd2_96">23</A>]. To reduce the dependency
of the number of iterations on the degree of parallelism we may
introduce a global coupling among the overlapping partitions by defining
a coarse-space approximation <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$"> of the matrix <IMG
by using the information contained in <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$">.
In a pure algebraic setting, <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$"> is usually built with
the Galerkin approach. Given a set <IMG
WIDTH="32" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img45.png"
ALT="$W_C$"> of <I>coarse vertices</I>,
with size <IMG
WIDTH="26" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img46.png"
ALT="$n_C$">, and a suitable restriction operator
<!-- MATH
$R_C \in \Re^{n_C \times n}$
-->
<IMG
WIDTH="100" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
SRC="img47.png"
ALT="$R_C \in \Re^{n_C \times n}$">, <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$"> is defined as
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
A_C=R_C A R_C^T
\end{displaymath}
-->
<IMG
WIDTH="109" HEIGHT="31" BORDER="0"
SRC="img48.png"
ALT="\begin{displaymath}
A_C=R_C A R_C^T
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
and the coarse-level correction matrix to be combined with a generic
one-level AS preconditioner <IMG
WIDTH="38" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img49.png"
ALT="$M_{1L}$"> is obtained as
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{C}^{-1}= R_C^T A_C^{-1} R_C,
\end{displaymath}
-->
<IMG
WIDTH="145" HEIGHT="32" BORDER="0"
SRC="img50.png"
ALT="\begin{displaymath}
M_{C}^{-1}= R_C^T A_C^{-1} R_C,
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
where <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$"> is assumed to be nonsingular. The application of <IMG
WIDTH="41" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img51.png"
ALT="$M_{C}^{-1}$">
to a vector <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"> corresponds to a restriction, a solution and
a prolongation step; the solution step, involving the matrix <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$">,
may be carried out also approximately.
<P>
The combination of <IMG
WIDTH="33" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img52.png"
ALT="$M_{C}$"> and <IMG
WIDTH="38" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img49.png"
ALT="$M_{1L}$"> may be
performed in either an additive or a multiplicative framework.
In the former case, the <I>two-level additive</I> Schwarz preconditioner
is obtained:
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{2LA}^{-1} = M_{C}^{-1} + M_{1L}^{-1}.
\end{displaymath}
-->
<IMG
WIDTH="166" HEIGHT="32" BORDER="0"
SRC="img53.png"
ALT="\begin{displaymath}
M_{2LA}^{-1} = M_{C}^{-1} + M_{1L}^{-1}.
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
Applying <IMG
WIDTH="59" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img54.png"
ALT="$M_{2L-A}^{-1}$"> to a vector <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"> within a Krylov solver
corresponds to applying <IMG
WIDTH="41" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img51.png"
ALT="$M_{C}^{-1}$">
and <IMG
WIDTH="41" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img55.png"
ALT="$M_{1L}^{-1}$"> to <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"> independently and then summing up
the results.
<P>
In the multiplicative case, the combination can be
performed by first applying the smoother <IMG
WIDTH="41" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img55.png"
ALT="$M_{1L}^{-1}$"> and then
the coarse-level correction operator <IMG
WIDTH="41" HEIGHT="41" ALIGN="MIDDLE" BORDER="0"
SRC="img51.png"
ALT="$M_{C}^{-1}$">:
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
\begin{array}{l}
w = M_{1L}^{-1} v, \\
z = w + M_{C}^{-1} (v-Aw);
\end{array}
\end{displaymath}
-->
<IMG
WIDTH="177" HEIGHT="51" BORDER="0"
SRC="img56.png"
ALT="\begin{displaymath}
\begin{array}{l}
w = M_{1L}^{-1} v, \\
z = w + M_{C}^{-1} (v-Aw);
\end{array}\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
this corresponds to the following <I>two-level hybrid pre-smoothed</I>
Schwarz preconditioner:
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{2LH-PRE}^{-1} = M_{C}^{-1} + \left( I - M_{C}^{-1}A \right) M_{1L}^{-1}.
\end{displaymath}
-->
<IMG
WIDTH="309" HEIGHT="34" BORDER="0"
SRC="img57.png"
ALT="\begin{displaymath}
M_{2LH-PRE}^{-1} = M_{C}^{-1} + \left( I - M_{C}^{-1}A \right) M_{1L}^{-1}.
\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
On the other hand, by applying the smoother after the coarse-level correction,
i.e. by computing
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
\begin{array}{l}
w = M_{C}^{-1} v , \\
z = w + M_{1L}^{-1} (v-Aw) ,
\end{array}
\end{displaymath}
ALT="$A$">, without assuming any knowledge of the geometry of the problem from which <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$"> originates. A vector space <!-- MATH
$\mathbb{R}^{n_{k}}$
-->
<IMG
WIDTH="177" HEIGHT="51" BORDER="0"
SRC="img58.png"
ALT="\begin{displaymath}
\begin{array}{l}
w = M_{C}^{-1} v , \\
z = w + M_{1L}^{-1} (v-Aw) ,
\end{array}\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
the <I>two-level hybrid post-smoothed</I>
Schwarz preconditioner is obtained:
<BR><P></P>
WIDTH="34" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img7.png"
ALT="$\mathbb{R}^{n_{k}}$"> is associated with <IMG
WIDTH="25" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img8.png"
ALT="$\Omega^k$">, where <IMG
WIDTH="23" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img9.png"
ALT="$n_k$"> is the size of <IMG
WIDTH="25" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img8.png"
ALT="$\Omega^k$">. For all <IMG
WIDTH="70" HEIGHT="34" ALIGN="MIDDLE" BORDER="0"
SRC="img10.png"
ALT="$k &lt; nlev$">, a restriction operator and a prolongation one are built, which connect two levels <IMG
WIDTH="14" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$k$"> and <IMG
WIDTH="44" HEIGHT="34" ALIGN="MIDDLE" BORDER="0"
SRC="img12.png"
ALT="$k+1$">: <BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
M_{2LH-POST}^{-1} = M_{1L}^{-1} + \left( I - M_{1L}^{-1}A \right) M_{C}^{-1}.
P^k \in \mathbb{R}^{n_k \times n_{k+1}}, \quad R^k \in \mathbb{R}^{n_{k+1}\times n_k};
\end{displaymath}
-->
<IMG
WIDTH="318" HEIGHT="34" BORDER="0"
SRC="img59.png"
ALT="\begin{displaymath}
M_{2LH-POST}^{-1} = M_{1L}^{-1} + \left( I - M_{1L}^{-1}A \right) M_{C}^{-1}.
\end{displaymath}">
WIDTH="255" HEIGHT="30" BORDER="0"
SRC="img13.png"
ALT="\begin{displaymath} P^k \in \mathbb{R}^{n_k \times n_{k+1}}, \quad R^k \in \mathbb{R}^{n_{k+1}\times n_k}; \end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P>
One more variant of two-level hybrid preconditioner is obtained by applying
the smoother before and after the coarse-level correction. In this case, the
preconditioner is symmetric if <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$">, <IMG
WIDTH="38" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img49.png"
ALT="$M_{1L}$"> and <IMG
WIDTH="33" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img52.png"
ALT="$M_{C}$"> are symmetric.
<P>
As previously noted, on parallel computers the number of submatrices usually matches
the number of available processors. When the size of the system to be preconditioned
is very large, the use of many processors, i.e. of many small submatrices, often
leads to a large coarse-level system, whose solution may be computationally expensive.
On the other hand, the use of few processors often leads to local sumatrices that
are too expensive to be processed on single processors, because of memory and/or
computing requirements. Therefore, it seems natural to use a recursive approach,
in which the coarse-level correction is re-applied starting from the current
coarse-level system. The corresponding preconditioners, called <I>multi-level</I>
preconditioners, can significantly reduce the computational cost of preconditioning
with respect to the two-level case (see [<A
HREF="node28.html#dd2_96">23</A>, Chapter 3]).
Additive and hybrid multilevel preconditioners
are obtained as direct extensions of the two-level counterparts.
For a detailed descrition of them, the reader is
referred to [<A
HREF="node28.html#dd2_96">23</A>, Chapter 3].
The algorithm for the application of a multi-level hybrid
post-smoothed preconditioner <IMG
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img60.png"
ALT="$M$"> to a vector <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$">, i.e. for the
computation of <IMG
WIDTH="86" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img61.png"
ALT="$w=M^{-1}v$">, is reported, for
example, in Figure&nbsp;<A HREF="#fig:mlhpost_alg">1</A>. Here the number of levels
is denoted by <IMG
WIDTH="38" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img62.png"
ALT="$nlev$"> and the levels are numbered in increasing order starting
from the finest one, i.e. the finest level is level 1; the coarse matrix
and the corresponding basic preconditioner at each level <IMG
WIDTH="10" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img63.png"
ALT="$l$"> are denoted by <IMG
WIDTH="23" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img64.png"
ALT="$A_l$"> and
<IMG
WIDTH="26" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img65.png"
ALT="$M_l$">, respectively, with <IMG
WIDTH="62" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img66.png"
ALT="$A_1=A$">, while the related restriction operator is
denoted by <IMG
WIDTH="23" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img67.png"
ALT="$R_l$">.
<DIV ALIGN="CENTER"><A NAME="fig:mlhpost_alg"></A><A NAME="544"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 1:</STRONG>
Application of the multi-level hybrid post-smoothed preconditioner.</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
<!-- MATH
$\framebox{
\begin{minipage}{.85\textwidth} {\small
\begin{tabbing}
\quad \=\quad \=\quad \=\quad \\[-1mm]$v_1 = v$; \\[2mm]
\textbf{for $l=2, nlev$\ do}\\[1mm]
\> ! transfer $v_{l-1}$\ to the next coarser level\\
\> $v_l = R_lv_{l-1}$\ \\[1mm]
\textbf{endfor} \\[2mm]
! apply the coarsest-level correction\\[1mm]
$y_{nlev} = A_{nlev}^{-1} v_{nlev}$\\[2mm]
\textbf{for $l=nlev -1 , 1, -1$\ do}\\[1mm]
\> ! transfer $y_{l+1}$\ to the next finer level\\
\> $y_l = R_{l+1}^T y_{l+1}$;\\[1mm]
\> ! compute the residual at the current level\\
\> $r_l = v_l-A_l^{-1} y_l$;\\[1mm]
\> ! apply the basic Schwarz preconditioner to the residual\\
\> $r_l = M_l^{-1} r_l$\\[1mm]
\> ! update $y_l$\\
\> $y_l = y_l+r_l$\\
\textbf{endfor} \\[1mm]
$w = y_1$;
\end{tabbing}
}
\end{minipage}
}$
-->
<IMG
WIDTH="430" HEIGHT="435" ALIGN="BOTTOM" BORDER="0"
SRC="img68.png"
ALT="\framebox{
\begin{minipage}{.85\textwidth} {\small
\begin{tabbing}
\quad \=\quad...
...= y_l+r_l$\\
\textbf{endfor} \\ [1mm]
$w = y_1$;
\end{tabbing}}
\end{minipage}}">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html226"
HREF="node13.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html222"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html216"
HREF="node11.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html224"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html227"
HREF="node13.html">Smoothed Aggregation</A>
<B> Up:</B> <A NAME="tex2html223"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html217"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
&nbsp; <B> <A NAME="tex2html225"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
<P></P>
<BR><HR>
</BODY>
</HTML>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Smoothed Aggregation</TITLE>
<META NAME="description" CONTENT="Smoothed Aggregation">
<TITLE>Getting Started</TITLE>
<META NAME="description" CONTENT="Getting Started">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,296 +18,206 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="previous" HREF="node12.html">
<LINK REL="up" HREF="node11.html">
<LINK REL="next" HREF="node15.html">
<LINK REL="previous" HREF="node11.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node14.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html236"
<A NAME="tex2html232"
HREF="node14.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html232"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html228"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html222"
HREF="node12.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html234"
<A NAME="tex2html230"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html237"
HREF="node14.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html233"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html229"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
&nbsp; <B> <A NAME="tex2html235"
<B> Next:</B> <A NAME="tex2html233"
HREF="node14.html">Examples</A>
<B> Up:</B> <A NAME="tex2html229"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html223"
HREF="node12.html">AMG preconditioners</A>
&nbsp; <B> <A NAME="tex2html231"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00062000000000000000"></A><A NAME="sec:aggregation"></A>
<H1><A NAME="SECTION00070000000000000000"></A><A NAME="sec:started"></A>
<BR>
Smoothed Aggregation
</H2>
Getting Started
</H1>
<P>
In order to define the restriction operator <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img69.png"
ALT="$R_C$">, which is used to compute
the coarse-level matrix <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$">, MLD2P4 uses the <I>smoothed aggregation</I>
algorithm described in [<A
HREF="node28.html#BREZINA_VANEK">1</A>,<A
HREF="node28.html#VANEK_MANDEL_BREZINA">27</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="img45.png"
ALT="$W_C$"> by suitably grouping the vertices of <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.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="img70.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:
We describe the basics for building and applying MLD2P4 one-level and multi-level
(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS [<A
HREF="node27.html#PSBLASGUIDE">17</A>].
The following steps are required:
<OL>
<LI>coarsening of the vertex set <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$W$">, to obtain <IMG
WIDTH="32" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img45.png"
ALT="$W_C$">;
<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>
<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>init</code>, which also sets defaults for each preconditioner
type selected by the user. The preconditioner types and the defaults associated
with them are given in Table&nbsp;<A HREF="#tab:precinit">1</A>, where the strings used by
<code>init</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>
<LI>construction of the prolongator <IMG
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img70.png"
ALT="$R_C^T$">;
<LI><I>Modify the selected preconditioner type, by properly setting
preconditioner parameters.</I> This is performed by the routine <code>set</code>.
This routine must be called only if the user wants to modify the default values
of the parameters associated with the selected preconditioner type, to obtain a variant
of that preconditioner. Examples of use of <code>set</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_cycle">2</A>-<A HREF="#tab:p_smoother_1">8</A>.
</LI>
<LI>application of <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img69.png"
ALT="$R_C$"> and <IMG
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img70.png"
ALT="$R_C^T$"> to build <IMG
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img44.png"
ALT="$A_C$">.
<LI><I>Build the preconditioner for a given matrix</I>. If the selected preconditioner
is multi-level, then two steps must be performed, as specified next.
<DL COMPACT>
<DT>4.1</DT>
<DD><I>Build the aggregation hierarchy for a given matrix.</I> This is
performed by the routine <code>hierarchy_build</code>.
</DD>
<DT>4.2</DT>
<DD><I>Build the preconditioner for a given matrix.</I> This is performed
by the routine <code>smoothers_build</code>.
</DD>
</DL>
If the selected preconditioner is one-level, it is built in a single step,
performed by the routine <code>bld</code>.
</LI>
<LI><I>Apply the preconditioner at each iteration of a Krylov solver.</I>
This is performed by the routine <code>aply</code>. When using the PSBLAS Krylov solvers,
this step is completely transparent to the user, since <code>aply</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>free</code>. This step is complementary to step 1 and should
be performed when the preconditioner is no more used.
</LI>
</OL>
<P>
To perform the coarsening step, we have implemented the aggregation algorithm sketched
in [<A
HREF="node28.html#apnum_07">4</A>]. According to [<A
HREF="node28.html#VANEK_MANDEL_BREZINA">27</A>], a modification of
this algorithm has been actually considered,
in which each aggregate <IMG
WIDTH="26" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img71.png"
ALT="$N_r$"> is made of vertices of <IMG
WIDTH="23" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img11.png"
ALT="$W$"> that are <I>strongly coupled</I>
to a certain root vertex <IMG
WIDTH="53" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img72.png"
ALT="$r \in W$">, i.e. <BR><P></P>
<DIV ALIGN="CENTER">
<!-- 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="320" HEIGHT="38" BORDER="0"
SRC="img73.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="img74.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="img75.png"
ALT="$i$"> independently applies the algorithm to
the set of vertices <IMG
WIDTH="31" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img76.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="node28.html#aaecc_07">3</A>,<A
HREF="node28.html#apnum_07">4</A>,<A
HREF="node28.html#TUMINARO_TONG">26</A>].
<P>
The prolongator <IMG
WIDTH="75" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img77.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="img78.png"
ALT="$P \in \Re^{n \times n_C}$">, defined as
<BR>
<DIV ALIGN="RIGHT">
All the previous routines are available as methods of the preconditioner object.
A detailed description of them 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>.
<!-- 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="291" HEIGHT="52" BORDER="0"
SRC="img79.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>
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="513"></A>
<TABLE>
<CAPTION><STRONG>Table 1:</STRONG>
Preconditioner types, corresponding strings and default choices.
</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
<TABLE CELLPADDING=3 BORDER="1" ALIGN="CENTER">
<TR><TD ALIGN="LEFT"><SMALL>TYPE</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><SMALL>STRING</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232><SMALL>DEFAULT PRECONDITIONER</SMALL></TD>
</TR>
<TR><TD ALIGN="LEFT">No preconditioner</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'NOPREC'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Considered only to use the PSBLAS
Krylov solvers with no preconditioner.</TD>
</TR>
<TR><TD ALIGN="LEFT">Diagonal</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'DIAG'</code> or <code>'JACOBI'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Diagonal preconditioner.
For any zero diagonal entry of the matrix to be preconditioned,
the corresponding entry of he preconditioner is set to&nbsp;1.</TD>
</TR>
<TR><TD ALIGN="LEFT">Block Jacobi</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'BJAC'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Block-Jacobi with ILU(0) on the local blocks.</TD>
</TR>
<TR><TD ALIGN="LEFT">Additive Schwarz</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'AS'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Restricted Additive Schwarz (RAS),
with overlap&nbsp;1 and ILU(0) on the local blocks.</TD>
</TR>
<TR><TD ALIGN="LEFT">Multilevel</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'ML'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>V-cycle with one hybrid forward Gauss-Seidel
(GS) sweep as pre-smoother and one hybrid backward
GS sweep as post-smoother, basic smoothed aggregation
as coarsening algorithm, and LU (plus triangular solve)
as coarsest-level solver. See the default values in
Tables&nbsp;<A HREF="#tab:p_cycle">2</A>-<A HREF="#tab:p_smoother_1">8</A>
for further details of the preconditioner.</TD>
</TR>
</TABLE>
<BR CLEAR="ALL"></DIV><P></P>
<IMG
WIDTH="27" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
SRC="img80.png"
ALT="$P_C$"> is obtained by
applying to <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img81.png"
ALT="$P$"> a smoother <!-- MATH
$S \in \Re^{n \times n}$
-->
<IMG
WIDTH="78" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
SRC="img82.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="img83.png"
ALT="\begin{displaymath}
P_C = S P,
\end{displaymath}"></TD>
<TD WIDTH=10 ALIGN="RIGHT">
(3)</TD></TR>
</DIV></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="node28.html#BREZINA_VANEK">1</A>,<A
HREF="node28.html#Stuben_01">25</A>].
A simple choice for <IMG
WIDTH="16" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img84.png"
ALT="$S$"> is the damped Jacobi smoother:
</DIV><P></P>
<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="125" HEIGHT="30" BORDER="0"
SRC="img85.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="18" ALIGN="BOTTOM" BORDER="0"
SRC="img86.png"
ALT="$\omega$"> can be chosen
using some estimate of the spectral radius of <IMG
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img87.png"
ALT="$D^{-1}A$"> [<A
HREF="node28.html#BREZINA_VANEK">1</A>].
<P>
Note that the 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>).
<BR>
<P>
<B>Remark 1.</B> Coarsest-level solvers based on the LU factorization,
such as those implemented in UMFPACK, MUMPS, SuperLU, and SuperLU_Dist,
usually lead to smaller numbers of preconditioned Krylov
iterations than inexact solvers, when the linear system comes from
a standard discretization of basic scalar elliptic PDE problems. However,
this does not necessarily correspond to the smallest execution time
on parallel computers.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html234"
HREF="node14.html">Examples</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html236"
<A NAME="tex2html232"
HREF="node14.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html232"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html228"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html222"
HREF="node12.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html234"
<A NAME="tex2html230"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html237"
HREF="node14.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html233"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html229"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
&nbsp; <B> <A NAME="tex2html235"
<B> Next:</B> <A NAME="tex2html233"
HREF="node14.html">Examples</A>
<B> Up:</B> <A NAME="tex2html229"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html223"
HREF="node12.html">AMG preconditioners</A>
&nbsp; <B> <A NAME="tex2html231"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -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>Examples</TITLE>
<META NAME="description" CONTENT="Examples">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,206 +18,302 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node16.html">
<LINK REL="previous" HREF="node11.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="previous" HREF="node13.html">
<LINK REL="up" HREF="node13.html">
<LINK REL="next" HREF="node15.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html248"
<A NAME="tex2html243"
HREF="node15.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html244"
HREF="userhtml.html">
<A NAME="tex2html239"
HREF="node13.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html238"
<A NAME="tex2html235"
HREF="node13.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html246"
<A NAME="tex2html241"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html249"
HREF="node15.html">Examples</A>
<B> Up:</B> <A NAME="tex2html245"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html239"
HREF="node13.html">Smoothed Aggregation</A>
&nbsp; <B> <A NAME="tex2html247"
<B> Next:</B> <A NAME="tex2html244"
HREF="node15.html">User Interface</A>
<B> Up:</B> <A NAME="tex2html240"
HREF="node13.html">Getting Started</A>
<B> Previous:</B> <A NAME="tex2html236"
HREF="node13.html">Getting Started</A>
&nbsp; <B> <A NAME="tex2html242"
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="SECTION00071000000000000000"></A><A NAME="sec:examples"></A>
<BR>
Getting Started
</H1>
Examples
</H2>
<P>
The code reported in Figure&nbsp;<A HREF="#fig:ex1">2</A> shows how to set and apply the default
multi-level preconditioner available in the real double precision version
of MLD2P4 (see Table&nbsp;<A HREF="#tab:precinit">1</A>). This preconditioner is chosen
by simply specifying <code>'ML'</code> as the second argument of <code>P%init</code>
(a call to <code>P%set</code> is not needed) and is applied with the CG
solver provided by PSBLAS (the matrix of the system to be solved is
assumed to be positive definite). As previously observed, the modules
<code>psb_base_mod</code>, <code>mld_prec_mod</code> and <code>psb_krylov_mod</code>
must be used by the example program.
<P>
We describe the basics for building and applying MLD2P4 one-level and multi-level
(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS [<A
HREF="node28.html#PSBLASGUIDE">16</A>].
The following steps are required:
<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>
<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>init</code>, which also sets defaults for each preconditioner
type selected by the user. The preconditioner types and the defaults associated
with them are given in Table&nbsp;<A HREF="#tab:precinit">1</A>, where the strings used by
<code>init</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>
<LI><I>Modify the selected preconditioner type, by properly setting
preconditioner parameters.</I> This is performed by the routine <code>set</code>.
This routine must be called only if the user wants to modify the default values
of the parameters associated with the selected preconditioner type, to obtain a variant
of that preconditioner. Examples of use of <code>set</code> are given in
Section&nbsp;<A HREF="node15.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="node16.html#sec:userinterface">6</A>, Tables&nbsp;<A HREF="#tab:p_cycle">2</A>-<A HREF="#tab:p_smoother_1">8</A>.
</LI>
<LI><I>Build the preconditioner for a given matrix</I>. If the selected preconditioner
is multi-level, then two steps must be performed, as specified next.
<DL COMPACT>
<DT>4.1</DT>
<DD><I>Build the aggregation hierarchy for a given matrix.</I> This is
performed by the routine <code>hierarchy_bld</code>.
</DD>
<DT>4.2</DT>
<DD><I>Build the preconditioner for a given matrix.</I> This is performed
by the routine <code>smoothers_bld</code>.
</DD>
</DL>
If the selected preconditioner is one-level, it is built in a single step,
performed by the routine <code>bld</code>.
</LI>
<LI><I>Apply the preconditioner at each iteration of a Krylov solver.</I>
This is performed by the routine <code>aply</code>. When using the PSBLAS Krylov solvers,
this step is completely transparent to the user, since <code>aply</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>free</code>. This step is complementary to step 1 and should
be performed when the preconditioner is no more used.
</LI>
</OL>
The part of the code concerning the
reading and assembling of the sparse matrix and the right-hand side vector, performed
through the PSBLAS routines for sparse matrix and vector management, is not reported
here for brevity; the statements concerning the deallocation of the PSBLAS
data structure are neglected too.
The complete code can be found in the example program file <code>mld_dexample_ml.f90</code>,
in the directory <code>examples/fileread</code> of the MLD2P4 implementation (see
Section&nbsp;<A HREF="node10.html#sec:ex_and_test">3.5</A>). A sample test problem along with the relevant
input data is available in <code>examples/fileread/runs</code>.
For details on the use of the PSBLAS routines, see the PSBLAS User's
Guide&nbsp;[<A
HREF="node27.html#PSBLASGUIDE">17</A>].
<P>
All the previous routines are available as methods of the preconditioner object.
A detailed description of them is given in Section&nbsp;<A HREF="node16.html#sec:userinterface">6</A>.
Examples showing the basic use of MLD2P4 are reported in Section&nbsp;<A HREF="node15.html#sec:examples">5.1</A>.
The setup and application of the default multi-level preconditioner
for the real single precision and the complex, single and double
precision, versions are obtained with straightforward modifications of the previous
example (see Section&nbsp;<A HREF="node15.html#sec:userinterface">6</A> for details). If these versions are installed,
the corresponding codes are available in <code>examples/fileread/</code>.
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="962"></A>
<DIV ALIGN="CENTER"><A NAME="fig:ex1"></A><A NAME="516"></A>
<TABLE>
<CAPTION><STRONG>Table 1:</STRONG>
Preconditioner types, corresponding strings and default choices.
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
setup and application of the default multi-level preconditioner (example 1).
</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
<TABLE CELLPADDING=3 BORDER="1" ALIGN="CENTER">
<TR><TD ALIGN="LEFT"><SMALL>TYPE</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><SMALL>STRING</SMALL></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232><SMALL>DEFAULT PRECONDITIONER</SMALL></TD>
</TR>
<TR><TD ALIGN="LEFT">No preconditioner</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'NOPREC'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Considered only to use the PSBLAS
Krylov solvers with no preconditioner.</TD>
</TR>
<TR><TD ALIGN="LEFT">Diagonal</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'DIAG'</code> or <code>'JACOBI'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Diagonal preconditioner.
For any zero diagonal entry of the matrix to be preconditioned,
the corresponding entry of he preconditioner is set to&nbsp;1.</TD>
</TR>
<TR><TD ALIGN="LEFT">Block Jacobi</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'BJAC'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Block-Jacobi with ILU(0) on the local blocks.</TD>
</TR>
<TR><TD ALIGN="LEFT">Additive Schwarz</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'AS'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>Restricted Additive Schwarz (RAS),
with overlap&nbsp;1 and ILU(0) on the local blocks.</TD>
</TR>
<TR><TD ALIGN="LEFT">Multilevel</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=51><code>'ML'</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=232>V-cycle with one hybrid forward Gauss-Seidel
(GS) sweep as pre-smoother and one hybrid backward
GS sweep as post-smoother, basic smoothed aggregation
as coarsening algorithm, and LU (plus triangular solve)
as coarsest-level solver. See the default values in
Tables&nbsp;<A HREF="#tab:p_cycle">2</A>-<A HREF="#tab:p_smoother_1">8</A>
for further details of the preconditioner.</TD>
</TR>
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
use psb_base_mod
use mld_prec_mod
use psb_krylov_mod
... ...
!
! sparse matrix
type(psb_dspmat_type) :: A
! sparse matrix descriptor
type(psb_desc_type) :: desc_A
! preconditioner
type(mld_dprec_type) :: P
! right-hand side and solution vectors
type(psb_d_vect_type) :: b, x
... ...
!
! initialize the parallel environment
call psb_init(ictxt)
call psb_info(ictxt,iam,np)
... ...
!
! read and assemble the spd matrix A and the right-hand side b
! using PSBLAS routines for sparse matrix / vector management
... ...
!
! initialize the default multi-level preconditioner, i.e. V-cycle
! with basic smoothed aggregation, 1 hybrid forward/backward
! GS sweep as pre/post-smoother and UMFPACK as coarsest-level
! solver
call P%init(P,'ML',info)
!
! build the preconditioner
call P%hierarchy_build(A,desc_A,P,info)
call P%smoothers_build(A,desc_A,P,info)
!
! set the solver parameters and the initial guess
... ...
!
! solve Ax=b with preconditioned CG
call psb_krylov('CG',A,P,b,x,tol,desc_A,info)
... ...
!
! deallocate the preconditioner
call P%free(P,info)
!
! deallocate other data structures
... ...
!
! exit the parallel environment
call psb_exit(ictxt)
stop
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV><P></P>
<BR>
</DIV>
<P>
Note that the 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="node15.html#sec:examples">5.1</A>).
<BR>
Different versions of the multi-level preconditioner can be obtained by changing
the default values of the preconditioner parameters. The code reported in
Figure&nbsp;<A HREF="#fig:ex2">3</A> shows how to set a V-cycle preconditioner
which applies 1 block-Jacobi sweep as pre- and post-smoother,
and solves the coarsest-level system with 8 block-Jacobi sweeps.
Note that the ILU(0) factorization (plus triangular solve) is used as
local solver for the block-Jacobi sweeps, since this is the default associated
with block-Jacobi and set by&nbsp;<code>P%init</code>.
Furthermore, specifying block-Jacobi as coarsest-level
solver implies that the coarsest-level matrix is distributed
among the processes.
Figure&nbsp;<A HREF="#fig:ex3">4</A> shows how to set a W-cycle preconditioner which
applies no pre-smoother and 2 Gauss-Seidel sweeps as post-smoother,
and solves the coarsest-level system with the multifrontal LU factorization
implemented in MUMPS. It is specified that the coarsest-level
matrix is distributed, since MUMPS can be used on both
replicated and distributed matrices, and by default
it is used on replicated ones. Note the use of the parameter <code>pos</code>
to specify a property only for the pre-smoother or the post-smoother
(see Section&nbsp;<A HREF="node17.html#sec:precset">6.2</A> for more details).
Note also that a Krylov method different from CG must be used to solve
the preconditioned system, since the preconditione in nonsymmetric.
The code fragments shown in Figures&nbsp;<A HREF="#fig:ex2">3</A> and <A HREF="#fig:ex3">4</A> are
included in the example program file <code>mld_dexample_ml.f90</code> too.
<P>
Finally, Figure&nbsp;<A HREF="#fig:ex4">5</A> shows the setup of a one-level
additive Schwarz preconditioner, i.e., RAS with overlap 2. The
corresponding example program is available in the file
<code>mld_dexample_1lev.f90</code>.
<P>
For all the previous preconditioners, example programs where the sparse matrix and
the right-hand side are generated by discretizing a PDE with Dirichlet
boundary conditions are also available in the directory <code>examples/pdegen</code>.
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex2"></A><A NAME="518"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
setup of a multi-level preconditioner</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! build a V-cycle preconditioner with 1 block-Jacobi sweep (with
! ILU(0) on the blocks) as pre- and post-smoother, and 8 block-Jacobi
! sweeps (with ILU(0) on the blocks) as coarsest-level solver
call P%init(P,'ML',info)
call_P%set(P,'SMOOTHER_TYPE','BJAC',info)
call P%set(P,'COARSE_SOLVE','BJAC',info)
call P%set(P,'COARSE_SWEEPS',8,info)
call P%hierarchy_build(A,desc_A,P,info)
call P%smoothers_build(A,desc_A,P,info)
... ...
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV>
<P>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex3"></A><A NAME="520"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4:</STRONG>
setup of a multi-level preconditioner</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! build a W-cycle preconditioner with 2 Gauss-Seidel sweeps as
! post-smoother (and no pre-smoother), a distributed coarsest
! matrix, and MUMPS as coarsest-level solver
call P%init(P,'ML',info)
call P%set('ML_TYPE','WCYCLE',info)
call P%set('SMOOTHER_TYPE','GS',info)
call P%set('SMOOTHER_SWEEPS',0,info,pos='PRE')
call P%set('SMOOTHER_SWEEPS',2,info,pos='POST')
call P%set('COARSE_SOLVE','MUMPS',info)
call P%set('COARSE_MAT','DIST',info)
call P%hierarchy_build(A,desc_A,P,info)
call P%smoothers_build(A,desc_A,P,info)
... ...
! solve Ax=b with preconditioned CG
call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<B>Remark 1.</B> Coarsest-level solvers based on the LU factorization,
such as those implemented in UMFPACK, MUMPS, SuperLU, and SuperLU_Dist,
usually lead to smaller numbers of preconditioned Krylov
iterations than inexact solvers, when the linear system comes from
a standard discretization of basic scalar elliptic PDE problems. However,
this does not necessarily correspond to the smallest execution time
on parallel computers.
<DIV ALIGN="CENTER"><A NAME="fig:ex4"></A><A NAME="522"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 5:</STRONG>
setup of a one-level Schwarz preconditioner.</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! set RAS with overlap 2 and ILU(0) on the local blocks
call P%init(P,'AS',info)
call P%set(P,'SUB_OVR',2,info)
call P%bld(A,desc_A,P,info)
... ...
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html250"
HREF="node15.html">Examples</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html248"
<A NAME="tex2html243"
HREF="node15.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html244"
HREF="userhtml.html">
<A NAME="tex2html239"
HREF="node13.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html238"
<A NAME="tex2html235"
HREF="node13.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html246"
<A NAME="tex2html241"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html249"
HREF="node15.html">Examples</A>
<B> Up:</B> <A NAME="tex2html245"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html239"
HREF="node13.html">Smoothed Aggregation</A>
&nbsp; <B> <A NAME="tex2html247"
<B> Next:</B> <A NAME="tex2html244"
HREF="node15.html">User Interface</A>
<B> Up:</B> <A NAME="tex2html240"
HREF="node13.html">Getting Started</A>
<B> Previous:</B> <A NAME="tex2html236"
HREF="node13.html">Getting Started</A>
&nbsp; <B> <A NAME="tex2html242"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Examples</TITLE>
<META NAME="description" CONTENT="Examples">
<TITLE>User Interface</TITLE>
<META NAME="description" CONTENT="User Interface">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,302 +18,143 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="previous" HREF="node14.html">
<LINK REL="up" HREF="node14.html">
<LINK REL="next" HREF="node24.html">
<LINK REL="previous" HREF="node13.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node16.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html259"
<A NAME="tex2html255"
HREF="node16.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html255"
HREF="node14.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html251"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html245"
HREF="node14.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html257"
<A NAME="tex2html253"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html260"
HREF="node16.html">User Interface</A>
<B> Up:</B> <A NAME="tex2html256"
HREF="node14.html">Getting Started</A>
<B> Previous:</B> <A NAME="tex2html252"
HREF="node14.html">Getting Started</A>
&nbsp; <B> <A NAME="tex2html258"
<B> Next:</B> <A NAME="tex2html256"
HREF="node16.html">Subroutine init</A>
<B> Up:</B> <A NAME="tex2html252"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html246"
HREF="node14.html">Examples</A>
&nbsp; <B> <A NAME="tex2html254"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00071000000000000000"></A><A NAME="sec:examples"></A>
<H1><A NAME="SECTION00080000000000000000"></A><A NAME="sec:userinterface"></A>
<BR>
Examples
</H2>
User Interface
</H1>
<P>
The code reported in Figure&nbsp;<A HREF="#fig:ex1">2</A> shows how to set and apply the default
multi-level preconditioner available in the real double precision version
of MLD2P4 (see Table&nbsp;<A HREF="#tab:precinit">1</A>). This preconditioner is chosen
by simply specifying <code>'ML'</code> as second argument of <code>P%init</code>
(a call to <code>P%set</code> is not needed) and is applied with the CG
solver provided by PSBLAS (the matrix of the system to be solved is
assumed to be positive definite). As previously observed, the modules
<code>psb_base_mod</code>, <code>mld_prec_mod</code> and <code>psb_krylov_mod</code>
must be used by the example program.
The basic user interface of MLD2P4 consists of eight routines. The six
routines <code>init</code>, <code>set</code>,
<code>hierarchy_build</code>, <code>smoothers_build</code>,
<code>bld</code>, and <code>apply</code> encapsulate all the
functionalities for the setup and the application of any multi-level and one-level
preconditioner implemented in the package.
The routine <code>free</code> deallocates the preconditioner data structure, while
<code>descr</code> prints a description of the preconditioner setup by the user.
<P>
The part of the code concerning the
reading and assembling of the sparse matrix and the right-hand side vector, performed
through the PSBLAS routines for sparse matrix and vector management, is not reported
here for brevity; the statements concerning the deallocation of the PSBLAS
data structure are neglected too.
The complete code can be found in the example program file <code>mld_dexample_ml.f90</code>,
in the directory <code>examples/fileread</code> of the MLD2P4 implementation (see
Section&nbsp;<A HREF="node10.html#sec:ex_and_test">3.5</A>). A sample test problem along with the relevant
input data is available in <code>examples/fileread/runs</code>.
For details on the use of the PSBLAS routines, see the PSBLAS User's
Guide&nbsp;[<A
HREF="node28.html#PSBLASGUIDE">16</A>].
All the routines are available as methods of the preconditioner object.
For each routine, the same user interface is overloaded with
respect to the real/ complex case and the single/double precision;
arguments with appropriate data types must be passed to the routine,
i.e.,
<UL>
<LI>the sparse matrix data structure, containing the matrix to be
preconditioned, must be of type <code>psb_</code><I>x</I><code>spmat_type</code>
with <I>x</I> = <code>s</code> for real single precision, <I>x</I> = <code>d</code>
for real double precision, <I>x</I> = <code>c</code> for complex single precision,
<I>x</I> = <code>z</code> for complex double precision;
</LI>
<LI>the preconditioner data structure must be of type
<code>mld_</code><I>x</I><code>prec_type</code>, with <I>x</I> =
<code>s</code>, <code>d</code>, <code>c</code>, <code>z</code>, according to the sparse
matrix data structure;
</LI>
<LI>the arrays containing the vectors <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img14.png"
ALT="$v$"> and <IMG
WIDTH="18" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img15.png"
ALT="$w$"> involved in
the preconditioner application <IMG
WIDTH="86" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img16.png"
ALT="$w=M^{-1}v$"> must be of type
<code>psb_</code><I>x</I><code>vect_type</code> with <I>x</I> =
<code>s</code>, <code>d</code>, <code>c</code>, <code>z</code>, in a manner completely
analogous to the sparse matrix type;
</LI>
<LI>real parameters defining the preconditioner must be declared
according to the precision of the sparse matrix and preconditioner
data structures (see Section&nbsp;<A HREF="node17.html#sec:precset">6.2</A>).
</LI>
</UL>
A description of each routine is given in the remainder of this section.
<P>
The setup and application of the default multi-level preconditioner
for the real single precision and the complex, single and double
precision, versions are obtained with straightforward modifications of the previous
example (see Section&nbsp;<A HREF="node16.html#sec:userinterface">6</A> for details). If these versions are installed,
the corresponding codes are available in <code>examples/fileread/</code>.
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex1"></A><A NAME="965"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
setup and application of the default multi-level preconditioner (example 1).
</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
use psb_base_mod
use mld_prec_mod
use psb_krylov_mod
... ...
!
! sparse matrix
type(psb_dspmat_type) :: A
! sparse matrix descriptor
type(psb_desc_type) :: desc_A
! preconditioner
type(mld_dprec_type) :: P
! right-hand side and solution vectors
type(psb_d_vect_type) :: b, x
... ...
!
! initialize the parallel environment
call psb_init(ictxt)
call psb_info(ictxt,iam,np)
... ...
!
! read and assemble the spd matrix A and the right-hand side b
! using PSBLAS routines for sparse matrix / vector management
... ...
!
! initialize the default multi-level preconditioner, i.e. V-cycle
! with basic smoothed aggregation, 1 hybrid forward/backward
! GS sweep as pre/post-smoother and UMFPACK as coarsest-level
! solver
call P%init(P,'ML',info)
!
! build the preconditioner
call P%hierarchy_bld(A,desc_A,P,info)
call P%smoothers_bld(A,desc_A,P,info)
!
! set the solver parameters and the initial guess
... ...
!
! solve Ax=b with preconditioned CG
call psb_krylov('CG',A,P,b,x,tol,desc_A,info)
... ...
!
! deallocate the preconditioner
call P%free(P,info)
!
! deallocate other data structures
... ...
!
! exit the parallel environment
call psb_exit(ictxt)
stop
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
Different versions of the multi-level preconditioner can be obtained by changing
the default values of the preconditioner parameters. The code reported in
Figure&nbsp;<A HREF="#fig:ex2">3</A> shows how to set a V-cycle preconditioner
which applies 1 block-Jacobi sweep as pre- and post-smoother,
and solves the coarsest-level system with 8 block-Jacobi sweeps.
Note that the ILU(0) factorization (plus triangular solve) is used as
local solver for the block-Jacobi sweeps, since this is the default associated
with block-Jacobi and set by&nbsp;<code>P%init</code>.
Furthermore, specifying block-Jacobi as coarsest-level
solver implies that the coarsest-level matrix is distributed
among the processes.
Figure&nbsp;<A HREF="#fig:ex3">4</A> shows how to set a W-cycle preconditioner which
applies no pre-smoother and 2 Gauss-Seidel sweeps as post-smoother,
and solves the coarsest-level system with the multifrontal LU factorization
implemented in MUMPS. It is specified that the coarsest-level
matrix is distributed, since MUMPS can be used on both
replicated and distributed matrices, and by default
it is used on replicated ones. Note the use of the parameter <code>pos</code>
to specify a property only for the pre-smoother or the post-smoother
(see Section&nbsp;<A HREF="node18.html#sec:precset">6.2</A> for more details).
Note also that a Krylov method different from CG must be used to solve
the preconditioned system, since the preconditione in nonsymmetric.
The code fragments shown in Figures&nbsp;<A HREF="#fig:ex2">3</A> and <A HREF="#fig:ex3">4</A> are
included in the example program file <code>mld_dexample_ml.f90</code> too.
<P>
Finally, Figure&nbsp;<A HREF="#fig:ex4">5</A> shows the setup of a one-level
additive Schwarz preconditioner, i.e., RAS with overlap 2. The
corresponding example program is available in the file
<code>mld_dexample_1lev.f90</code>.
<P>
For all the previous preconditioners, example programs where the sparse matrix and
the right-hand side are generated by discretizing a PDE with Dirichlet
boundary conditions are also available in the directory <code>examples/pdegen</code>.
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex2"></A><A NAME="967"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
setup of a multi-level preconditioner</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! build a V-cycle preconditioner with 1 block-Jacobi sweep (with
! ILU(0) on the blocks) as pre- and post-smoother, and 8 block-Jacobi
! sweeps (with ILU(0) on the blocks) as coarsest-level solver
call P%init(P,'ML',info)
call_P%set(P,'SMOOTHER_TYPE','BJAC',info)
call P%set(P,'COARSE_SOLVE','BJAC',info)
call P%set(P,'COARSE_SWEEPS',8,info)
call P%hierarchy_bld(A,desc_A,P,info)
call P%smoothers_bld(A,desc_A,P,info)
... ...
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV>
<P>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex3"></A><A NAME="969"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4:</STRONG>
setup of a multi-level preconditioner</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! build a W-cycle preconditioner with 2 Gauss-Seidel sweeps as
! post-smoother (and no pre-smoother), a distributed coarsest
! matrix, and MUMPS as coarsest-level solver
call P%init(P,'ML',info)
call P%set('ML_TYPE','WCYCLE',info)
call P%set('SMOOTHER_TYPE','GS',info)
call P%set('SMOOTHER_SWEEPS',0,info,pos='PRE')
call P%set('SMOOTHER_SWEEPS',2,info,pos='POST')
call P%set('COARSE_SOLVE','MUMPS',info)
call P%set('COARSE_MAT','DIST',info)
call P%hierarchy_bld(A,desc_A,P,info)
call P%smoothers_bld(A,desc_A,P,info)
... ...
! solve Ax=b with preconditioned CG
call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex4"></A><A NAME="971"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 5:</STRONG>
setup of a one-level Schwarz preconditioner.</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! set RAS with overlap 2 and ILU(0) on the local blocks
call P%init(P,'AS',info)
call P%set(P,'SUB_OVR',2,info)
call P%bld(A,desc_A,P,info)
... ...
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html257"
HREF="node16.html">Subroutine init</A>
<LI><A NAME="tex2html258"
HREF="node17.html">Subroutine set</A>
<LI><A NAME="tex2html259"
HREF="node18.html">Subroutine build</A>
<LI><A NAME="tex2html260"
HREF="node19.html">Subroutine hierarchy_build</A>
<LI><A NAME="tex2html261"
HREF="node20.html">Subroutine smoothers_build</A>
<LI><A NAME="tex2html262"
HREF="node21.html">Subroutine apply</A>
<LI><A NAME="tex2html263"
HREF="node22.html">Subroutine free</A>
<LI><A NAME="tex2html264"
HREF="node23.html">Subroutine descr</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html259"
<A NAME="tex2html255"
HREF="node16.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html255"
HREF="node14.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html251"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html245"
HREF="node14.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html257"
<A NAME="tex2html253"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html260"
HREF="node16.html">User Interface</A>
<B> Up:</B> <A NAME="tex2html256"
HREF="node14.html">Getting Started</A>
<B> Previous:</B> <A NAME="tex2html252"
HREF="node14.html">Getting Started</A>
&nbsp; <B> <A NAME="tex2html258"
<B> Next:</B> <A NAME="tex2html256"
HREF="node16.html">Subroutine init</A>
<B> Up:</B> <A NAME="tex2html252"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html246"
HREF="node14.html">Examples</A>
&nbsp; <B> <A NAME="tex2html254"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>User Interface</TITLE>
<META NAME="description" CONTENT="User Interface">
<TITLE>Subroutine init</TITLE>
<META NAME="description" CONTENT="Subroutine init">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,145 +18,92 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node25.html">
<LINK REL="previous" HREF="node14.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node17.html">
<LINK REL="previous" HREF="node15.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node17.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html271"
<A NAME="tex2html275"
HREF="node17.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html267"
HREF="userhtml.html">
<A NAME="tex2html271"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html261"
<A NAME="tex2html265"
HREF="node15.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html269"
<A NAME="tex2html273"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html272"
HREF="node17.html">Subroutine init</A>
<B> Up:</B> <A NAME="tex2html268"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html262"
HREF="node15.html">Examples</A>
&nbsp; <B> <A NAME="tex2html270"
<B> Next:</B> <A NAME="tex2html276"
HREF="node17.html">Subroutine set</A>
<B> Up:</B> <A NAME="tex2html272"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html266"
HREF="node15.html">User Interface</A>
&nbsp; <B> <A NAME="tex2html274"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00080000000000000000"></A><A NAME="sec:userinterface"></A>
<H2><A NAME="SECTION00081000000000000000"></A><A NAME="sec:precinit"></A>
<BR>
User Interface
</H1>
Subroutine init
</H2>
<P>
<DIV ALIGN="CENTER">
<code>call p%init(ptype,info)</code>
</DIV>
<P>
This routine allocates and initializes the preconditioner
<code>p</code>, according to the preconditioner type chosen by the user.
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P></P>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>ptype</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>character(len=*), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The type of preconditioner. Its values are specified
in Table&nbsp;<A HREF="#tab:precinit">1</A>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Note that the strings are case insensitive.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node25.html#sec:errors">8</A> for details.</TD>
</TR>
</TABLE>
<P>
The basic user interface of MLD2P4 consists of eight routines. The six
routines <code>init</code>, <code>set</code>,
<code>hierarchy_bld</code>, <code>smoothers_bld</code>,
<code>bld</code>, and <code>apply</code> encapsulate all the
functionalities for the setup and the application of any multi-level and one-level
preconditioner implemented in the package.
The routine <code>free</code> deallocates the preconditioner data structure, while
<code>descr</code> prints a description of the preconditioner setup by the user.
For compatibility with the previous versions of MLD2P4, this routine can be also invoked
as follows:
<P>
All the routines are available as methods of the preconditioner object.
For each routine, the same user interface is overloaded with
respect to the real/ complex case and the single/double precision;
arguments with appropriate data types must be passed to the routine,
i.e.,
<UL>
<LI>the sparse matrix data structure, containing the matrix to be
preconditioned, must be of type <code>psb_</code><I>x</I><code>spmat_type</code>
with <I>x</I> = <code>s</code> for real single precision, <I>x</I> = <code>d</code>
for real double precision, <I>x</I> = <code>c</code> for complex single precision,
<I>x</I> = <code>z</code> for complex double precision;
</LI>
<LI>the preconditioner data structure must be of type
<code>mld_</code><I>x</I><code>prec_type</code>, with <I>x</I> =
<code>s</code>, <code>d</code>, <code>c</code>, <code>z</code>, according to the sparse
matrix data structure;
</LI>
<LI>the arrays containing the vectors <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"> and <IMG
WIDTH="18" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img88.png"
ALT="$w$"> involved in
the preconditioner application <IMG
WIDTH="86" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img61.png"
ALT="$w=M^{-1}v$"> must be of type
<code>psb_</code><I>x</I><code>vect_type</code> with <I>x</I> =
<code>s</code>, <code>d</code>, <code>c</code>, <code>z</code>, in a manner completely
analogous to the sparse matrix type;
</LI>
<LI>real parameters defining the preconditioner must be declared
according to the precision of the sparse matrix and preconditioner
data structures (see Section&nbsp;<A HREF="node18.html#sec:precset">6.2</A>).
</LI>
</UL>
A description of each routine is given in the remainder of this section.
<DIV ALIGN="CENTER">
<code>call mld_precinit(p,ptype,info)</code>
</DIV>
<P>
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html273"
HREF="node17.html">Subroutine init</A>
<LI><A NAME="tex2html274"
HREF="node18.html">Subroutine set</A>
<LI><A NAME="tex2html275"
HREF="node19.html">Subroutine bld</A>
<LI><A NAME="tex2html276"
HREF="node20.html">Subroutine hierarchy_bld</A>
<LI><A NAME="tex2html277"
HREF="node21.html">Subroutine smoothers_bld</A>
<LI><A NAME="tex2html278"
HREF="node22.html">Subroutine apply</A>
<LI><A NAME="tex2html279"
HREF="node23.html">Subroutine free</A>
<LI><A NAME="tex2html280"
HREF="node24.html">Subroutine descr</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html271"
HREF="node17.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html267"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html261"
HREF="node15.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html269"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html272"
HREF="node17.html">Subroutine init</A>
<B> Up:</B> <A NAME="tex2html268"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html262"
HREF="node15.html">Examples</A>
&nbsp; <B> <A NAME="tex2html270"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>
</HTML>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Subroutine bld</TITLE>
<META NAME="description" CONTENT="Subroutine bld">
<TITLE>Subroutine hierarchy_build</TITLE>
<META NAME="description" CONTENT="Subroutine hierarchy_build">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -20,52 +20,52 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="next" HREF="node20.html">
<LINK REL="previous" HREF="node18.html">
<LINK REL="up" HREF="node16.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node20.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html315"
<A NAME="tex2html311"
HREF="node20.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html311"
HREF="node16.html">
<A NAME="tex2html307"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html305"
<A NAME="tex2html301"
HREF="node18.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html313"
<A NAME="tex2html309"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html316"
HREF="node20.html">Subroutine hierarchy_bld</A>
<B> Up:</B> <A NAME="tex2html312"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html306"
HREF="node18.html">Subroutine set</A>
&nbsp; <B> <A NAME="tex2html314"
<B> Next:</B> <A NAME="tex2html312"
HREF="node20.html">Subroutine smoothers_build</A>
<B> Up:</B> <A NAME="tex2html308"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html302"
HREF="node18.html">Subroutine build</A>
&nbsp; <B> <A NAME="tex2html310"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00083000000000000000"></A><A NAME="sec:precbld"></A>
<H2><A NAME="SECTION00084000000000000000"></A><A NAME="sec:hier_bld"></A>
<BR>
Subroutine bld
Subroutine hierarchy_build
</H2>
<P>
<DIV ALIGN="CENTER">
<code>call p%bld(a,desc_a,info)</code>
<code>call p%hierarchy_build(a,desc_a,info)</code>
<BR>
</DIV>
<P>
This routine builds the one-level preconditioner <code>p</code> according to the requirements
made by the user through the routines <code>init</code> and <code>set</code>
(see Sections&nbsp;<A HREF="node20.html#sec:hier_bld">6.4</A> and&nbsp;<A HREF="node21.html#sec:smoothers_bld">6.5</A> for multi-level preconditioners).
This routine builds the hierarchy of matrices and restriction/prolongation
operators for the multi-level preconditioner <code>p</code>, according to the requirements
made by the user through the routines <code>init</code> and <code>set</code>.
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
@ -79,9 +79,10 @@ made by the user through the routines <code>init</code> and <code>set</code>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that <I>x</I> 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 [<A
HREF="node28.html#PSBLASGUIDE">16</A>].</TD>
HREF="node27.html#PSBLASGUIDE">17</A>].</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>desc_a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_desc_type), intent(in)</code>.</TD>
@ -89,56 +90,20 @@ made by the user through the routines <code>init</code> and <code>set</code>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The communication descriptor of <code>a</code>. See the PSBLAS User's Guide for
details [<A
HREF="node28.html#PSBLASGUIDE">16</A>].</TD>
HREF="node27.html#PSBLASGUIDE">17</A>].</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node26.html#sec:errors">8</A> for details.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node25.html#sec:errors">8</A> for details.</TD>
</TR>
</TABLE>
<P>
For compatibility with the previous versions of MLD2P4, this routine can be also invoked
as follows:
<P>
<DIV ALIGN="CENTER">
<code>call mld_precbld(p,what,val,info)</code>
</DIV>
<P>
In this case, the routine can be used to build multi-level preconditioners too.
<P>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html315"
HREF="node20.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html311"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html305"
HREF="node18.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html313"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html316"
HREF="node20.html">Subroutine hierarchy_bld</A>
<B> Up:</B> <A NAME="tex2html312"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html306"
HREF="node18.html">Subroutine set</A>
&nbsp; <B> <A NAME="tex2html314"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
<BR><HR>
</BODY>
</HTML>

@ -26,21 +26,21 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html75"
<A NAME="tex2html73"
HREF="node3.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html73"
<A NAME="tex2html71"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html67"
<A NAME="tex2html65"
HREF="node1.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html76"
<B> Next:</B> <A NAME="tex2html74"
HREF="node3.html">General Overview</A>
<B> Up:</B> <A NAME="tex2html74"
<B> Up:</B> <A NAME="tex2html72"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html68"
<B> Previous:</B> <A NAME="tex2html66"
HREF="node1.html">Abstract</A>
<BR>
<BR>
@ -53,70 +53,68 @@ Contents</A>
<!--Table of Contents-->
<UL>
<LI><A NAME="tex2html77"
<LI><A NAME="tex2html75"
HREF="node3.html">General Overview</A>
<LI><A NAME="tex2html78"
<LI><A NAME="tex2html76"
HREF="node4.html">Code Distribution</A>
<LI><A NAME="tex2html79"
<LI><A NAME="tex2html77"
HREF="node5.html">Configuring and Building MLD2P4</A>
<UL>
<LI><A NAME="tex2html80"
<LI><A NAME="tex2html78"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html81"
<LI><A NAME="tex2html79"
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html82"
<LI><A NAME="tex2html80"
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html83"
<LI><A NAME="tex2html81"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html84"
<LI><A NAME="tex2html82"
HREF="node10.html">Example and test programs</A>
</UL>
<BR>
<LI><A NAME="tex2html83"
HREF="node11.html">Multigrid Background</A>
<UL>
<LI><A NAME="tex2html84"
HREF="node12.html">AMG preconditioners</A>
</UL>
<BR>
<LI><A NAME="tex2html85"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
HREF="node13.html">Getting Started</A>
<UL>
<LI><A NAME="tex2html86"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html87"
HREF="node13.html">Smoothed Aggregation</A>
HREF="node14.html">Examples</A>
</UL>
<BR>
<LI><A NAME="tex2html88"
HREF="node14.html">Getting Started</A>
<LI><A NAME="tex2html87"
HREF="node15.html">User Interface</A>
<UL>
<LI><A NAME="tex2html88"
HREF="node16.html">Subroutine init</A>
<LI><A NAME="tex2html89"
HREF="node15.html">Examples</A>
</UL>
<BR>
HREF="node17.html">Subroutine set</A>
<LI><A NAME="tex2html90"
HREF="node16.html">User Interface</A>
<UL>
HREF="node18.html">Subroutine build</A>
<LI><A NAME="tex2html91"
HREF="node17.html">Subroutine init</A>
HREF="node19.html">Subroutine hierarchy_build</A>
<LI><A NAME="tex2html92"
HREF="node18.html">Subroutine set</A>
HREF="node20.html">Subroutine smoothers_build</A>
<LI><A NAME="tex2html93"
HREF="node19.html">Subroutine bld</A>
HREF="node21.html">Subroutine apply</A>
<LI><A NAME="tex2html94"
HREF="node20.html">Subroutine hierarchy_bld</A>
HREF="node22.html">Subroutine free</A>
<LI><A NAME="tex2html95"
HREF="node21.html">Subroutine smoothers_bld</A>
HREF="node23.html">Subroutine descr</A>
</UL>
<BR>
<LI><A NAME="tex2html96"
HREF="node22.html">Subroutine apply</A>
HREF="node24.html">Adding smoothers and solvers to MLD2P4</A>
<LI><A NAME="tex2html97"
HREF="node23.html">Subroutine free</A>
HREF="node25.html">Error Handling</A>
<LI><A NAME="tex2html98"
HREF="node24.html">Subroutine descr</A>
</UL>
<BR>
HREF="node26.html">License</A>
<LI><A NAME="tex2html99"
HREF="node25.html">Adding smoothers and solvers to MLD2P4</A>
<LI><A NAME="tex2html100"
HREF="node26.html">Error Handling</A>
<LI><A NAME="tex2html101"
HREF="node27.html">License</A>
<LI><A NAME="tex2html102"
HREF="node28.html">Bibliography</A>
HREF="node27.html">Bibliography</A>
</UL>
<!--End of Table of Contents-->

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Subroutine hierarchy_bld</TITLE>
<META NAME="description" CONTENT="Subroutine hierarchy_bld">
<TITLE>Subroutine smoothers_build</TITLE>
<META NAME="description" CONTENT="Subroutine smoothers_build">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -20,52 +20,54 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="next" HREF="node21.html">
<LINK REL="previous" HREF="node19.html">
<LINK REL="up" HREF="node16.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node21.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html327"
<A NAME="tex2html323"
HREF="node21.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html323"
HREF="node16.html">
<A NAME="tex2html319"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html317"
<A NAME="tex2html313"
HREF="node19.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html325"
<A NAME="tex2html321"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html328"
HREF="node21.html">Subroutine smoothers_bld</A>
<B> Up:</B> <A NAME="tex2html324"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html318"
HREF="node19.html">Subroutine bld</A>
&nbsp; <B> <A NAME="tex2html326"
<B> Next:</B> <A NAME="tex2html324"
HREF="node21.html">Subroutine apply</A>
<B> Up:</B> <A NAME="tex2html320"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html314"
HREF="node19.html">Subroutine hierarchy_build</A>
&nbsp; <B> <A NAME="tex2html322"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00084000000000000000"></A><A NAME="sec:hier_bld"></A>
<H2><A NAME="SECTION00085000000000000000"></A><A NAME="sec:smooth_bld"></A>
<BR>
Subroutine hierarchy_bld
Subroutine smoothers_build
</H2>
<P>
<DIV ALIGN="CENTER">
<code>call p%hierarchy_bld(a,desc_a,info)</code>
<code>call p%smoothers_build(a,desc_a,p,info)</code>
<BR>
</DIV>
<P>
This routine builds the hierarchy of matrices and restriction/prolongation
operators for the multi-level preconditioner <code>p</code>, according to the requirements
made by the user through the routines <code>init</code> and <code>set</code>.
This routine builds the smoothers and the coarsest-level solvers for the
multi-level preconditioner <code>p</code>, according to the requirements made by
the user through the routines <code>init</code> and <code>set</code>, and based on the aggregation
hierarchy produced by a previous call to <code>hierarchy_build</code>
(see Section&nbsp;<A HREF="node19.html#sec:hier_bld">6.4</A>).
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
@ -79,10 +81,9 @@ made by the user through the routines <code>init</code> and <code>set</code>.
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that <I>x</I> 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 [<A
HREF="node28.html#PSBLASGUIDE">16</A>].</TD>
HREF="node27.html#PSBLASGUIDE">17</A>].</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>desc_a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_desc_type), intent(in)</code>.</TD>
@ -90,19 +91,18 @@ single/double precision version of MLD2P4 under use.
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The communication descriptor of <code>a</code>. See the PSBLAS User's Guide for
details [<A
HREF="node28.html#PSBLASGUIDE">16</A>].</TD>
HREF="node27.html#PSBLASGUIDE">17</A>].</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node26.html#sec:errors">8</A> for details.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node25.html#sec:errors">8</A> for details.</TD>
</TR>
</TABLE>
<P>
<P>
<BR><HR>
</BODY>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Subroutine smoothers_bld</TITLE>
<META NAME="description" CONTENT="Subroutine smoothers_bld">
<TITLE>Subroutine apply</TITLE>
<META NAME="description" CONTENT="Subroutine apply">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -20,54 +20,68 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="next" HREF="node22.html">
<LINK REL="previous" HREF="node20.html">
<LINK REL="up" HREF="node16.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node22.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html339"
<A NAME="tex2html335"
HREF="node22.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html335"
HREF="node16.html">
<A NAME="tex2html331"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html329"
<A NAME="tex2html325"
HREF="node20.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html337"
<A NAME="tex2html333"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html340"
HREF="node22.html">Subroutine apply</A>
<B> Up:</B> <A NAME="tex2html336"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html330"
HREF="node20.html">Subroutine hierarchy_bld</A>
&nbsp; <B> <A NAME="tex2html338"
<B> Next:</B> <A NAME="tex2html336"
HREF="node22.html">Subroutine free</A>
<B> Up:</B> <A NAME="tex2html332"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html326"
HREF="node20.html">Subroutine smoothers_build</A>
&nbsp; <B> <A NAME="tex2html334"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00085000000000000000"></A><A NAME="sec:smoothers_bld"></A>
<H2><A NAME="SECTION00086000000000000000"></A><A NAME="sec:precapply"></A>
<BR>
Subroutine smoothers_bld
Subroutine apply
</H2>
<P>
<DIV ALIGN="CENTER">
<code>call p%smoothers_bld(a,desc_a,p,info)</code>
<code>call p%apply(x,y,desc_a,info [,trans,work])</code>
<BR>
</DIV>
<P>
This routine builds the smoothers and the coarsest-level solvers for the
multi-level preconditioner <code>p</code>, according to the requirements made by
the user through the routines <code>init</code> and <code>set</code>, and based on the aggregation
hierarchy produced by a previous call to <code>hierarchy_bld</code>
(see Section&nbsp;<A HREF="node20.html#sec:hier_bld">6.4</A>).
This routine computes <!-- MATH
$y = op(M^{-1})\, x$
-->
<IMG
WIDTH="117" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img34.png"
ALT="$y = op(M^{-1}) x$">, where <IMG
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img35.png"
ALT="$M$"> is a previously built
preconditioner, stored into <code>p</code>, and <IMG
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img36.png"
ALT="$op$">
denotes the preconditioner itself or its transpose, according to
the value of <code>trans</code>.
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
<code>p%apply</code> is called within the PSBLAS routine <code>psb_krylov</code>
and hence it is completely transparent to the user.
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
@ -75,35 +89,122 @@ hierarchy produced by a previous call to <code>hierarchy_bld</code>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_</code><I>x</I><code>spmat_type), intent(in)</code>.</TD>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>x</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img37.png"
ALT="$x$">. Note that <I>type</I> and
<I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>y</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that <I>x</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.
See the PSBLAS User's Guide for details [<A
HREF="node28.html#PSBLASGUIDE">16</A>].</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
WIDTH="14" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img38.png"
ALT="$y$">. Note that <I>type</I> and
<I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>desc_a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_desc_type), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The communication descriptor of <code>a</code>. See the PSBLAS User's Guide for
details [<A
HREF="node28.html#PSBLASGUIDE">16</A>].</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The communication descriptor associated to the matrix to be
preconditioned.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node26.html#sec:errors">8</A> for details.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node25.html#sec:errors">8</A> for details.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>trans</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>character(len=1), optional, intent(in).</code></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>If <code>trans</code> = <code>'N','n'</code> then <!-- MATH
$op(M^{-1}) = M^{-1}$
-->
<IMG
WIDTH="132" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img39.png"
ALT="$op(M^{-1}) = M^{-1}$">;
if <code>trans</code> = <code>'T','t'</code> then <!-- MATH
$op(M^{-1}) = M^{-T}$
-->
<IMG
WIDTH="135" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img40.png"
ALT="$op(M^{-1}) = M^{-T}$">
(transpose of <IMG
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img41.png"
ALT="$M^{-1})$">; if <code>trans</code> = <code>'C','c'</code> then <!-- MATH
$op(M^{-1}) = M^{-C}$
-->
<IMG
WIDTH="136" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img42.png"
ALT="$op(M^{-1}) = M^{-C}$">
(conjugate transpose of <IMG
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img41.png"
ALT="$M^{-1})$">.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>work</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), optional, target</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Workspace. Its size should be at
least <code>4 * psb_cd_get_local_</code> <code>cols(desc_a)</code> (see the PSBLAS User's Guide).
Note that <I>type</I> and <I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
</TABLE>
<P>
For compatibility with the previous versions of MLD2P4, this routine can be also invoked
as follows:
<P>
<DIV ALIGN="CENTER">
<code>call mld_precaply(p,what,val,info)</code>
</DIV>
<BR><HR>
<P>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html335"
HREF="node22.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html331"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html325"
HREF="node20.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html333"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html336"
HREF="node22.html">Subroutine free</A>
<B> Up:</B> <A NAME="tex2html332"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html326"
HREF="node20.html">Subroutine smoothers_build</A>
&nbsp; <B> <A NAME="tex2html334"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>
</HTML>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Subroutine apply</TITLE>
<META NAME="description" CONTENT="Subroutine apply">
<TITLE>Subroutine free</TITLE>
<META NAME="description" CONTENT="Subroutine free">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -20,68 +20,50 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="next" HREF="node23.html">
<LINK REL="previous" HREF="node21.html">
<LINK REL="up" HREF="node16.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node23.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html351"
<A NAME="tex2html347"
HREF="node23.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html347"
HREF="node16.html">
<A NAME="tex2html343"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html341"
<A NAME="tex2html337"
HREF="node21.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html349"
<A NAME="tex2html345"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html352"
HREF="node23.html">Subroutine free</A>
<B> Up:</B> <A NAME="tex2html348"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html342"
HREF="node21.html">Subroutine smoothers_bld</A>
&nbsp; <B> <A NAME="tex2html350"
<B> Next:</B> <A NAME="tex2html348"
HREF="node23.html">Subroutine descr</A>
<B> Up:</B> <A NAME="tex2html344"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html338"
HREF="node21.html">Subroutine apply</A>
&nbsp; <B> <A NAME="tex2html346"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00086000000000000000"></A><A NAME="sec:precapply"></A>
<H2><A NAME="SECTION00087000000000000000"></A><A NAME="sec:precfree"></A>
<BR>
Subroutine apply
Subroutine free
</H2>
<P>
<DIV ALIGN="CENTER">
<code>call p%apply(x,y,desc_a,info [,trans,work])</code>
<code>call p%free(p,info)</code>
<BR>
</DIV>
<P>
This routine computes <!-- MATH
$y = op(M^{-1})\, x$
-->
<IMG
WIDTH="117" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img101.png"
ALT="$y = op(M^{-1})\, x$">, where <IMG
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img60.png"
ALT="$M$"> is a previously built
preconditioner, stored into <code>p</code>, and <IMG
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img102.png"
ALT="$op$">
denotes the preconditioner itself or its transpose, according to
the value of <code>trans</code>.
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
<code>p%apply</code> is called within the PSBLAS routine <code>psb_krylov</code>
and hence it is completely transparent to the user.
This routine deallocates the preconditioner data structure <code>p</code>.
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
@ -89,82 +71,11 @@ and hence it is completely transparent to the user.
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>x</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img103.png"
ALT="$x$">. Note that <I>type</I> and
<I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>y</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
WIDTH="14" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img104.png"
ALT="$y$">. Note that <I>type</I> and
<I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>desc_a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_desc_type), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The communication descriptor associated to the matrix to be
preconditioned.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298><code>integer, intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node26.html#sec:errors">8</A> for details.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>trans</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>character(len=1), optional, intent(in).</code></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>If <code>trans</code> = <code>'N','n'</code> then <!-- MATH
$op(M^{-1}) = M^{-1}$
-->
<IMG
WIDTH="132" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img105.png"
ALT="$op(M^{-1}) = M^{-1}$">;
if <code>trans</code> = <code>'T','t'</code> then <!-- MATH
$op(M^{-1}) = M^{-T}$
-->
<IMG
WIDTH="135" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img106.png"
ALT="$op(M^{-1}) = M^{-T}$">
(transpose of <IMG
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img107.png"
ALT="$M^{-1})$">; if <code>trans</code> = <code>'C','c'</code> then <!-- MATH
$op(M^{-1}) = M^{-C}$
-->
<IMG
WIDTH="136" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img108.png"
ALT="$op(M^{-1}) = M^{-C}$">
(conjugate transpose of <IMG
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img107.png"
ALT="$M^{-1})$">.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>work</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), optional, target</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Workspace. Its size should be at
least <code>4 * psb_cd_get_local_</code> <code>cols(desc_a)</code> (see the PSBLAS User's Guide).
Note that <I>type</I> and <I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node25.html#sec:errors">8</A> for details.</TD>
</TR>
</TABLE>
@ -174,37 +85,14 @@ as follows:
<P>
<DIV ALIGN="CENTER">
<code>call mld_precaply(p,what,val,info)</code>
<code>call mld_precfree(p,info)</code>
</DIV>
<P>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html351"
HREF="node23.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html347"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html341"
HREF="node21.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html349"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html352"
HREF="node23.html">Subroutine free</A>
<B> Up:</B> <A NAME="tex2html348"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html342"
HREF="node21.html">Subroutine smoothers_bld</A>
&nbsp; <B> <A NAME="tex2html350"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
<BR><HR>
</BODY>
</HTML>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Subroutine free</TITLE>
<META NAME="description" CONTENT="Subroutine free">
<TITLE>Subroutine descr</TITLE>
<META NAME="description" CONTENT="Subroutine descr">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,52 +18,53 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node24.html">
<LINK REL="previous" HREF="node22.html">
<LINK REL="up" HREF="node16.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node24.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html363"
<A NAME="tex2html357"
HREF="node24.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html359"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html353"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html349"
HREF="node22.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html361"
<A NAME="tex2html355"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html364"
HREF="node24.html">Subroutine descr</A>
<B> Up:</B> <A NAME="tex2html360"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html354"
HREF="node22.html">Subroutine apply</A>
&nbsp; <B> <A NAME="tex2html362"
<B> Next:</B> <A NAME="tex2html358"
HREF="node24.html">Adding smoothers and solvers</A>
<B> Up:</B> <A NAME="tex2html354"
HREF="node15.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html350"
HREF="node22.html">Subroutine free</A>
&nbsp; <B> <A NAME="tex2html356"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00087000000000000000"></A><A NAME="sec:precfree"></A>
<H2><A NAME="SECTION00088000000000000000"></A><A NAME="sec:precdescr"></A>
<BR>
Subroutine free
Subroutine descr
</H2>
<P>
<DIV ALIGN="CENTER">
<code>call p%free(p,info)</code>
<code>call p%descr(info, [iout])</code>
<BR>
</DIV>
<P>
This routine deallocates the preconditioner data structure <code>p</code>.
This routine prints a description of the preconditioner <code>p</code> to the standard output or
to a file. It must be called after <code>hierachy_build</code> and <code>smoothers_build</code>,
or <code>build</code>, have been called.
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
@ -72,10 +73,17 @@ This routine deallocates the preconditioner data structure <code>p</code>.
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298><code>integer, intent(out)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node25.html#sec:errors">8</A> for details.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>iout</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(in), optional</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node26.html#sec:errors">8</A> for details.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The id of the file where the preconditioner description
will be printed; the default is the standard output.</TD>
</TR>
</TABLE>
@ -85,7 +93,7 @@ as follows:
<P>
<DIV ALIGN="CENTER">
<code>call mld_precfree(p,info)</code>
<code>call mld_precdescr(p,info [,iout])</code>
</DIV>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Subroutine descr</TITLE>
<META NAME="description" CONTENT="Subroutine descr">
<TITLE>Adding smoothers and solvers to MLD2P4</TITLE>
<META NAME="description" CONTENT="Adding smoothers and solvers to MLD2P4">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,89 +18,119 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="previous" HREF="node23.html">
<LINK REL="up" HREF="node16.html">
<LINK REL="next" HREF="node25.html">
<LINK REL="previous" HREF="node15.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node25.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html373"
<A NAME="tex2html369"
HREF="node25.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html369"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html365"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html359"
HREF="node23.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html371"
<A NAME="tex2html367"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html374"
HREF="node25.html">Adding smoothers and solvers</A>
<B> Up:</B> <A NAME="tex2html370"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html366"
HREF="node23.html">Subroutine free</A>
&nbsp; <B> <A NAME="tex2html372"
<B> Next:</B> <A NAME="tex2html370"
HREF="node25.html">Error Handling</A>
<B> Up:</B> <A NAME="tex2html366"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html360"
HREF="node23.html">Subroutine descr</A>
&nbsp; <B> <A NAME="tex2html368"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00088000000000000000"></A><A NAME="sec:precdescr"></A>
<H1><A NAME="SECTION00090000000000000000"></A><A NAME="sec:adding"></A>
<BR>
Subroutine descr
</H2>
Adding smoothers and solvers to MLD2P4
</H1>
<P>
<DIV ALIGN="CENTER">
<code>call p%descr(info, [iout])</code>
<B>Da ampliare e completare - SALVATORE.</B>
<BR>
</DIV>
<P>
This routine prints a description of the preconditioner <code>p</code> to the standard output or
to a file. It must be called after <code>hierachy_bld</code> and <code>smoothers_bld</code>,
or <code>bld</code>, have been called.
Completely new smoother and/or solver classes derived from the
base objects in the library may be used without recompiling the
library itself. Once the new smoother/solver class has been
developed, the user can declare a variable of that new type in the
application, and pass that variable to the <code>p%set(solver,info)</code>
call; the new solver object is then dynamically included in the
preconditioner structure.
<P>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P></P>
<BR>
<P>
If the user has developed a new type of smoother and/or
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:
<DIV ALIGN="CENTER">
<code>call p%set(smoother,info [,ilev, ilmax,pos])</code>
<BR><code>call p%set(solver,info [,ilev, ilmax,pos])</code>
</DIV>
In this way, the variable will act as a <I>mold</I> to which the
preconditioner will conform, even though the MLD2P4 library is not
modified, and thus has no direct knowledge about the new type.
<P>
<BR>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(out)</code>.</TD>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>smoother</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>class(mld_x_base_smoother_type)</code></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Error code. If no error, 0 is returned. See Section&nbsp;<A HREF="node26.html#sec:errors">8</A> for details.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The user-defined new smoother to be employed in the
preconditioner.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>iout</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(in), optional</code>.</TD>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>solver</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>class(mld_x_base_solver_type)</code></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The id of the file where the preconditioner description
will be printed; the default is the standard output.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The user-defined new solver to be employed in the
preconditioner.</TD>
</TR>
</TABLE>
<P>
For compatibility with the previous versions of MLD2P4, this routine can be also invoked
as follows:
<P>
<DIV ALIGN="CENTER">
<code>call mld_precdescr(p,info [,iout])</code>
</DIV>
<P>
<P>
<BR><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html369"
HREF="node25.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html365"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html359"
HREF="node23.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html367"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html370"
HREF="node25.html">Error Handling</A>
<B> Up:</B> <A NAME="tex2html366"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html360"
HREF="node23.html">Subroutine descr</A>
&nbsp; <B> <A NAME="tex2html368"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>
</HTML>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Adding smoothers and solvers to MLD2P4</TITLE>
<META NAME="description" CONTENT="Adding smoothers and solvers to MLD2P4">
<TITLE>Error Handling</TITLE>
<META NAME="description" CONTENT="Error Handling">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -19,118 +19,60 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node26.html">
<LINK REL="previous" HREF="node16.html">
<LINK REL="previous" HREF="node24.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node26.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html385"
<A NAME="tex2html381"
HREF="node26.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html381"
<A NAME="tex2html377"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html375"
<A NAME="tex2html371"
HREF="node24.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html383"
<A NAME="tex2html379"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html386"
HREF="node26.html">Error Handling</A>
<B> Up:</B> <A NAME="tex2html382"
<B> Next:</B> <A NAME="tex2html382"
HREF="node26.html">License</A>
<B> Up:</B> <A NAME="tex2html378"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html376"
HREF="node24.html">Subroutine descr</A>
&nbsp; <B> <A NAME="tex2html384"
<B> Previous:</B> <A NAME="tex2html372"
HREF="node24.html">Adding smoothers and solvers</A>
&nbsp; <B> <A NAME="tex2html380"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00090000000000000000"></A><A NAME="sec:adding"></A>
<H1><A NAME="SECTION000100000000000000000"></A><A NAME="sec:errors"></A>
<BR>
Adding smoothers and solvers to MLD2P4
Error Handling
</H1>
<P>
<B>Da ampliare e completare - SALVATORE.</B>
<BR>
<P>
Completely new smoother and/or solver classes derived from the
base objects in the library may be used without recompiling the
library itself. Once the new smoother/solver class has been
developed, the user can declare a variable of that new type in the
application, and pass that variable to the <code>p%set(solver,info)</code>
call; the new solver object is then dynamically included in the
preconditioner structure.
The error handling in MLD2P4 is based on the PSBLAS (version 2) error
handling. Error conditions are signaled via an integer argument
<code>info</code>; whenever an error condition is detected, an error trace
stack is built by the library up to the top-level, user-callable
routine. This routine will then decide, according to the user
preferences, whether the error should be handled by terminating the
program or by returning the error condition to the user code, which
will then take action, and whether
an error message should be printed. These options may be set by using
the PSBLAS error handling routines; for further details see the PSBLAS
User's Guide [<A
HREF="node27.html#PSBLASGUIDE">17</A>].
<P>
<BR>
<P>
If the user has developed a new type of smoother and/or
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:
<DIV ALIGN="CENTER">
<code>call p%set(smoother,info [,ilev, ilmax,pos])</code>
<BR><code>call p%set(solver,info [,ilev, ilmax,pos])</code>
</DIV>
In this way, the variable will act as a <I>mold</I> to which the
preconditioner will conform, even though the MLD2P4 library is not
modified, and thus has no direct knowledge about the new type.
<P>
<BR>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>smoother</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>class(mld_x_base_smoother_type)</code></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The user-defined new smoother to be employed in the
preconditioner.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>solver</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>class(mld_x_base_solver_type)</code></TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The user-defined new solver to be employed in the
preconditioner.</TD>
</TR>
</TABLE>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html385"
HREF="node26.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html381"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html375"
HREF="node24.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html383"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html386"
HREF="node26.html">Error Handling</A>
<B> Up:</B> <A NAME="tex2html382"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html376"
HREF="node24.html">Subroutine descr</A>
&nbsp; <B> <A NAME="tex2html384"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
<BR><HR>
</BODY>
</HTML>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Error Handling</TITLE>
<META NAME="description" CONTENT="Error Handling">
<TITLE>License</TITLE>
<META NAME="description" CONTENT="License">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -26,51 +26,77 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html397"
<A NAME="tex2html393"
HREF="node27.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html393"
<A NAME="tex2html389"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html387"
<A NAME="tex2html383"
HREF="node25.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html395"
<A NAME="tex2html391"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html398"
HREF="node27.html">License</A>
<B> Up:</B> <A NAME="tex2html394"
<B> Next:</B> <A NAME="tex2html394"
HREF="node27.html">Bibliography</A>
<B> Up:</B> <A NAME="tex2html390"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html388"
HREF="node25.html">Adding smoothers and solvers</A>
&nbsp; <B> <A NAME="tex2html396"
<B> Previous:</B> <A NAME="tex2html384"
HREF="node25.html">Error Handling</A>
&nbsp; <B> <A NAME="tex2html392"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION000100000000000000000"></A><A NAME="sec:errors"></A>
<H1><A NAME="SECTION000110000000000000000"></A><A NAME="sec:license"></A>
<BR>
Error Handling
License
</H1>
<P>
The error handling in MLD2P4 is based on the PSBLAS (version 2) error
handling. Error conditions are signaled via an integer argument
<code>info</code>; whenever an error condition is detected, an error trace
stack is built by the library up to the top-level, user-callable
routine. This routine will then decide, according to the user
preferences, whether the error should be handled by terminating the
program or by returning the error condition to the user code, which
will then take action, and whether
an error message should be printed. These options may be set by using
the PSBLAS error handling routines; for further details see the PSBLAS
User's Guide [<A
HREF="node28.html#PSBLASGUIDE">16</A>].
The MLD2P4 is freely distributable under the following copyright
terms: <PRE>
<P>
MLD2P4 version 2.1
MultiLevel Domain Decomposition Parallel Preconditioners Package
based on PSBLAS (Parallel Sparse BLAS version 3.4)
(C) Copyright 2008, 2010, 2012, 2017
Salvatore Filippone Cranfield University, Cranfield, UK
Ambra Abdullahi Hassan University of Rome Tor Vergata, Rome, IT
Alfredo Buttari CNRS-IRIT, Toulouse, FR
Pasqua D'Ambra IAC-CNR, Naples, IT
Daniela di Serafino University of Campania L. Vanvitelli, Caserta, IT
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions, and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the MLD2P4 group or the names of its contributors may
not be used to endorse or promote products derived from this
software without specific written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
</PRE>
<BR><HR>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>License</TITLE>
<META NAME="description" CONTENT="License">
<TITLE>Bibliography</TITLE>
<META NAME="description" CONTENT="Bibliography">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -26,79 +26,167 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html409"
<A NAME="tex2html405"
HREF="node28.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html405"
<A NAME="tex2html401"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html399"
<A NAME="tex2html395"
HREF="node26.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html407"
<A NAME="tex2html403"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html410"
HREF="node28.html">Bibliography</A>
<B> Up:</B> <A NAME="tex2html406"
<B> Next:</B> <A NAME="tex2html406"
HREF="node28.html">About this document ...</A>
<B> Up:</B> <A NAME="tex2html402"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html400"
HREF="node26.html">Error Handling</A>
&nbsp; <B> <A NAME="tex2html408"
<B> Previous:</B> <A NAME="tex2html396"
HREF="node26.html">License</A>
&nbsp; <B> <A NAME="tex2html404"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<BR><BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION000110000000000000000"></A><A NAME="sec:license"></A>
<BR>
License
</H1>
<P>
The MLD2P4 is freely distributable under the following copyright
terms: <PRE>
MLD2P4 version 2.1
MultiLevel Domain Decomposition Parallel Preconditioners Package
based on PSBLAS (Parallel Sparse BLAS version 3.4)
(C) Copyright 2008, 2010, 2012, 2017
Salvatore Filippone Cranfield University
Ambra Abdullahi Hassan University of Rome Tor Vergata
Alfredo Buttari CNRS-IRIT, Toulouse
Pasqua D'Ambra ICAR-CNR, Naples
Daniela di Serafino Second University of Naples
<H2><A NAME="SECTION000120000000000000000">
Bibliography</A>
</H2><DL COMPACT><DD>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions, and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the MLD2P4 group or the names of its contributors may
not be used to endorse or promote products derived from this
software without specific written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
</PRE>
<P>
<P></P><DT><A NAME="BREZINA_VANEK">1</A>
<DD>
M.&nbsp;Brezina, P.&nbsp;Vanek,
<EM>A Black-Box Iterative Solver Based on a Two-Level Schwarz Method</EM>,
Computing, 63, 1999, 233-263. <P></P><DT><A NAME="Briggs2000">2</A>
<DD>
W.&nbsp;L.&nbsp;Briggs, V.&nbsp;E.&nbsp;Henson, S.&nbsp;F.&nbsp; McCormick,
<EM>A Multigrid Tutorial, Second Edition</EM>,
SIAM, 2000. <P></P><DT><A NAME="para_04">3</A>
<DD>
A.&nbsp;Buttari, P.&nbsp;D'Ambra, D.&nbsp;di Serafino, S.&nbsp;Filippone,
<EM>Extending PSBLAS to Build Parallel Schwarz Preconditioners</EM>,
in J.&nbsp;Dongarra, K.&nbsp;Madsen, J.&nbsp;Wasniewski, editors,
Proceedings of PARA&nbsp;04 Workshop on State of the Art
in Scientific Computing, Lecture Notes in Computer Science,
Springer, 2005, 593-602. <P></P><DT><A NAME="aaecc_07">4</A>
<DD>
A.&nbsp;Buttari, P.&nbsp;D'Ambra, D.&nbsp;di&nbsp;Serafino, S.&nbsp;Filippone,
<EM>2LEV-D2P4: a package of high-performance preconditioners
for scientific and engineering applications</EM>,
Applicable Algebra in Engineering, Communications and Computing,
18 (3) 2007, 223-239. <P></P><DT><A NAME="apnum_07">5</A>
<DD> P.&nbsp;D'Ambra, S.&nbsp;Filippone, D.&nbsp;di&nbsp;Serafino,
<EM>On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners</EM>,
Applied Numerical Mathematics, Elsevier Science,
57 (11-12), 2007, 1181-1196. <P></P><DT><A NAME="CAI_SARKIS">6</A>
<DD>
X.&nbsp;C.&nbsp;Cai, M.&nbsp;Sarkis,
<EM>A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems</EM>,
SIAM Journal on Scientific Computing, 21 (2), 1999, 792-797. <P></P><DT><A NAME="Cai_Widlund_92">7</A>
<DD>
X.&nbsp;C.&nbsp;Cai, O.&nbsp;B.&nbsp;Widlund,
<EM>Domain Decomposition Algorithms for Indefinite Elliptic Problems</EM>,
SIAM Journal on Scientific and Statistical Computing, 13 (1), 1992, 243-258. <P></P><DT><A NAME="dd1_94">8</A>
<DD>
T.&nbsp;Chan and T.&nbsp;Mathew,
<EM>Domain Decomposition Algorithms</EM>,
in A.&nbsp;Iserles, editor, Acta Numerica 1994, 61-143.
Cambridge University Press. <P></P><DT><A NAME="MLD2P4_TOMS">9</A>
<DD>
P.&nbsp;D'Ambra, D.&nbsp;di&nbsp;Serafino, S.&nbsp;Filippone,
<I>MLD2P4: a Package of Parallel Multilevel
Algebraic Domain Decomposition Preconditioners
in Fortran 95</I>, ACM Trans. Math. Softw., 37(3), 2010, art. 30. <P></P><DT><A NAME="UMFPACK">10</A>
<DD>
T.A.&nbsp;Davis,
<EM>Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
Method with a Column Pre-ordering Strategy</EM>,
ACM Transactions on Mathematical Software, 30, 2004, 196-199.
(See also <TT>http://www.cise.ufl.edu/&nbsp;davis/</TT>) <P></P><DT><A NAME="MUMPS">11</A>
<DD>
P.R.&nbsp;Amestoy, C.&nbsp;Ashcraft, O.&nbsp;Boiteau, A.&nbsp;Buttari, J.&nbsp;L'Excellent, C.&nbsp;Weisbecker
<EM>Improving multifrontal methods by means of block low-rank representations</EM>,
SIAM Journal on Scientific Computing, volume 37 (3), 2015, A1452-A1474.
See also <TT>http://mumps.enseeiht.fr</TT>. <P></P><DT><A NAME="SUPERLU">12</A>
<DD>
J.W.&nbsp;Demmel, S.C.&nbsp;Eisenstat, J.R.&nbsp;Gilbert, X.S.&nbsp;Li and J.W.H.&nbsp;Liu,
A supernodal approach to sparse partial pivoting,
SIAM Journal on Matrix Analysis and Applications, 20 (3), 1999, 720-755. <P></P><DT><A NAME="blas3">13</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra, J.&nbsp;Du Croz, I.&nbsp;S.&nbsp;Duff, S.&nbsp;Hammarling,
<I>A set of Level 3 Basic Linear Algebra Subprograms</I>,
ACM Transactions on Mathematical Software, 16 (1) 1990, 1-17. <P></P><DT><A NAME="blas2">14</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra, J.&nbsp;Du Croz, S.&nbsp;Hammarling, R.&nbsp;J.&nbsp;Hanson,
<I>An extended set of FORTRAN Basic Linear Algebra Subprograms</I>,
ACM Transactions on Mathematical Software, 14 (1) 1988, 1-17. <P></P><DT><A NAME="BLACS">15</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra and R.&nbsp;C.&nbsp;Whaley,
<EM>A User's Guide to the BLACS v.&nbsp;1.1</EM>,
Lapack Working Note 94, Tech. Rep. UT-CS-95-281, University of
Tennessee, March 1995 (updated May 1997). <P></P><DT><A NAME="EFSTATHIOU">16</A>
<DD>
E.&nbsp;Efstathiou, J.&nbsp;G.&nbsp;Gander,
<EM>Why Restricted Additive Schwarz Converges Faster than Additive Schwarz</EM>,
BIT Numerical Mathematics, 43 (5), 2003, 945-959. <P></P><DT><A NAME="PSBLASGUIDE">17</A>
<DD>
S.&nbsp;Filippone, A.&nbsp;Buttari,
<EM>PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library</EM>, 2012,
available from <TT>http://www.ce.uniroma2.it/psblas/</TT>. <P></P><DT><A NAME="PSBLAS3">18</A>
<DD>
Salvatore Filippone and Alfredo Buttari.
<EM>Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003</EM>.
ACM Transactions on on Mathematical Software, 38 (4), 2012, art. 23. <P></P><DT><A NAME="psblas_00">19</A>
<DD>
S.&nbsp;Filippone, M.&nbsp;Colajanni,
<EM>PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices</EM>,
ACM Transactions on Mathematical Software, 26 (4), 2000, 527-550. <P></P><DT><A NAME="MPI2">20</A>
<DD>
W.&nbsp;Gropp, S.&nbsp;Huss-Lederman, A.&nbsp;Lumsdaine, E.&nbsp;Lusk, B.&nbsp;Nitzberg, W.&nbsp;Saphir, M.&nbsp;Snir,
<EM>MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions</EM>,
MIT Press, 1998. <P></P><DT><A NAME="blas1">21</A>
<DD>
C.&nbsp;L.&nbsp;Lawson, R.&nbsp;J.&nbsp;Hanson, D.&nbsp;Kincaid, F.&nbsp;T.&nbsp;Krogh,
<I>Basic Linear Algebra Subprograms for FORTRAN usage</I>,
ACM Transactions on Mathematical Software, 5 (3), 1979, 308-323. <P></P><DT><A NAME="SUPERLUDIST">22</A>
<DD>
X.&nbsp;S.&nbsp;Li, J.&nbsp;W.&nbsp;Demmel, <EM>SuperLU_DIST: A Scalable Distributed-memory
Sparse Direct Solver for Unsymmetric Linear Systems</EM>,
ACM Transactions on Mathematical Software, 29 (2), 2003, 110-140. <P></P><DT><A NAME="Notay2008">23</A>
<DD>
Y.&nbsp;Notay, P.&nbsp;S.&nbsp;Vassilevski, <EM>Recursive Krylov-based multigrid cycles</EM>,
Numerical Linear Algebra with Applications, 15 (5), 2008, 473-487. <P></P><DT><A NAME="Saad_book">24</A>
<DD>
Y.&nbsp;Saad,
<EM>Iterative methods for sparse linear systems</EM>, 2nd edition, SIAM, 2003. <P></P><DT><A NAME="dd2_96">25</A>
<DD>
B.&nbsp;Smith, P.&nbsp;Bjorstad, W.&nbsp;Gropp,
<EM>Domain Decomposition: Parallel Multilevel Methods for Elliptic
Partial Differential Equations</EM>,
Cambridge University Press, 1996. <P></P><DT><A NAME="MPI1">26</A>
<DD>
M.&nbsp;Snir, S.&nbsp;Otto, S.&nbsp;Huss-Lederman, D.&nbsp;Walker, J.&nbsp;Dongarra,
<EM>MPI: The Complete Reference. Volume 1 - The MPI Core</EM>, second edition,
MIT Press, 1998. <P></P><DT><A NAME="Stuben_01">27</A>
<DD>
K.&nbsp;St&#252;ben,
<EM>An Introduction to Algebraic Multigrid</EM>,
in A.&nbsp;Sch&#252;ller, U.&nbsp;Trottenberg, C.&nbsp;Oosterlee, Multigrid,
Academic Press, 2001. <P></P><DT><A NAME="TUMINARO_TONG">28</A>
<DD>
R.&nbsp;S.&nbsp;Tuminaro, C.&nbsp;Tong,
<EM>Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines</EM>, in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000. <P></P><DT><A NAME="VANEK_MANDEL_BREZINA">29</A>
<DD>
P.&nbsp;Vanek, J.&nbsp;Mandel and M.&nbsp;Brezina,
<EM>Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems</EM>,
Computing, 56 (3) 1996, 179-196.
<P>
</DL>
<P>
<BR><HR>
</BODY>

@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Bibliography</TITLE>
<META NAME="description" CONTENT="Bibliography">
<TITLE>About this document ...</TITLE>
<META NAME="description" CONTENT="About this document ...">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
@ -18,186 +18,52 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node29.html">
<LINK REL="previous" HREF="node27.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node29.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html421"
HREF="node29.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html417"
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png">
<A NAME="tex2html411"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html411"
<A NAME="tex2html407"
HREF="node27.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html419"
<A NAME="tex2html413"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html422"
HREF="node29.html">About this document ...</A>
<B> Up:</B> <A NAME="tex2html418"
<B> Up:</B> <A NAME="tex2html412"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html412"
HREF="node27.html">License</A>
&nbsp; <B> <A NAME="tex2html420"
<B> Previous:</B> <A NAME="tex2html408"
HREF="node27.html">Bibliography</A>
&nbsp; <B> <A NAME="tex2html414"
HREF="node2.html">Contents</A></B>
<BR><BR>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION000120000000000000000">
Bibliography</A>
</H2><DL COMPACT><DD>
<H1><A NAME="SECTION000130000000000000000">
About this document ...</A>
</H1>
<P>
This document was generated using the
<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2012 (1.2)
<P>
<P></P><DT><A NAME="BREZINA_VANEK">1</A>
<DD>
M.&nbsp;Brezina, P.&nbsp;Vanek,
<EM>A Black-Box Iterative Solver Based on a Two-Level Schwarz Method</EM>,
Computing, 63, 1999, 233-263.<P></P><DT><A NAME="para_04">2</A>
<DD>
A.&nbsp;Buttari, P.&nbsp;D'Ambra, D.&nbsp;di Serafino, S.&nbsp;Filippone,
<EM>Extending PSBLAS to Build Parallel Schwarz Preconditioners</EM>,
in , J.&nbsp;Dongarra, K.&nbsp;Madsen, J.&nbsp;Wasniewski, editors,
Proceedings of PARA&nbsp;04 Workshop on State of the Art
in Scientific Computing, Lecture Notes in Computer Science,
Springer, 2005, 593-602.<P></P><DT><A NAME="aaecc_07">3</A>
<DD>
A.&nbsp;Buttari, P.&nbsp;D'Ambra, D.&nbsp;di&nbsp;Serafino, S.&nbsp;Filippone,
<EM>2LEV-D2P4: a package of high-performance preconditioners
for scientific and engineering applications</EM>,
Applicable Algebra in Engineering, Communications and Computing,
18, 3, 2007, 223-239.<P></P><DT><A NAME="apnum_07">4</A>
<DD> P.&nbsp;D'Ambra, S.&nbsp;Filippone, D.&nbsp;di&nbsp;Serafino,
<EM>On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners</EM>,
Applied Numerical Mathematics, Elsevier Science,
57, 11-12, 2007, 1181-1196.
<P>
<P></P><DT><A NAME="CAI_SARKIS">5</A>
<DD>
X.&nbsp;C.&nbsp;Cai, M.&nbsp;Sarkis,
<EM>A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems</EM>,
SIAM Journal on Scientific Computing, 21, 2, 1999, 792-797.<P></P><DT><A NAME="Cai_Widlund_92">6</A>
<DD>
X.&nbsp;C.&nbsp;Cai, O.&nbsp;B.&nbsp;Widlund,
<EM>Domain Decomposition Algorithms for Indefinite Elliptic Problems</EM>,
SIAM Journal on Scientific and Statistical Computing, 13, 1, 1992, 243-258.<P></P><DT><A NAME="dd1_94">7</A>
<DD>
T.&nbsp;Chan and T.&nbsp;Mathew,
<EM>Domain Decomposition Algorithms</EM>,
in A.&nbsp;Iserles, editor, Acta Numerica 1994, 61-143.
Cambridge University Press.<P></P><DT><A NAME="MLD2P4_TOMS">8</A>
<DD>
P.&nbsp;D'Ambra, D.&nbsp;di&nbsp;Serafino, S.&nbsp;Filippone,
<I>MLD2P4: a Package of Parallel Multilevel
Algebraic Domain Decomposition Preconditioners
in Fortran 95</I>, ACM Trans. Math. Softw., 37(3), 2010.<P></P><DT><A NAME="UMFPACK">9</A>
<DD>
T.A.&nbsp;Davis,
<EM>Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
Method with a Column Pre-ordering Strategy</EM>,
ACM Transactions on Mathematical Software, 30, 2004, 196-199.
(See also <TT>http://www.cise.ufl.edu/&nbsp;davis/</TT>)
<P>
<P></P><DT><A NAME="MUMPS">10</A>
<DD>
P.R.&nbsp;Amestoy, C.&nbsp;Ashcraft, O.&nbsp;Boiteau, A.&nbsp;Buttari, J.&nbsp;L'Excellent, C.&nbsp;Weisbecker
<EM>Improving multifrontal methods by means of block low-rank representations</EM>,
SIAM SISC, volume 37, number 3, pages A1452-A1474.
(See also <TT>http://mumps.enseeiht.fr</TT>)
<P>
<P></P><DT><A NAME="SUPERLU">11</A>
<DD>
J.W.&nbsp;Demmel, S.C.&nbsp;Eisenstat, J.R.&nbsp;Gilbert, X.S.&nbsp;Li and J.W.H.&nbsp;Liu,
A supernodal approach to sparse partial pivoting,
SIAM Journal on Matrix Analysis and Applications, 20, 3, 1999, 720-755.<P></P><DT><A NAME="blas3">12</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra, J.&nbsp;Du Croz, I.&nbsp;S.&nbsp;Duff, S.&nbsp;Hammarling,
<I>A set of Level 3 Basic Linear Algebra Subprograms</I>,
ACM Transactions on Mathematical Software, 16, 1990, 1-17.<P></P><DT><A NAME="blas2">13</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra, J.&nbsp;Du Croz, S.&nbsp;Hammarling, R.&nbsp;J.&nbsp;Hanson,
<I>An extended set of FORTRAN Basic Linear Algebra Subprograms</I>,
ACM Transactions on Mathematical Software, 14, 1988, 1-17.<P></P><DT><A NAME="BLACS">14</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra and R.&nbsp;C.&nbsp;Whaley,
<EM>A User's Guide to the BLACS v.&nbsp;1.1</EM>,
Lapack Working Note 94, Tech. Rep. UT-CS-95-281, University of
Tennessee, March 1995 (updated May 1997).<P></P><DT><A NAME="EFSTATHIOU">15</A>
<DD>
E.&nbsp;Efstathiou, J.&nbsp;G.&nbsp;Gander,
<EM>Why Restricted Additive Schwarz Converges Faster than Additive Schwarz</EM>,
BIT Numerical Mathematics, 43, 2003, 945-959.<P></P><DT><A NAME="PSBLASGUIDE">16</A>
<DD>
S.&nbsp;Filippone, A.&nbsp;Buttari,
<EM>PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library</EM>, 2012,
available from <TT>http://www.ce.uniroma2.it/psblas/</TT>.
<P>
<P></P><DT><A NAME="PSBLAS3">17</A>
<DD>
Salvatore Filippone and Alfredo Buttari.
<EM>Object-Oriented Techniques for Sparse Matrix Computations in Fortran
2003.</EM>
ACM Trans. on Math Software, 38(4), 2012.
<P>
<P></P><DT><A NAME="psblas_00">18</A>
<DD>
S.&nbsp;Filippone, M.&nbsp;Colajanni,
<EM>PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices</EM>,
ACM Transactions on Mathematical Software, 26, 4, 2000, 527-550.<P></P><DT><A NAME="MPI2">19</A>
<DD>
W.&nbsp;Gropp, S.&nbsp;Huss-Lederman, A.&nbsp;Lumsdaine, E.&nbsp;Lusk, B.&nbsp;Nitzberg, W.&nbsp;Saphir, M.&nbsp;Snir,
<EM>MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions</EM>,
MIT Press, 1998.<P></P><DT><A NAME="blas1">20</A>
<DD>
C.&nbsp;L.&nbsp;Lawson, R.&nbsp;J.&nbsp;Hanson, D.&nbsp;Kincaid, F.&nbsp;T.&nbsp;Krogh,
<I>Basic Linear Algebra Subprograms for FORTRAN usage</I>,
ACM Transactions on Mathematical Software, 5, 1979, 308-323.<P></P><DT><A NAME="SUPERLUDIST">21</A>
<DD>
X.&nbsp;S.&nbsp;Li, J.&nbsp;W.&nbsp;Demmel, <EM>SuperLU_DIST: A Scalable Distributed-memory
Sparse Direct Solver for Unsymmetric Linear Systems</EM>,
ACM Transactions on Mathematical Software, 29, 2, 2003, 110-140.<P></P><DT><A NAME="Saad_book">22</A>
<DD>
Y.&nbsp;Saad,
<I>Iterative methods for sparse linear systems</I>, 2nd edition,
SIAM, 2003
<P>
<P></P><DT><A NAME="dd2_96">23</A>
<DD>
B.&nbsp;Smith, P.&nbsp;Bjorstad, W.&nbsp;Gropp,
<EM>Domain Decomposition: Parallel Multilevel Methods for Elliptic
Partial Differential Equations</EM>,
Cambridge University Press, 1996.<P></P><DT><A NAME="MPI1">24</A>
<DD>
M.&nbsp;Snir, S.&nbsp;Otto, S.&nbsp;Huss-Lederman, D.&nbsp;Walker, J.&nbsp;Dongarra,
<EM>MPI: The Complete Reference. Volume 1 - The MPI Core</EM>, second edition,
MIT Press, 1998.<P></P><DT><A NAME="Stuben_01">25</A>
<DD>
K.&nbsp;St&#252;ben,
<EM>An Introduction to Algebraic Multigrid</EM>,
in A.&nbsp;Sch&#252;ller, U.&nbsp;Trottenberg, C.&nbsp;Oosterlee, Multigrid,
Academic Press, 2001.<P></P><DT><A NAME="TUMINARO_TONG">26</A>
<DD>
R.&nbsp;S.&nbsp;Tuminaro, C.&nbsp;Tong,
<EM>Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines</EM>,
in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.<P></P><DT><A NAME="VANEK_MANDEL_BREZINA">27</A>
<DD>
P.&nbsp;Vanek, J.&nbsp;Mandel and M.&nbsp;Brezina,
<EM>Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems</EM>,
Computing, 56, 1996, 179-196.
Copyright &#169; 1993, 1994, 1995, 1996,
<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>,
Computer Based Learning Unit, University of Leeds.
<BR>
Copyright &#169; 1997, 1998, 1999,
<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
Mathematics Department, Macquarie University, Sydney.
<P>
</DL>
The command line arguments were: <BR>
<STRONG>latex2html</STRONG> <TT>-local_icons -noaddress -dir ../../html userhtml.tex</TT>
<P>
The translation was initiated by Salvatore Filippone on 2017-04-21
<BR><HR>
</BODY>

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html113"
<A NAME="tex2html110"
HREF="node4.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html109"
<A NAME="tex2html106"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html103"
<A NAME="tex2html100"
HREF="node2.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html111"
<A NAME="tex2html108"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html114"
<B> Next:</B> <A NAME="tex2html111"
HREF="node4.html">Code Distribution</A>
<B> Up:</B> <A NAME="tex2html110"
<B> Up:</B> <A NAME="tex2html107"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html104"
<B> Previous:</B> <A NAME="tex2html101"
HREF="node2.html">Contents</A>
&nbsp; <B> <A NAME="tex2html112"
&nbsp; <B> <A NAME="tex2html109"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -58,12 +58,12 @@ General Overview
<P>
The M<SMALL>ULTI-</SMALL>L<SMALL>EVEL </SMALL>D<SMALL>OMAIN </SMALL>D<SMALL>ECOMPOSITION </SMALL>P<SMALL>ARALLEL </SMALL>P<SMALL>RECONDITIONERS </SMALL>P<SMALL>ACKAGE BASED ON
</SMALL>PSBLAS (MLD2P4) provides parallel Algebraic MultiGrid (AMG) and domain decomposition
preconditioners, designed to provide scalable and easy-to-use preconditioners
multi-level Schwarz preconditioners&nbsp;[<A
HREF="node28.html#Stuben_01">25</A>,<A
HREF="node28.html#dd2_96">23</A>],
to be used in the iterative solutions of sparse linear systems:
</SMALL>PSBLAS (MLD2P4) provides parallel Algebraic MultiGrid (AMG) and Domain
Decomposition preconditioners (see, e.g., [<A
HREF="node27.html#Briggs2000">2</A>,<A
HREF="node27.html#Stuben_01">27</A>,<A
HREF="node27.html#dd2_96">25</A>]),
to be used in the iterative solution of linear systems,
<BR>
<DIV ALIGN="RIGHT">
@ -86,26 +86,37 @@ Ax=b,
where <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$"> is a square, real or complex, sparse matrix. Multi-level preconditioners can be obtained by combining several AMG cycles (V, W, K) with
different smoothers (Jacobi, hybrid forward/backward Gauss-Seidel, block-Jacobi, additive Schwarz methods).
An algebraic approach is used to
generate a hierarchy of coarse-level matrices and operators, without
explicitly using any information on the geometry of the original problem, e.g.,
the discretization of a PDE. The smoothed aggregation technique is applied
as algebraic coarsening strategy&nbsp;[<A
HREF="node28.html#BREZINA_VANEK">1</A>,<A
HREF="node28.html#VANEK_MANDEL_BREZINA">27</A>].
Either exact or approximate solvers are available to solve the coarsest-level system. Specifically,
different versions of sparse LU factorizations from external packages, and native incomplete
LU factorizations and iterative block-Jacobi solvers can be used.
All smoothers can be also exploited as one-level preconditioners.
ALT="$A$"> is a square, real or complex, sparse matrix. The name of the package comes from its original implementation, containing
multi-level additive and hybrid Schwarz preconditioners, as well as one-level additive
Schwarz preconditioners. The current version extends the original plan by including
multi-level cycles and smoothers widely used in multigrid methods.
<P>
The multi-level preconditioners implemented in MLD2P4 are obtained by combining
AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and
K-cycles&nbsp;[<A
HREF="node27.html#Briggs2000">2</A>,<A
HREF="node27.html#Notay2008">23</A>] are available, which allow to define
almost all the preconditioners in the package, including the multi-level hybrid
Schwarz ones; a specific cycle is implemented to obained multi-level additive
Schwarz preconditioners. The Jacobi, hybridforward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz methods
are available as smoothers. An algebraic approach is used to generate a hierarchy of
coarse-level matrices and operators, without explicitly using any information on the
geometry of the original problem, e.g., the discretization of a PDE. To this end,
the smoothed aggregation technique&nbsp;[<A
HREF="node27.html#BREZINA_VANEK">1</A>,<A
HREF="node27.html#VANEK_MANDEL_BREZINA">29</A>]
is applied. Either exact or approximate solvers can be used on the coarsest-level
system. Specifically, different sparse LU factorizations from external
packages, and native incomplete LU factorizations and Jacobi, hybrid Gauss-Seidel,
and block-Jacobi solvers are available. All smoothers can be also exploited as one-level
preconditioners.
<P>
MLD2P4 is written in Fortran&nbsp;2003, following an
object-oriented design through the exploitation of features
such as abstract data type creation, functional overloading, and
dynamic memory management.
The parallel implementation is based on a Single Program Multiple Data
such as abstract data type creation, type extension, functional overloading, and
dynamic memory management. The parallel implementation is based on a Single Program Multiple Data
(SPMD) paradigm. Single and
double precision implementations of MLD2P4 are available for both the
real and the complex case, which can be used through a single
@ -113,84 +124,81 @@ interface.
<P>
MLD2P4 has been designed to implement scalable and easy-to-use
multilevel preconditioners in the context of the PSBLAS
(Parallel Sparse BLAS) computational framework&nbsp;[<A
HREF="node28.html#psblas_00">18</A>,<A
HREF="node28.html#PSBLAS3">17</A>].
PSBLAS provides basic linear algebra
multilevel preconditioners in the context of the PSBLAS (Parallel Sparse BLAS)
computational framework&nbsp;[<A
HREF="node27.html#psblas_00">19</A>,<A
HREF="node27.html#PSBLAS3">18</A>]. PSBLAS provides basic linear algebra
operators and data management facilities for distributed sparse matrices,
as well as parallel Krylov solvers which can be coupled with the MLD2P4 preconditioners.
as well as parallel Krylov solvers which can be used with the MLD2P4 preconditioners.
The choice of PSBLAS has been mainly motivated by the need of having
a portable and efficient software infrastructure implementing ``de facto'' standard
parallel sparse linear algebra kernels, to pursue goals such as performance,
portability, modularity ed extensibility in the development of the preconditioner
package. On the other hand, the implementation of MLD2P4 has led to some
revisions and extentions of the original PSBLAS kernels.
The inter-process comunication required
by MLD2P4 is encapsulated into the PSBLAS routines, except few cases where
MPI&nbsp;[<A
HREF="node28.html#MPI1">24</A>] is explicitly called <B>&#201; ancora cosi???</B>. Therefore, MLD2P4 can be run on any parallel
machine where PSBLAS and MPI implementations are available.
The inter-process comunication required by MLD2P4 is encapsulated
in the PSBLAS routines;therefore, MLD2P4 can be run on any parallel machine where PSBLAS
implementations are available.
<P>
MLD2P4 has a layered and modular software architecture where three main layers can be identified.
The lower layer consists of the PSBLAS kernels, the middle one implements
MLD2P4 has a layered and modular software architecture where three main layers can be
identified. The lower layer consists of the PSBLAS kernels, the middle one implements
the construction and application phases of the preconditioners, and the upper one
provides a uniform interface to all the preconditioners.
This architecture allows for different levels of use of the package:
few black-box routines at the upper layer allow non-expert users to easily
build any preconditioner available in MLD2P4 and to apply it within a PSBLAS Krylov solver;
<B>facilities are also available that allow more expert users to extend the set of smoothers
and solvers for building new versions of preconditioners.</B>
few black-box routines at the upper layer allow all users to easily
build and apply any preconditioner available in MLD2P4;
facilities are also available allowing expert users to extend the set of smoothers
and solvers for building new versions of the preconditioners (see
Section&nbsp;<A HREF="node24.html#sec:adding">7</A>).
<P>
We note that the user interface of MLD2P4 2.1 (<B>Perche 2.1 e non 2.0???...Ricordarsi di cambiare il configure</B>)
has been extended with respect to the previous versions
in order to separate the construction
of the multi-level hierarchy from the construction of the smoothers and solvers, and to allow for more flexibility
at each level.
The software architecture described in&nbsp;[<A
HREF="node28.html#MLD2P4_TOMS">8</A>] has significantly evolved too, in order to fully exploit the
Fortran&nbsp;2003 features implemented in PSBLAS 3.
We note that the user interface of MLD2P4 2.1 has been extended with respect to the
previous versions in order to separate the construction of the multi-level hierarchy from
the construction of the smoothers and solvers, and to allow for more flexibility
at each level. The software architecture described in&nbsp;[<A
HREF="node27.html#MLD2P4_TOMS">9</A>] has significantly
evolved too, in order to fully exploit the Fortran&nbsp;2003 features implemented in PSBLAS 3.
However, compatibility with previous versions has been preserved.
<P>
This guide is organized as follows. General information on the distribution of the source code
is reported in Section&nbsp;<A HREF="node4.html#sec:distribution">2</A>, while details on the configuration
and installation of the package are given in Section&nbsp;<A HREF="node5.html#sec:building">3</A>. A short description of
the preconditioners implemented in MLD2P4 is provided
in Section&nbsp;<A HREF="node11.html#sec:background">4</A>, to help the users in choosing among them.
The basics for building and applying the preconditioners
with the Krylov solvers implemented in PSBLAS are reported in Section&nbsp;<A HREF="node14.html#sec:started">5</A>, where the
Fortran codes of a few sample programs are also shown. A reference guide for
the upper-layer routines of MLD2P4, that are the user interface, is provided
in Section&nbsp;<A HREF="node16.html#sec:userinterface">6</A>. The error handling mechanism used by the package is briefly described
in Section&nbsp;<A HREF="node26.html#sec:errors">8</A>. The copyright terms concerning the distribution and modification
of MLD2P4 are reported in Appendix&nbsp;<A HREF="node27.html#sec:license">A</A>.
This guide is organized as follows. General information on the distribution of the source
code is reported in Section&nbsp;<A HREF="node4.html#sec:distribution">2</A>, while details on the configuration
and installation of the package are given in Section&nbsp;<A HREF="node5.html#sec:building">3</A>. A short description
of the preconditioners implemented in MLD2P4 is provided in Section&nbsp;<A HREF="node11.html#sec:background">4</A>,
to help the users in choosing among them. The basics for building and applying the
preconditioners with the Krylov solvers implemented in PSBLAS are reported
in&nbsp;Section&nbsp;<A HREF="node13.html#sec:started">5</A>, where the Fortran codes of a few sample programs
are also shown. A reference guide for the user interface routines is provided
in Section&nbsp;<A HREF="node15.html#sec:userinterface">6</A>. Information on the extension of the package
through the addition of new smoothers and solvers is reported in Section&nbsp;<A HREF="node24.html#sec:adding">7</A>.
The error handling mechanism used by the package
is briefly described in Section&nbsp;<A HREF="node25.html#sec:errors">8</A>. The copyright terms concerning the
distribution and modification of MLD2P4 are reported in Appendix&nbsp;<A HREF="node26.html#sec:license">A</A>.
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html113"
<A NAME="tex2html110"
HREF="node4.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html109"
<A NAME="tex2html106"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html103"
<A NAME="tex2html100"
HREF="node2.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html111"
<A NAME="tex2html108"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html114"
<B> Next:</B> <A NAME="tex2html111"
HREF="node4.html">Code Distribution</A>
<B> Up:</B> <A NAME="tex2html110"
<B> Up:</B> <A NAME="tex2html107"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html104"
<B> Previous:</B> <A NAME="tex2html101"
HREF="node2.html">Contents</A>
&nbsp; <B> <A NAME="tex2html112"
&nbsp; <B> <A NAME="tex2html109"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html125"
<A NAME="tex2html122"
HREF="node5.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html121"
<A NAME="tex2html118"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html115"
<A NAME="tex2html112"
HREF="node3.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html123"
<A NAME="tex2html120"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html126"
<B> Next:</B> <A NAME="tex2html123"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Up:</B> <A NAME="tex2html122"
<B> Up:</B> <A NAME="tex2html119"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html116"
<B> Previous:</B> <A NAME="tex2html113"
HREF="node3.html">General Overview</A>
&nbsp; <B> <A NAME="tex2html124"
&nbsp; <B> <A NAME="tex2html121"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -67,7 +67,7 @@ where contact points for further information can be also found.
<P>
The software is available under a modified BSD license, as specified
in Appendix&nbsp;<A HREF="node27.html#sec:license">A</A>; please note that some of the optional
in Appendix&nbsp;<A HREF="node26.html#sec:license">A</A>; please note that some of the optional
third party libraries may be licensed under a different and more
stringent license, most notably the GPL, and this should be taken into
account when treating derived works.

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html137"
<A NAME="tex2html134"
HREF="node6.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html133"
<A NAME="tex2html130"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html127"
<A NAME="tex2html124"
HREF="node4.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html135"
<A NAME="tex2html132"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html138"
<B> Next:</B> <A NAME="tex2html135"
HREF="node6.html">Prerequisites</A>
<B> Up:</B> <A NAME="tex2html134"
<B> Up:</B> <A NAME="tex2html131"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html128"
<B> Previous:</B> <A NAME="tex2html125"
HREF="node4.html">Code Distribution</A>
&nbsp; <B> <A NAME="tex2html136"
&nbsp; <B> <A NAME="tex2html133"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -57,7 +57,7 @@ Configuring and Building MLD2P4
</H1>
In order to build MLD2P4 it is necessary to set up a Makefile with appropriate
values for your system; this is done by means of the <code>configure</code>
system-dependent variables; this is done by means of the <code>configure</code>
script. The distribution also includes the autoconf and automake
sources employed to generate the script, but usually this is not needed
to build the software.
@ -79,15 +79,15 @@ real and complex data, in both single and double precision.
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html139"
<LI><A NAME="tex2html136"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html140"
<LI><A NAME="tex2html137"
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html141"
<LI><A NAME="tex2html138"
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html142"
<LI><A NAME="tex2html139"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html143"
<LI><A NAME="tex2html140"
HREF="node10.html">Example and test programs</A>
</UL>
<!--End of Table of Child-Links-->

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html154"
<A NAME="tex2html151"
HREF="node7.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html150"
<A NAME="tex2html147"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html144"
<A NAME="tex2html141"
HREF="node5.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html152"
<A NAME="tex2html149"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html155"
<B> Next:</B> <A NAME="tex2html152"
HREF="node7.html">Optional third party libraries</A>
<B> Up:</B> <A NAME="tex2html151"
<B> Up:</B> <A NAME="tex2html148"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html145"
<B> Previous:</B> <A NAME="tex2html142"
HREF="node5.html">Configuring and Building MLD2P4</A>
&nbsp; <B> <A NAME="tex2html153"
&nbsp; <B> <A NAME="tex2html150"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -60,13 +60,13 @@ The following base libraries are needed:
<DL>
<DT><STRONG>BLAS</STRONG></DT>
<DD>[<A
HREF="node28.html#blas3">12</A>,<A
HREF="node28.html#blas2">13</A>,<A
HREF="node28.html#blas1">20</A>] Many vendors provide optimized versions
HREF="node27.html#blas3">13</A>,<A
HREF="node27.html#blas2">14</A>,<A
HREF="node27.html#blas1">21</A>] Many vendors provide optimized versions
of BLAS; if no vendor version is
available for a given platform, the ATLAS software
(<TT><A NAME="tex2html1"
HREF="math-atlas.sourceforge.net/">math-atlas.sourceforge.net/</A></TT>)
HREF="math-atlas.sourceforge.net">math-atlas.sourceforge.net</A></TT>)
may be employed. The reference BLAS from Netlib
(<TT><A NAME="tex2html2"
HREF="www.netlib.org/blas">www.netlib.org/blas</A></TT>) are meant to define the standard
@ -79,24 +79,24 @@ The following base libraries are needed:
experience is that configuring ATLAS for building full LAPACK does not
work in the correct way. Our advice is first to download the LAPACK tarfile from
<TT><A NAME="tex2html3"
HREF="www.netlib.org/lapac">www.netlib.org/lapac</A></TT> and install it independently of ATLAS. In this case,
HREF="www.netlib.org/lapack">www.netlib.org/lapack</A></TT> and install it independently of ATLAS. In this case,
you need to modify the OPTS and NOOPT definitions for including -fPIC compilation option
in the make.inc file of the LAPACK library.
</DD>
<DT><STRONG>MPI</STRONG></DT>
<DD>[<A
HREF="node28.html#MPI2">19</A>,<A
HREF="node28.html#MPI1">24</A>] A version of MPI is available on most
HREF="node27.html#MPI2">20</A>,<A
HREF="node27.html#MPI1">26</A>] A version of MPI is available on most
high-performance computing systems.
</DD>
<DT><STRONG>PSBLAS</STRONG></DT>
<DD>[<A
HREF="node28.html#PSBLASGUIDE">16</A>,<A
HREF="node28.html#psblas_00">18</A>] Parallel Sparse BLAS (PSBLAS) is
HREF="node27.html#PSBLASGUIDE">17</A>,<A
HREF="node27.html#psblas_00">19</A>] Parallel Sparse BLAS (PSBLAS) is
available from <TT><A NAME="tex2html4"
HREF="www.ce.uniroma2.it/psblas">www.ce.uniroma2.it/psblas</A></TT>; version
3.4.0 (or later) is required. Indeed, all the prerequisites
3.5.0 (or later) is required. Indeed, all the prerequisites
listed so far are also prerequisites of PSBLAS.
</DD>
</DL>
@ -108,26 +108,26 @@ compiler as MLD2P4.
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html154"
<A NAME="tex2html151"
HREF="node7.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html150"
<A NAME="tex2html147"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html144"
<A NAME="tex2html141"
HREF="node5.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html152"
<A NAME="tex2html149"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html155"
<B> Next:</B> <A NAME="tex2html152"
HREF="node7.html">Optional third party libraries</A>
<B> Up:</B> <A NAME="tex2html151"
<B> Up:</B> <A NAME="tex2html148"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html145"
<B> Previous:</B> <A NAME="tex2html142"
HREF="node5.html">Configuring and Building MLD2P4</A>
&nbsp; <B> <A NAME="tex2html153"
&nbsp; <B> <A NAME="tex2html150"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -26,33 +26,34 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html166"
<A NAME="tex2html163"
HREF="node8.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html162"
<A NAME="tex2html159"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html156"
<A NAME="tex2html153"
HREF="node6.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html164"
<A NAME="tex2html161"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html167"
<B> Next:</B> <A NAME="tex2html164"
HREF="node8.html">Configuration options</A>
<B> Up:</B> <A NAME="tex2html163"
<B> Up:</B> <A NAME="tex2html160"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html157"
<B> Previous:</B> <A NAME="tex2html154"
HREF="node6.html">Prerequisites</A>
&nbsp; <B> <A NAME="tex2html165"
&nbsp; <B> <A NAME="tex2html162"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00052000000000000000">
Optional third party libraries</A>
<H2><A NAME="SECTION00052000000000000000"></A><A NAME="sec:third_party"></A>
<BR>
Optional third party libraries
</H2>
<P>
@ -64,73 +65,74 @@ for multi-level preconditioners may change to reflect their presence.
<DL>
<DT><STRONG>UMFPACK</STRONG></DT>
<DD>[<A
HREF="node28.html#UMFPACK">9</A>]
HREF="node27.html#UMFPACK">10</A>]
A sparse LU factorization package included in the SuiteSparse library, available from
<TT><A NAME="tex2html5"
HREF="faculty.cse.tamu.edu/davis/suitesparse.html">faculty.cse.tamu.edu/davis/suitesparse.html</A></TT>;
it provides sequential factorization and triangular system solution for double
precision real and complex data. We tested
version 4.5.4. Note that for configuring SuiteSparse you should provide the right
path to the BLAS and LAPACK libraries in the <code>SuiteSparse_config/SuiteSparse_config.mk</code> file.
precision real and complex data. We tested version 4.5.4 of SuiteSparse.
Note that for configuring SuiteSparse you should provide the right path to the BLAS
and LAPACK libraries in the <code>SuiteSparse_config/SuiteSparse_config.mk</code> file.
</DD>
<DT><STRONG>MUMPS</STRONG></DT>
<DD>[<A
HREF="node28.html#MUMPS">10</A>]
HREF="node27.html#MUMPS">11</A>]
A sparse LU factorization package available from <TT><A NAME="tex2html6"
HREF="mumps.enseeiht.fr/">mumps.enseeiht.fr/</A></TT>;
HREF="mumps.enseeiht.fr">mumps.enseeiht.fr</A></TT>;
it provides sequential and parallel factorizations and triangular system solution
for single and double precision, real and complex data.
We tested versions 4.10.0 and version 5.0.1.
</DD>
<DT><STRONG>SuperLU</STRONG></DT>
<DD>[<A
HREF="node28.html#SUPERLU">11</A>]
HREF="node27.html#SUPERLU">12</A>]
A sparse LU factorization package available from
<TT><A NAME="tex2html7"
HREF="crd.lbl.gov/~xiaoye/SuperLU/">crd.lbl.gov/~xiaoye/SuperLU/</A></TT>; it provides sequential
factorization and triangular system solution for single and double precision,
real and complex data. We tested version 4.3 and 5.0. If you installed BLAS from
ATLAS, remember to define the BLASLIB variable in the make.inc file.
ATLAS, remember to define the BLASLIB variable in the make.inc file.
</DD>
<DT><STRONG>SuperLU_Dist</STRONG></DT>
<DD>[<A
HREF="node28.html#SUPERLUDIST">21</A>]
HREF="node27.html#SUPERLUDIST">22</A>]
A sparse LU factorization package available
from the same site as SuperLU; it provides parallel factorization and
triangular system solution for double precision real and complex data.
We tested version 3.3 and 4.2. If you installed BLAS from
ATLAS, remember to define the BLASLIB variable in the make.inc file and
to add the <code>-std=c99</code> option to the C compiler options.
Note that this library requires the ParMETIS
library for parallel graph partitioning and fill-reducing matrix ordering available from
<TT><A NAME="tex2html8"
ATLAS, remember to define the BLASLIB variable in the make.inc file and
to add the <code>-std=c99</code> option to the C compiler options.
Note that this library requires the ParMETIS
library for parallel graph partitioning and fill-reducing matrix ordering, available from
<TT><A NAME="tex2html8"
HREF="glaros.dtc.umn.edu/gkhome/metis/parmetis/overview">glaros.dtc.umn.edu/gkhome/metis/parmetis/overview</A></TT>.
</DD>
</DL>
<P>
</DD>
</DL><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html166"
<A NAME="tex2html163"
HREF="node8.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html162"
<A NAME="tex2html159"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html156"
<A NAME="tex2html153"
HREF="node6.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html164"
<A NAME="tex2html161"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html167"
<B> Next:</B> <A NAME="tex2html164"
HREF="node8.html">Configuration options</A>
<B> Up:</B> <A NAME="tex2html163"
<B> Up:</B> <A NAME="tex2html160"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html157"
<B> Previous:</B> <A NAME="tex2html154"
HREF="node6.html">Prerequisites</A>
&nbsp; <B> <A NAME="tex2html165"
&nbsp; <B> <A NAME="tex2html162"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html178"
<A NAME="tex2html175"
HREF="node9.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html174"
<A NAME="tex2html171"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html168"
<A NAME="tex2html165"
HREF="node7.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html176"
<A NAME="tex2html173"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html179"
<B> Next:</B> <A NAME="tex2html176"
HREF="node9.html">Bug reporting</A>
<B> Up:</B> <A NAME="tex2html175"
<B> Up:</B> <A NAME="tex2html172"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html169"
<B> Previous:</B> <A NAME="tex2html166"
HREF="node7.html">Optional third party libraries</A>
&nbsp; <B> <A NAME="tex2html177"
&nbsp; <B> <A NAME="tex2html174"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -56,11 +56,8 @@ Configuration options</A>
</H2>
<P>
<B>CONTROLLARE HELP DEL CONFIGURE: Versione MLD2P4, Versione PSBLAS, Influential Environmental Variables???</B>
<P>
To build MLD2P4 the first step is to use the <code>configure</code> script
in the main directory to generate the necessary makefile(s).
In order to build MLD2P4, the first step is to use the <code>configure</code> script
in the main directory to generate the necessary makefile.
<P>
As a minimal example consider the following:
@ -74,7 +71,7 @@ be specified with an <EM>absolute</EM> path).
The full set of options may be looked at by issuing the command
<code>./configure --help</code>, which produces:
<PRE>
`configure' configures MLD2P4 2.0 to adapt to many kinds of systems.
`configure' configures MLD2P4 2.1 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
@ -128,27 +125,55 @@ Fine tuning of the installation directories:
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--enable-serial Specify whether to enable a fake mpi library to run
in serial mode.
--enable-long-integers Specify usage of 64 bits integers.
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-psblas=DIR The install directory for PSBLAS, for example,
--with-psblas=/opt/packages/psblas-3.3
--with-psblas=/opt/packages/psblas-3.5
--with-psblas-incdir=DIR
Specify the directory for PSBLAS includes.
--with-psblas-libdir=DIR
Specify the directory for PSBLAS library.
--with-ccopt additional CCOPT flags to be added: will prepend
to CCOPT
--with-fcopt additional FCOPT flags to be added: will prepend
to FCOPT
--with-libs List additional link flags here. For example,
--with-libs=-lspecial_system_lib or
--with-libs=-L/path/to/libs
--with-clibs additional CLIBS flags to be added: will prepend
to CLIBS
--with-flibs additional FLIBS flags to be added: will prepend
to FLIBS
--with-library-path additional LIBRARYPATH flags to be added: will
prepend to LIBRARYPATH
--with-include-path additional INCLUDEPATH flags to be added: will
prepend to INCLUDEPATH
--with-module-path additional MODULE_PATH flags to be added: will
prepend to MODULE_PATH
--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-blas=&lt;lib&gt; use BLAS library &lt;lib&gt;
--with-blasdir=&lt;dir&gt; search for BLAS library in &lt;dir&gt;
--with-lapack=&lt;lib&gt; use LAPACK library &lt;lib&gt;
--with-mumps=LIBNAME Specify the libname for MUMPS. Default: autodetect
with minimum "-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
@ -194,24 +219,23 @@ Some influential environment variables:
CFLAGS C compiler flags
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I&lt;include dir&gt; if
you have headers in a nonstandard directory &lt;include dir&gt;
CPP C preprocessor
MPICC MPI C compiler command
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
MPIF77 MPI Fortran 77 compiler command
MPIFC MPI Fortran compiler command
CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to &lt;bugreport@mld2p4.it&gt;.
</PRE>
For instance, if a user has built and installed PSBLAS 3.4 under the
<P>
For instance, if a user has built and installed PSBLAS 3.5 under the
<code>/opt</code> directory and is
using the SuiteSparse package (which includes UMFPACK), then MLD2P4
might be configured with:
<PRE>
./configure --with-psblas=/opt/psblas-3.4/ \
./configure --with-psblas=/opt/psblas-3.5/ \
--with-umfpackincdir=/usr/include/suitesparse/
</PRE>
Once the configure script has completed execution, it will have
@ -223,7 +247,9 @@ install directory under the name <code>Make.inc.MLD2P4</code>.
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
<code>-ldmumps -lsmumps</code> <code>-lzmumps -lzmumps -mumps_common -lpord</code>.
<code>-ldmumps -lsmumps</code> <code>-lzmumps -mumps_common -lpord</code>.
<B>Pasqua, c'era due volte lzmumps. L'ho eliminato, ma poi mi e' venuto
il dubbio che il secondo lzmumps dovesse essere modificato.</B>
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 <code>--with-extra-libs</code> configure option.
@ -238,26 +264,26 @@ followed (optionally) by
make install
</PRE><HR>
<!--Navigation Panel-->
<A NAME="tex2html178"
<A NAME="tex2html175"
HREF="node9.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html174"
<A NAME="tex2html171"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html168"
<A NAME="tex2html165"
HREF="node7.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html176"
<A NAME="tex2html173"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html179"
<B> Next:</B> <A NAME="tex2html176"
HREF="node9.html">Bug reporting</A>
<B> Up:</B> <A NAME="tex2html175"
<B> Up:</B> <A NAME="tex2html172"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html169"
<B> Previous:</B> <A NAME="tex2html166"
HREF="node7.html">Optional third party libraries</A>
&nbsp; <B> <A NAME="tex2html177"
&nbsp; <B> <A NAME="tex2html174"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html190"
<A NAME="tex2html187"
HREF="node10.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html186"
<A NAME="tex2html183"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html180"
<A NAME="tex2html177"
HREF="node8.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html188"
<A NAME="tex2html185"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html191"
<B> Next:</B> <A NAME="tex2html188"
HREF="node10.html">Example and test programs</A>
<B> Up:</B> <A NAME="tex2html187"
<B> Up:</B> <A NAME="tex2html184"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html181"
<B> Previous:</B> <A NAME="tex2html178"
HREF="node8.html">Configuration options</A>
&nbsp; <B> <A NAME="tex2html189"
&nbsp; <B> <A NAME="tex2html186"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -54,7 +54,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<H2><A NAME="SECTION00054000000000000000">
Bug reporting</A>
</H2>
If you find any bugs in our codes, please let us know at (DECIDERE A CHI FARE IL BUG REPORTING)
If you find any bugs in our codes, please let us know at
<a href="mailto:bugreport@mld2p4.it">
<TT>bugreport@mld2p4.it</TT>
@ -62,7 +62,8 @@ If you find any bugs in our codes, please let us know at (DECIDERE A CHI FARE IL
</a>
; be aware that
the amount of information needed to reproduce a problem in a parallel
program may vary quite a lot.
program may vary quite a lot. <B>A chi va fatto il bug reporting? La
mail inviata a questo indirizzo non viene mai letta.</B>
<BR><HR>
</BODY>

@ -23,18 +23,18 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html24"
<A NAME="tex2html23"
HREF="node1.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_g.png">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png">
<A NAME="tex2html22"
<A NAME="tex2html21"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html25"
<B> Next:</B> <A NAME="tex2html24"
HREF="node1.html">Abstract</A>
&nbsp; <B> <A NAME="tex2html23"
&nbsp; <B> <A NAME="tex2html22"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -77,76 +77,74 @@ Feb. 28, 2017
<A NAME="CHILD_LINKS"></A>
<UL>
<LI><A NAME="tex2html26"
<LI><A NAME="tex2html25"
HREF="node1.html">Abstract</A>
<LI><A NAME="tex2html27"
<LI><A NAME="tex2html26"
HREF="node2.html">Contents</A>
<LI><A NAME="tex2html28"
<LI><A NAME="tex2html27"
HREF="node3.html">General Overview</A>
<LI><A NAME="tex2html29"
<LI><A NAME="tex2html28"
HREF="node4.html">Code Distribution</A>
<LI><A NAME="tex2html30"
<LI><A NAME="tex2html29"
HREF="node5.html">Configuring and Building MLD2P4</A>
<UL>
<LI><A NAME="tex2html31"
<LI><A NAME="tex2html30"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html32"
<LI><A NAME="tex2html31"
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html33"
<LI><A NAME="tex2html32"
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html34"
<LI><A NAME="tex2html33"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html35"
<LI><A NAME="tex2html34"
HREF="node10.html">Example and test programs</A>
</UL>
<BR>
<LI><A NAME="tex2html36"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<LI><A NAME="tex2html35"
HREF="node11.html">Multigrid Background</A>
<UL>
<LI><A NAME="tex2html36"
HREF="node12.html">AMG preconditioners</A>
</UL>
<BR>
<LI><A NAME="tex2html37"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
HREF="node13.html">Getting Started</A>
<UL>
<LI><A NAME="tex2html38"
HREF="node13.html">Smoothed Aggregation</A>
HREF="node14.html">Examples</A>
</UL>
<BR>
<LI><A NAME="tex2html39"
HREF="node14.html">Getting Started</A>
HREF="node15.html">User Interface</A>
<UL>
<LI><A NAME="tex2html40"
HREF="node15.html">Examples</A>
</UL>
<BR>
HREF="node16.html">Subroutine init</A>
<LI><A NAME="tex2html41"
HREF="node16.html">User Interface</A>
<UL>
HREF="node17.html">Subroutine set</A>
<LI><A NAME="tex2html42"
HREF="node17.html">Subroutine init</A>
HREF="node18.html">Subroutine build</A>
<LI><A NAME="tex2html43"
HREF="node18.html">Subroutine set</A>
HREF="node19.html">Subroutine hierarchy_build</A>
<LI><A NAME="tex2html44"
HREF="node19.html">Subroutine bld</A>
HREF="node20.html">Subroutine smoothers_build</A>
<LI><A NAME="tex2html45"
HREF="node20.html">Subroutine hierarchy_bld</A>
HREF="node21.html">Subroutine apply</A>
<LI><A NAME="tex2html46"
HREF="node21.html">Subroutine smoothers_bld</A>
HREF="node22.html">Subroutine free</A>
<LI><A NAME="tex2html47"
HREF="node22.html">Subroutine apply</A>
<LI><A NAME="tex2html48"
HREF="node23.html">Subroutine free</A>
<LI><A NAME="tex2html49"
HREF="node24.html">Subroutine descr</A>
HREF="node23.html">Subroutine descr</A>
</UL>
<BR>
<LI><A NAME="tex2html48"
HREF="node24.html">Adding smoothers and solvers to MLD2P4</A>
<LI><A NAME="tex2html49"
HREF="node25.html">Error Handling</A>
<LI><A NAME="tex2html50"
HREF="node25.html">Adding smoothers and solvers to MLD2P4</A>
HREF="node26.html">License</A>
<LI><A NAME="tex2html51"
HREF="node26.html">Error Handling</A>
HREF="node27.html">Bibliography</A>
<LI><A NAME="tex2html52"
HREF="node27.html">License</A>
<LI><A NAME="tex2html53"
HREF="node28.html">Bibliography</A>
<LI><A NAME="tex2html54"
HREF="node29.html">About this document ...</A>
HREF="node28.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>

File diff suppressed because one or more lines are too long

@ -1,22 +1,20 @@
\section*{Abstract}
\addcontentsline{toc}{section}{Abstract}
\textsc{MLD2P4 (Multi-Level Domain Decomposition Parallel Preconditioners Package based on
PSBLAS}) is a package of parallel algebraic multi-level preconditioners.
The first release made available various versions of
one-level additive and multi-level additive
and hybrid Schwarz preconditioners.
The package has been extended to include further multi-level cycles and smoothers widely used in
multigrid methods.
In the multi-level case, a purely algebraic approach
is applied to generate coarse-level corrections, so that no geometric background is needed
concerning the matrix to be preconditioned. The matrix is assumed to be square, real
or complex.
\textsc{MLD2P4 (Multi-Level Domain Decomposition Parallel Preconditioners Package
based on PSBLAS}) is a package of parallel algebraic multi-level preconditioners.
The first release of MLD2P4 made available multi-level additive and hybrid Schwarz
preconditioners, as well as one-level additive Schwarz preconditioners. The package
has been extended to include further multi-level cycles and smoothers widely used in
multigrid methods. In the multi-level case, a purely algebraic approach is applied to
generate coarse-level corrections, so that no geometric background is needed
concerning the matrix to be preconditioned. The matrix is assumed to be square,
real or complex.
MLD2P4 has been designed to provide scalable and easy-to-use preconditioners in the
context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)
MLD2P4 has been designed to provide scalable and easy-to-use preconditioners
in the context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)
computational framework and can be used in conjuction with the Krylov solvers
available in this framework. MLD2P4 enables the user to easily specify different features
of an algebraic multi-level preconditioner, thus allowing to search
available in this framework. MLD2P4 enables the user to easily specify different
features of an algebraic multi-level preconditioner, thus allowing to search
for the ``best'' preconditioner for the problem at hand.
The package employs object-oriented design techniques in

File diff suppressed because one or more lines are too long

@ -1,229 +1,169 @@
%\section{Bibliography\label{sec:bib}}
\begin{thebibliography}{99}
\addcontentsline{toc}{section}{\refname}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
{\textsc{References}}
%\let\refname\relax
%
%\bibitem{PARA04FOREST}
%G.~Bella, S.~Filippone, A.~De Maio, A., Testa, M.:
%A Simulation Model for Forest Fires.
%In: Dongarra, J., Madsen, K., Wasniewski, J. (eds.):
%Proceedings of PARA~04 Workshop on State of the Art
%in Scientific Computing. Lecture Notes in Computer Science, 3732. Berlin:
%Springer, 2005
%
\bibitem{BREZINA_VANEK}
M.~Brezina, P.~Van{\v e}k,
{\em A Black-Box Iterative Solver Based on a Two-Level Schwarz Method},
Computing, 63, 1999, 233--263.
%
\bibitem{para_04}
A.~Buttari, P.~D'Ambra, D.~di Serafino, S.~Filippone,
{\em Extending PSBLAS to Build Parallel Schwarz Preconditioners},
in , J.~Dongarra, K.~Madsen, J.~Wasniewski, editors,
Proceedings of PARA~04 Workshop on State of the Art
in Scientific Computing, Lecture Notes in Computer Science,
Springer, 2005, 593--602.
%
\bibitem{aaecc_07}
A.~Buttari, P.~D'Ambra, D.~di~Serafino, S.~Filippone,
{\em 2LEV-D2P4: a package of high-performance preconditioners
for scientific and engineering applications},
Applicable Algebra in Engineering, Communications and Computing,
18, 3, 2007, 223--239.
%Published online: 13 February 2007, {\tt http://dx.doi.org/10.1007/s00200-007-0035-z}
%
\bibitem{apnum_07} P.~D'Ambra, S.~Filippone, D.~di~Serafino,
{\em On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners},
Applied Numerical Mathematics, Elsevier Science,
57, 11-12, 2007, 1181-1196.
%published online 3 February 2007, {\tt
% http://dx.doi.org/10.1016/j.apnum.2007.01.006}
%% \bibitem{DOUGLAS}
%% R.E.~Bank and C.C.~Douglas,
%% {\em SMMP: Sparse Matrix Multiplication Package},
%% Advances in Computational Mathematics, 1993, 1, 127-137.
%% (See also {\tt http://www.mgnet.org/~douglas/ccd-codes.html})
%
%
%% \bibitem{CAI_SAAD}
%% X.~C.~Cai and Y.~Saad,
%% {\em Overlapping Domain Decomposition Algorithms for General Sparse Matrices},
%% Numerical Linear Algebra with Applications, 3(3), pp.~221--237, 1996.
%
\bibitem{CAI_SARKIS}
X.~C.~Cai, M.~Sarkis,
{\em A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems},
SIAM Journal on Scientific Computing, 21, 2, 1999, 792--797.
%
\bibitem{Cai_Widlund_92}
X.~C.~Cai, O.~B.~Widlund,
{\em Domain Decomposition Algorithms for Indefinite Elliptic Problems},
SIAM Journal on Scientific and Statistical Computing, 13, 1, 1992, 243--258.
%
\bibitem{dd1_94}
T.~Chan and T.~Mathew,
{\em Domain Decomposition Algorithms},
in A.~Iserles, editor, Acta Numerica 1994, 61--143.
Cambridge University Press.
%
\bibitem{MLD2P4_TOMS}
P.~D'Ambra, D.~di~Serafino, S.~Filippone,
\emph{MLD2P4: a Package of Parallel Multilevel
Algebraic Domain Decomposition Preconditioners
in Fortran 95}, ACM Trans. Math. Softw., 37(3), 2010.
%
\bibitem{UMFPACK}
T.A.~Davis,
{\em Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
Method with a Column Pre-ordering Strategy},
ACM Transactions on Mathematical Software, 30, 2004, 196--199.
(See also {\tt http://www.cise.ufl.edu/~davis/})
%
\bibitem{MUMPS}
P.R.~Amestoy, C.~Ashcraft, O.~Boiteau, A.~Buttari, J.~L'Excellent, C.~Weisbecker
{\em Improving multifrontal methods by means of block low-rank representations},
SIAM SISC, volume 37, number 3, pages A1452-A1474.
(See also {\tt http://mumps.enseeiht.fr})
%
\bibitem{SUPERLU}
J.W.~Demmel, S.C.~Eisenstat, J.R.~Gilbert, X.S.~Li and J.W.H.~Liu,
A supernodal approach to sparse partial pivoting,
SIAM Journal on Matrix Analysis and Applications, 20, 3, 1999, 720--755.
%
\bibitem{blas3}
J.~J.~Dongarra, J.~Du Croz, I.~S.~Duff, S.~Hammarling,
\emph{A set of Level 3 Basic Linear Algebra Subprograms},
ACM Transactions on Mathematical Software, 16, 1990, 1--17.
%
\bibitem{blas2}
J.~J.~Dongarra, J.~Du Croz, S.~Hammarling, R.~J.~Hanson,
\emph{An extended set of FORTRAN Basic Linear Algebra Subprograms},
ACM Transactions on Mathematical Software, 14, 1988, 1--17.
%
\bibitem{BLACS}
J.~J.~Dongarra and R.~C.~Whaley,
{\em A User's Guide to the BLACS v.~1.1},
Lapack Working Note 94, Tech.\ Rep.\ UT-CS-95-281, University of
Tennessee, March 1995 (updated May 1997).
%
%\bibitem{sblas_97}
%I.~Duff, M.~Marrone, G.~Radicati and C.~Vittoli,
%{\em Level 3 Basic Linear Algebra Subprograms for Sparse Matrices:
%a User Level Interface},
%ACM Transactions on Mathematical Software, 23(3), pp.~379--401, 1997.
%
%\bibitem{sblas_02}
%I.~Duff, M.~Heroux and R.~Pozo,
%{\em An Overview of the Sparse Basic Linear
%Algebra Subprograms: the New Standard from the BLAS Technical Forum},
%ACM Transactions on Mathematical Software, 28(2), pp.~239--267, 2002.
%
\bibitem{EFSTATHIOU}
E.~Efstathiou, J.~G.~Gander,
{\em Why Restricted Additive Schwarz Converges Faster than Additive Schwarz},
BIT Numerical Mathematics, 43, 2003, 945--959.
%
\bibitem{PSBLASGUIDE}
S.~Filippone, A.~Buttari,
{\em PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library}, 2012,
available from \texttt{http://www.ce.uniroma2.it/psblas/}.
\bibitem{PSBLAS3}
Salvatore Filippone and Alfredo Buttari.
{\em {Object-Oriented Techniques for Sparse Matrix Computations in Fortran
2003}.}
ACM Trans. on Math Software, 38(4), 2012.
%
\bibitem{psblas_00}
S.~Filippone, M.~Colajanni,
{\em PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices},
ACM Transactions on Mathematical Software, 26, 4, 2000, 527--550.
%
\bibitem{MPI2}
W.~Gropp, S.~Huss-Lederman, A.~Lumsdaine, E.~Lusk, B.~Nitzberg, W.~Saphir, M.~Snir,
{\em MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions},
MIT Press, 1998.
%
\bibitem{blas1}
C.~L.~Lawson, R.~J.~Hanson, D.~Kincaid, F.~T.~Krogh,
\emph{Basic Linear Algebra Subprograms for FORTRAN usage},
ACM Transactions on Mathematical Software, 5, 1979, 308--323.
%
\bibitem{SUPERLUDIST}
X.~S.~Li, J.~W.~Demmel, {\em SuperLU\_DIST: A Scalable Distributed-memory
Sparse Direct Solver for Unsymmetric Linear Systems},
ACM Transactions on Mathematical Software, 29, 2, 2003, 110--140.
%
%\bibitem{KIVA3PSBLAS}
%S.~Filippone, P.~D'Ambra, M.~Colajanni,
%{\em Using a Parallel Library of Sparse Linear Algebra in a Fluid Dynamics
%Applications Code on Linux Clusters},
%in G.~Joubert, A.~Murli, F.~Peters, M.~Vanneschi, editors,
%Parallel Computing - Advances \& Current Issues,
%pp.~441--448, Imperial College Press, 2002.
%
%\bibitem{METIS}
%Karypis, G. and Kumar, V.,
%{\em {METIS}: Unstructured Graph Partitioning and Sparse Matrix
% Ordering System}.
%Minneapolis, MN 55455: University of Minnesota, Department of
% Computer Science, 1995.
%Internet Address: {\verb|http://www.cs.umn.edu/~karypis|}.
%\bibitem{BLAS1}
%Lawson, C., Hanson, R., Kincaid, D. and Krogh, F.,
% Basic {L}inear {A}lgebra {S}ubprograms for {F}ortran usage,
%{ACM Trans. Math. Softw.} vol.~{5}, 38--329, 1979.
%
%\bibitem{machiels}
%{Machiels, L. and Deville, M.}
%{\em Fortran 90: An entry to object-oriented programming for the solution
% of partial differential equations.}
%{ACM Trans. Math. Softw.} vol.~{23}, 32--49.
%\bibitem{metcalf}
%{Metcalf, M., Reid, J. and Cohen, M.}
%{\em Fortran 95/2003 explained.}
%{Oxford University Press}, 2004.
%
\bibitem{Saad_book}
Y.~Saad,
\emph{Iterative methods for sparse linear systems}, 2nd edition,
SIAM, 2003
\bibitem{dd2_96}
B.~Smith, P.~Bjorstad, W.~Gropp,
{\em Domain Decomposition: Parallel Multilevel Methods for Elliptic
Partial Differential Equations},
Cambridge University Press, 1996.
%
\bibitem{MPI1}
M.~Snir, S.~Otto, S.~Huss-Lederman, D.~Walker, J.~Dongarra,
{\em MPI: The Complete Reference. Volume 1 - The MPI Core}, second edition,
MIT Press, 1998.
%%
\bibitem{Stuben_01}
K.~St\"{u}ben,
{\em An Introduction to Algebraic Multigrid},
in A.~Sch\"{u}ller, U.~Trottenberg, C.~Oosterlee, Multigrid,
Academic Press, 2001.
%
\bibitem{TUMINARO_TONG}
R.~S.~Tuminaro, C.~Tong,
{\em Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines},
in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.
%
\bibitem{VANEK_MANDEL_BREZINA}
P.~Van{\v e}k, J.~Mandel and M.~Brezina,
{\em Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems},
Computing, 56, 1996, 179-196.
%
\end{thebibliography}
%\section{Bibliography\label{sec:bib}}
\begin{thebibliography}{99}
\addcontentsline{toc}{section}{\refname}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
{\textsc{References}}
%\let\refname\relax
%
\bibitem{BREZINA_VANEK}
M.~Brezina, P.~Van{\v e}k,
{\em A Black-Box Iterative Solver Based on a Two-Level Schwarz Method},
Computing, 63, 1999, 233--263.
%
\bibitem{Briggs2000}
W.~L.~Briggs, V.~E.~Henson, S.~F.~ McCormick,
{\em A Multigrid Tutorial, Second Edition},
SIAM, 2000.
%
\bibitem{para_04}
A.~Buttari, P.~D'Ambra, D.~di Serafino, S.~Filippone,
{\em Extending PSBLAS to Build Parallel Schwarz Preconditioners},
in J.~Dongarra, K.~Madsen, J.~Wasniewski, editors,
Proceedings of PARA~04 Workshop on State of the Art
in Scientific Computing, Lecture Notes in Computer Science,
Springer, 2005, 593--602.
%
\bibitem{aaecc_07}
A.~Buttari, P.~D'Ambra, D.~di~Serafino, S.~Filippone,
{\em 2LEV-D2P4: a package of high-performance preconditioners
for scientific and engineering applications},
Applicable Algebra in Engineering, Communications and Computing,
18 (3) 2007, 223--239.
%Published online: 13 February 2007, {\tt http://dx.doi.org/10.1007/s00200-007-0035-z}
%
\bibitem{apnum_07} P.~D'Ambra, S.~Filippone, D.~di~Serafino,
{\em On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners},
Applied Numerical Mathematics, Elsevier Science,
57 (11-12), 2007, 1181-1196.
%published online 3 February 2007, {\tt
% http://dx.doi.org/10.1016/j.apnum.2007.01.006}
%
\bibitem{CAI_SARKIS}
X.~C.~Cai, M.~Sarkis,
{\em A Restricted Additive Schwarz Preconditioner for General Sparse Linear Systems},
SIAM Journal on Scientific Computing, 21 (2), 1999, 792--797.
%
\bibitem{Cai_Widlund_92}
X.~C.~Cai, O.~B.~Widlund,
{\em Domain Decomposition Algorithms for Indefinite Elliptic Problems},
SIAM Journal on Scientific and Statistical Computing, 13 (1), 1992, 243--258.
%
\bibitem{dd1_94}
T.~Chan and T.~Mathew,
{\em Domain Decomposition Algorithms},
in A.~Iserles, editor, Acta Numerica 1994, 61--143.
Cambridge University Press.
%
\bibitem{MLD2P4_TOMS}
P.~D'Ambra, D.~di~Serafino, S.~Filippone,
\emph{MLD2P4: a Package of Parallel Multilevel
Algebraic Domain Decomposition Preconditioners
in Fortran 95}, ACM Trans. Math. Softw., 37(3), 2010, art. 30.
%
\bibitem{UMFPACK}
T.A.~Davis,
{\em Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
Method with a Column Pre-ordering Strategy},
ACM Transactions on Mathematical Software, 30, 2004, 196--199.
(See also {\tt http://www.cise.ufl.edu/~davis/})
%
\bibitem{MUMPS}
P.R.~Amestoy, C.~Ashcraft, O.~Boiteau, A.~Buttari, J.~L'Excellent, C.~Weisbecker
{\em Improving multifrontal methods by means of block low-rank representations},
SIAM Journal on Scientific Computing, volume 37 (3), 2015, A1452--A1474.
See also {\tt http://mumps.enseeiht.fr}.
%
\bibitem{SUPERLU}
J.W.~Demmel, S.C.~Eisenstat, J.R.~Gilbert, X.S.~Li and J.W.H.~Liu,
A supernodal approach to sparse partial pivoting,
SIAM Journal on Matrix Analysis and Applications, 20 (3), 1999, 720--755.
%
\bibitem{blas3}
J.~J.~Dongarra, J.~Du Croz, I.~S.~Duff, S.~Hammarling,
\emph{A set of Level 3 Basic Linear Algebra Subprograms},
ACM Transactions on Mathematical Software, 16 (1) 1990, 1--17.
%
\bibitem{blas2}
J.~J.~Dongarra, J.~Du Croz, S.~Hammarling, R.~J.~Hanson,
\emph{An extended set of FORTRAN Basic Linear Algebra Subprograms},
ACM Transactions on Mathematical Software, 14 (1) 1988, 1--17.
%
\bibitem{BLACS}
J.~J.~Dongarra and R.~C.~Whaley,
{\em A User's Guide to the BLACS v.~1.1},
Lapack Working Note 94, Tech.\ Rep.\ UT-CS-95-281, University of
Tennessee, March 1995 (updated May 1997).
%
\bibitem{EFSTATHIOU}
E.~Efstathiou, J.~G.~Gander,
{\em Why Restricted Additive Schwarz Converges Faster than Additive Schwarz},
BIT Numerical Mathematics, 43 (5), 2003, 945--959.
%
\bibitem{PSBLASGUIDE}
S.~Filippone, A.~Buttari,
{\em PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library}, 2012,
available from \texttt{http://www.ce.uniroma2.it/psblas/}.
%
\bibitem{PSBLAS3}
Salvatore Filippone and Alfredo Buttari.
{\em Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003}.
ACM Transactions on on Mathematical Software, 38 (4), 2012, art. 23.
%
\bibitem{psblas_00}
S.~Filippone, M.~Colajanni,
{\em PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices},
ACM Transactions on Mathematical Software, 26 (4), 2000, 527--550.
%
\bibitem{MPI2}
W.~Gropp, S.~Huss-Lederman, A.~Lumsdaine, E.~Lusk, B.~Nitzberg, W.~Saphir, M.~Snir,
{\em MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions},
MIT Press, 1998.
%
\bibitem{blas1}
C.~L.~Lawson, R.~J.~Hanson, D.~Kincaid, F.~T.~Krogh,
\emph{Basic Linear Algebra Subprograms for FORTRAN usage},
ACM Transactions on Mathematical Software, 5 (3), 1979, 308--323.
%
\bibitem{SUPERLUDIST}
X.~S.~Li, J.~W.~Demmel, {\em SuperLU\_DIST: A Scalable Distributed-memory
Sparse Direct Solver for Unsymmetric Linear Systems},
ACM Transactions on Mathematical Software, 29 (2), 2003, 110--140.
%
\bibitem{Notay2008}
Y.~Notay, P.~S.~Vassilevski, {\em Recursive Krylov-based multigrid cycles},
Numerical Linear Algebra with Applications, 15 (5), 2008, 473--487.
%
\bibitem{Saad_book}
Y.~Saad,
{\em Iterative methods for sparse linear systems}, 2nd edition, SIAM, 2003.
%
\bibitem{dd2_96}
B.~Smith, P.~Bjorstad, W.~Gropp,
{\em Domain Decomposition: Parallel Multilevel Methods for Elliptic
Partial Differential Equations},
Cambridge University Press, 1996.
%
\bibitem{MPI1}
M.~Snir, S.~Otto, S.~Huss-Lederman, D.~Walker, J.~Dongarra,
{\em MPI: The Complete Reference. Volume 1 - The MPI Core}, second edition,
MIT Press, 1998.
%%
\bibitem{Stuben_01}
K.~St\"{u}ben,
{\em An Introduction to Algebraic Multigrid},
in A.~Sch\"{u}ller, U.~Trottenberg, C.~Oosterlee, Multigrid,
Academic Press, 2001.
%
\bibitem{TUMINARO_TONG}
R.~S.~Tuminaro, C.~Tong,
{\em Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines}, in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.
%
\bibitem{VANEK_MANDEL_BREZINA}
P.~Van{\v e}k, J.~Mandel and M.~Brezina,
{\em Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems},
Computing, 56 (3) 1996, 179--196.
%
\end{thebibliography}

@ -2,7 +2,7 @@
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
{\textsc{\ref{sec:building} Configuring and Building MLD2P4}}
In order to build MLD2P4 it is necessary to set up a Makefile with appropriate
values for your system; this is done by means of the \verb|configure|
system-dependent variables; this is done by means of the \verb|configure|
script. The distribution also includes the autoconf and automake
sources employed to generate the script, but usually this is not needed
to build the software.
@ -24,7 +24,7 @@ The following base libraries are needed:
\item[BLAS] \cite{blas3,blas2,blas1} Many vendors provide optimized versions
of BLAS; if no vendor version is
available for a given platform, the ATLAS software
(\url{math-atlas.sourceforge.net/})
(\url{math-atlas.sourceforge.net})
may be employed. The reference BLAS from Netlib
(\url{www.netlib.org/blas}) are meant to define the standard
behaviour of the BLAS interface, so they are not optimized for any
@ -35,14 +35,14 @@ The following base libraries are needed:
libraries. Note that UMFPACK requires a full LAPACK library; our
experience is that configuring ATLAS for building full LAPACK does not
work in the correct way. Our advice is first to download the LAPACK tarfile from
\url{www.netlib.org/lapac} and install it independently of ATLAS. In this case,
\url{www.netlib.org/lapack} and install it independently of ATLAS. In this case,
you need to modify the OPTS and NOOPT definitions for including -fPIC compilation option
in the make.inc file of the LAPACK library.
\item[MPI] \cite{MPI2,MPI1} A version of MPI is available on most
high-performance computing systems.
\item[PSBLAS] \cite{PSBLASGUIDE,psblas_00} Parallel Sparse BLAS (PSBLAS) is
available from \url{www.ce.uniroma2.it/psblas}; version
3.4.0 (or later) is required. Indeed, all the prerequisites
3.5.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
@ -50,7 +50,7 @@ interfaces compatible with MLD2P4;
usually this means that they should all be built with the same
compiler as MLD2P4.
\subsection{Optional third party libraries}
\subsection{Optional third party libraries\label{sec:third_party}}
We provide interfaces to the following third-party software libraries;
note that these are optional, but if you enable them some defaults
@ -61,11 +61,11 @@ for multi-level preconditioners may change to reflect their presence.
A sparse LU factorization package included in the SuiteSparse library, available from
\url{faculty.cse.tamu.edu/davis/suitesparse.html};
it provides sequential factorization and triangular system solution for double
precision real and complex data. We tested
version 4.5.4. Note that for configuring SuiteSparse you should provide the right
path to the BLAS and LAPACK libraries in the \verb|SuiteSparse_config/SuiteSparse_config.mk| file.
precision real and complex data. We tested version 4.5.4 of SuiteSparse.
Note that for configuring SuiteSparse you should provide the right path to the BLAS
and LAPACK libraries in the \verb|SuiteSparse_config/SuiteSparse_config.mk| file.
\item[MUMPS] \cite{MUMPS}
A sparse LU factorization package available from \url{mumps.enseeiht.fr/};
A sparse LU factorization package available from \url{mumps.enseeiht.fr};
it provides sequential and parallel factorizations and triangular system solution
for single and double precision, real and complex data.
We tested versions 4.10.0 and version 5.0.1.
@ -74,25 +74,24 @@ path to the BLAS and LAPACK libraries in the \verb|SuiteSparse_config/SuiteSpars
\url{crd.lbl.gov/~xiaoye/SuperLU/}; it provides sequential
factorization and triangular system solution for single and double precision,
real and complex data. We tested version 4.3 and 5.0. If you installed BLAS from
ATLAS, remember to define the BLASLIB variable in the make.inc file.
ATLAS, remember to define the BLASLIB variable in the make.inc file.
\item[SuperLU\_Dist] \cite{SUPERLUDIST}
A sparse LU factorization package available
from the same site as SuperLU; it provides parallel factorization and
triangular system solution for double precision real and complex data.
We tested version 3.3 and 4.2. If you installed BLAS from
ATLAS, remember to define the BLASLIB variable in the make.inc file and
to add the \verb|-std=c99| option to the C compiler options.
Note that this library requires the ParMETIS
library for parallel graph partitioning and fill-reducing matrix ordering available from
\url{glaros.dtc.umn.edu/gkhome/metis/parmetis/overview}.
ATLAS, remember to define the BLASLIB variable in the make.inc file and
to add the \verb|-std=c99| option to the C compiler options.
Note that this library requires the ParMETIS
library for parallel graph partitioning and fill-reducing matrix ordering, available from
\url{glaros.dtc.umn.edu/gkhome/metis/parmetis/overview}.
\end{description}
\subsection{Configuration options}
{\bf CONTROLLARE HELP DEL CONFIGURE: Versione MLD2P4, Versione PSBLAS, Influential Environmental Variables???}
\subsection{Configuration options}
To build MLD2P4 the first step is to use the \verb|configure| script
in the main directory to generate the necessary makefile(s).
In order to build MLD2P4, the first step is to use the \verb|configure| script
in the main directory to generate the necessary makefile.
%\textbf{Sono necessarie le parentesi intorno a s?}
As a minimal example consider the following:
\begin{verbatim}
@ -105,7 +104,7 @@ be specified with an {\em absolute} path).
The full set of options may be looked at by issuing the command
\verb|./configure --help|, which produces:
\begin{verbatim}
`configure' configures MLD2P4 2.0 to adapt to many kinds of systems.
`configure' configures MLD2P4 2.1 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
@ -159,27 +158,55 @@ Fine tuning of the installation directories:
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--enable-serial Specify whether to enable a fake mpi library to run
in serial mode.
--enable-long-integers Specify usage of 64 bits integers.
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-psblas=DIR The install directory for PSBLAS, for example,
--with-psblas=/opt/packages/psblas-3.3
--with-psblas=/opt/packages/psblas-3.5
--with-psblas-incdir=DIR
Specify the directory for PSBLAS includes.
--with-psblas-libdir=DIR
Specify the directory for PSBLAS library.
--with-ccopt additional CCOPT flags to be added: will prepend
to CCOPT
--with-fcopt additional FCOPT flags to be added: will prepend
to FCOPT
--with-libs List additional link flags here. For example,
--with-libs=-lspecial_system_lib or
--with-libs=-L/path/to/libs
--with-clibs additional CLIBS flags to be added: will prepend
to CLIBS
--with-flibs additional FLIBS flags to be added: will prepend
to FLIBS
--with-library-path additional LIBRARYPATH flags to be added: will
prepend to LIBRARYPATH
--with-include-path additional INCLUDEPATH flags to be added: will
prepend to INCLUDEPATH
--with-module-path additional MODULE_PATH flags to be added: will
prepend to MODULE_PATH
--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-blas=<lib> use BLAS library <lib>
--with-blasdir=<dir> search for BLAS library in <dir>
--with-lapack=<lib> use LAPACK library <lib>
--with-mumps=LIBNAME Specify the libname for MUMPS. Default: autodetect
with minimum "-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
@ -225,24 +252,22 @@ Some influential environment variables:
CFLAGS C compiler flags
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
MPICC MPI C compiler command
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
MPIF77 MPI Fortran 77 compiler command
MPIFC MPI Fortran compiler command
CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
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.4 under the
For instance, if a user has built and installed PSBLAS 3.5 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.4/ \
./configure --with-psblas=/opt/psblas-3.5/ \
--with-umfpackincdir=/usr/include/suitesparse/
\end{verbatim}
Once the configure script has completed execution, it will have
@ -253,7 +278,9 @@ install directory under the name \verb|Make.inc.MLD2P4|.
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| \verb|-lzmumps -lzmumps -mumps_common -lpord|.
\verb|-ldmumps -lsmumps| \verb|-lzmumps -mumps_common -lpord|.
\textbf{Pasqua, c'era due volte lzmumps. L'ho eliminato, ma poi mi e' venuto
il dubbio che il secondo lzmumps dovesse essere modificato.}
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.
@ -267,7 +294,7 @@ followed (optionally) by
make install
\end{verbatim}
\subsection{Bug reporting}
If you find any bugs in our codes, please let us know at (DECIDERE A CHI FARE IL BUG REPORTING)
If you find any bugs in our codes, please let us know at
\begin{rawhtml}
<a href="mailto:bugreport@mld2p4.it">
\end{rawhtml}
@ -277,7 +304,8 @@ If you find any bugs in our codes, please let us know at (DECIDERE A CHI FARE IL
\end{rawhtml}
; be aware that
the amount of information needed to reproduce a problem in a parallel
program may vary quite a lot.
program may vary quite a lot. \textbf{A chi va fatto il bug reporting? La
mail inviata a questo indirizzo non viene mai letta.}
\subsection{Example and test programs\label{sec:ex_and_test}}
The package contains the \verb|examples| and \verb|tests| directories;
both of them are further divided into \verb|fileread| and
@ -286,13 +314,14 @@ both of them are further divided into \verb|fileread| and
\item[\tt examples] contains a set of simple example programs with a
predefined choice of preconditioners, selectable via integer
values. These are intended to get an acquaintance with the
multilevel preconditioners.
multi-level preconditioners available in MLD2P4.
\item[\tt tests] contains a set of more sophisticated examples that
will allow the user, via the input files in the \verb|runs|
subdirectories, to experiment with the full range of preconditioners
implemented in the library.
implemented in the package.
\end{description}
The \verb|fileread| directories contain sample programs that read
sparse matrices from files, according to the Matrix Market or the
Harwell-Boeing storage format; the \verb|pdegen| instead generate
matrices in full parallel mode from the discretization of a sample PDE.
Harwell-Boeing storage format; the \verb|pdegen| programs generate
matrices in full parallel mode from the discretization of a sample partial
differential equation.

@ -41,9 +41,9 @@ The following steps are required:
is multi-level, then two steps must be performed, as specified next.
\begin{enumerate}
\item[4.1] \emph{Build the aggregation hierarchy for a given matrix.} This is
performed by the routine \verb|hierarchy_bld|.
performed by the routine \verb|hierarchy_build|.
\item[4.2] \emph{Build the preconditioner for a given matrix.} This is performed
by the routine \verb|smoothers_bld|.
by the routine \verb|smoothers_build|.
\end{enumerate}
If the selected preconditioner is one-level, it is built in a single step,
performed by the routine \verb|bld|.
@ -118,7 +118,7 @@ on parallel computers.
The code reported in Figure~\ref{fig:ex1} shows how to set and apply the default
multi-level preconditioner available in the real double precision version
of MLD2P4 (see Table~\ref{tab:precinit}). This preconditioner is chosen
by simply specifying \verb|'ML'| as second argument of \verb|P%init|
by simply specifying \verb|'ML'| as the second argument of \verb|P%init|
(a call to \verb|P%set| is not needed) and is applied with the CG
solver provided by PSBLAS (the matrix of the system to be solved is
assumed to be positive definite). As previously observed, the modules
@ -179,8 +179,8 @@ the corresponding codes are available in \verb|examples/fileread/|.
call P%init(P,'ML',info)
!
! build the preconditioner
call P%hierarchy_bld(A,desc_A,P,info)
call P%smoothers_bld(A,desc_A,P,info)
call P%hierarchy_build(A,desc_A,P,info)
call P%smoothers_build(A,desc_A,P,info)
!
! set the solver parameters and the initial guess
@ -264,8 +264,8 @@ boundary conditions are also available in the directory \verb|examples/pdegen|.
call_P%set(P,'SMOOTHER_TYPE','BJAC',info)
call P%set(P,'COARSE_SOLVE','BJAC',info)
call P%set(P,'COARSE_SWEEPS',8,info)
call P%hierarchy_bld(A,desc_A,P,info)
call P%smoothers_bld(A,desc_A,P,info)
call P%hierarchy_build(A,desc_A,P,info)
call P%smoothers_build(A,desc_A,P,info)
... ...
\end{verbatim}
}
@ -291,8 +291,8 @@ boundary conditions are also available in the directory \verb|examples/pdegen|.
call P%set('SMOOTHER_SWEEPS',2,info,pos='POST')
call P%set('COARSE_SOLVE','MUMPS',info)
call P%set('COARSE_MAT','DIST',info)
call P%hierarchy_bld(A,desc_A,P,info)
call P%smoothers_bld(A,desc_A,P,info)
call P%hierarchy_build(A,desc_A,P,info)
call P%smoothers_build(A,desc_A,P,info)
... ...
! solve Ax=b with preconditioned CG
call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)

@ -13,13 +13,12 @@ terms: {\small
(C) Copyright 2008, 2010, 2012, 2017
Salvatore Filippone Cranfield University
Ambra Abdullahi Hassan University of Rome Tor Vergata
Alfredo Buttari CNRS-IRIT, Toulouse
Pasqua D'Ambra ICAR-CNR, Naples
Daniela di Serafino Second University of Naples
Salvatore Filippone Cranfield University, Cranfield, UK
Ambra Abdullahi Hassan University of Rome Tor Vergata, Rome, IT
Alfredo Buttari CNRS-IRIT, Toulouse, FR
Pasqua D'Ambra IAC-CNR, Naples, IT
Daniela di Serafino University of Campania L. Vanvitelli, Caserta, IT
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

@ -3,10 +3,9 @@
{\textsc{\ref{sec:overview} General Overview}}
The \textsc{Multi-Level Domain Decomposition Parallel Preconditioners Package based on
PSBLAS (MLD2P4}) provides parallel Algebraic MultiGrid (AMG) and domain decomposition
preconditioners, designed to provide scalable and easy-to-use preconditioners
multi-level Schwarz preconditioners~\cite{Stuben_01,dd2_96},
to be used in the iterative solutions of sparse linear systems:
PSBLAS (MLD2P4}) provides parallel Algebraic MultiGrid (AMG) and Domain
Decomposition preconditioners (see, e.g., \cite{Briggs2000,Stuben_01,dd2_96}),
to be used in the iterative solution of linear systems,
\begin{equation}
Ax=b,
\label{system1}
@ -17,22 +16,34 @@ where $A$ is a square, real or complex, sparse matrix.
%Dovremmo implementare uno smoothed prolongator
%adeguato e fare qualcosa di consistente anche con 1-lev Schwarz.}
%
Multi-level preconditioners can be obtained by combining several AMG cycles (V, W, K) with
different smoothers (Jacobi, hybrid forward/backward Gauss-Seidel, block-Jacobi, additive Schwarz methods).
An algebraic approach is used to
generate a hierarchy of coarse-level matrices and operators, without
explicitly using any information on the geometry of the original problem, e.g.,
the discretization of a PDE. The smoothed aggregation technique is applied
as algebraic coarsening strategy~\cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}.
Either exact or approximate solvers are available to solve the coarsest-level system. Specifically,
different versions of sparse LU factorizations from external packages, and native incomplete
LU factorizations and iterative block-Jacobi solvers can be used.
All smoothers can be also exploited as one-level preconditioners.
The name of the package comes from its original implementation, containing
multi-level additive and hybrid Schwarz preconditioners, as well as one-level additive
Schwarz preconditioners. The current version extends the original plan by including
multi-level cycles and smoothers widely used in multigrid methods.
The multi-level preconditioners implemented in MLD2P4 are obtained by combining
AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and
K-cycles~\cite{Briggs2000,Notay2008} are available, which allow to define
almost all the preconditioners in the package, including the multi-level hybrid
Schwarz ones; a specific cycle is implemented to obained multi-level additive
Schwarz preconditioners. The Jacobi, hybrid
%\footnote{see Note 2 in Table~\ref{tab:p_coarse}, p.~28.}
forward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz methods
are available as smoothers. An algebraic approach is used to generate a hierarchy of
coarse-level matrices and operators, without explicitly using any information on the
geometry of the original problem, e.g., the discretization of a PDE. To this end,
the smoothed aggregation technique~\cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}
is applied. Either exact or approximate solvers can be used on the coarsest-level
system. Specifically, different sparse LU factorizations from external
packages, and native incomplete LU factorizations and Jacobi, hybrid Gauss-Seidel,
and block-Jacobi solvers are available. All smoothers can be also exploited as one-level
preconditioners.
MLD2P4 is written in Fortran~2003, following an
object-oriented design through the exploitation of features
such as abstract data type creation, functional overloading, and
dynamic memory management.
such as abstract data type creation, type extension, functional overloading, and
dynamic memory management. % \textbf{Va bene cos\'{i} o \`e meglio
% fare riferimento alle classi?}
The parallel implementation is based on a Single Program Multiple Data
(SPMD) paradigm. Single and
double precision implementations of MLD2P4 are available for both the
@ -40,53 +51,53 @@ real and the complex case, which can be used through a single
interface.
MLD2P4 has been designed to implement scalable and easy-to-use
multilevel preconditioners in the context of the PSBLAS
(Parallel Sparse BLAS) computational framework~\cite{psblas_00,PSBLAS3}.
PSBLAS provides basic linear algebra
multilevel preconditioners in the context of the PSBLAS (Parallel Sparse BLAS)
computational framework~\cite{psblas_00,PSBLAS3}. PSBLAS provides basic linear algebra
operators and data management facilities for distributed sparse matrices,
as well as parallel Krylov solvers which can be coupled with the MLD2P4 preconditioners.
as well as parallel Krylov solvers which can be used with the MLD2P4 preconditioners.
The choice of PSBLAS has been mainly motivated by the need of having
a portable and efficient software infrastructure implementing ``de facto'' standard
parallel sparse linear algebra kernels, to pursue goals such as performance,
portability, modularity ed extensibility in the development of the preconditioner
package. On the other hand, the implementation of MLD2P4 has led to some
revisions and extentions of the original PSBLAS kernels.
The inter-process comunication required
by MLD2P4 is encapsulated into the PSBLAS routines, except few cases where
MPI~\cite{MPI1} is explicitly called \textbf{\'E ancora cosi???}. Therefore, MLD2P4 can be run on any parallel
machine where PSBLAS and MPI implementations are available.
The inter-process comunication required by MLD2P4 is encapsulated
in the PSBLAS routines;% , except few cases where MPI~\cite{MPI1} is explicitly called.
% \textbf{E' ancora cos\'{i} o adesso \`e tutto incapsulato in PSBLAS?}
therefore, MLD2P4 can be run on any parallel machine where PSBLAS
implementations are available.
MLD2P4 has a layered and modular software architecture where three main layers can be identified.
The lower layer consists of the PSBLAS kernels, the middle one implements
MLD2P4 has a layered and modular software architecture where three main layers can be
identified. The lower layer consists of the PSBLAS kernels, the middle one implements
the construction and application phases of the preconditioners, and the upper one
provides a uniform interface to all the preconditioners.
This architecture allows for different levels of use of the package:
few black-box routines at the upper layer allow non-expert users to easily
build any preconditioner available in MLD2P4 and to apply it within a PSBLAS Krylov solver;
{\bf facilities are also available that allow more expert users to extend the set of smoothers
and solvers for building new versions of preconditioners.}
few black-box routines at the upper layer allow all users to easily
build and apply any preconditioner available in MLD2P4;
facilities are also available allowing expert users to extend the set of smoothers
and solvers for building new versions of the preconditioners (see
Section~\ref{sec:adding}).
We note that the user interface of MLD2P4 2.1 ({\bf Perche 2.1 e non 2.0???...Ricordarsi di cambiare il configure})
has been extended with respect to the previous versions
in order to separate the construction
of the multi-level hierarchy from the construction of the smoothers and solvers, and to allow for more flexibility
at each level.
The software architecture described in~\cite{MLD2P4_TOMS} has significantly evolved too, in order to fully exploit the
Fortran~2003 features implemented in PSBLAS 3.
We note that the user interface of MLD2P4 2.1 has been extended with respect to the
previous versions in order to separate the construction of the multi-level hierarchy from
the construction of the smoothers and solvers, and to allow for more flexibility
at each level. The software architecture described in~\cite{MLD2P4_TOMS} has significantly
evolved too, in order to fully exploit the Fortran~2003 features implemented in PSBLAS 3.
However, compatibility with previous versions has been preserved.
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
and installation of the package are given in Section~\ref{sec:building}. A short description of
the preconditioners implemented in MLD2P4 is provided
in Section~\ref{sec:background}, to help the users in choosing among them.
The basics for building and applying the preconditioners
with the Krylov solvers implemented in PSBLAS are reported in Section~\ref{sec:started}, where the
Fortran codes of a few sample programs are also shown. A reference guide for
the upper-layer routines of MLD2P4, that are the user interface, is provided
in Section~\ref{sec:userinterface}. The error handling mechanism used by the package is briefly described
in Section~\ref{sec:errors}. The copyright terms concerning the distribution and modification
of MLD2P4 are reported in Appendix~\ref{sec:license}.
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
and installation of the package are given in Section~\ref{sec:building}. A short description
of the preconditioners implemented in MLD2P4 is provided in Section~\ref{sec:background},
to help the users in choosing among them. The basics for building and applying the
preconditioners with the Krylov solvers implemented in PSBLAS are reported
in~Section~\ref{sec:started}, where the Fortran codes of a few sample programs
are also shown. A reference guide for the user interface routines is provided
in Section~\ref{sec:userinterface}. Information on the extension of the package
through the addition of new smoothers and solvers is reported in Section~\ref{sec:adding}.
The error handling mechanism used by the package
is briefly described in Section~\ref{sec:errors}. The copyright terms concerning the
distribution and modification of MLD2P4 are reported in Appendix~\ref{sec:license}.
%%% Local Variables:
%%% mode: latex

@ -154,7 +154,6 @@ based on PSBLAS}
\include{overview}
\include{distribution}
\include{building}
\include{background}
\include{gettingstarted}
\include{userinterface}
@ -162,7 +161,7 @@ based on PSBLAS}
\clearpage
\appendix
\include{license}
\cleardoublepage
\clearpage
\include{bibliography}
\end{document}

@ -4,7 +4,7 @@
The basic user interface of MLD2P4 consists of eight routines. The six
routines \verb|init|, \verb|set|,
\verb|hierarchy_bld|, \verb|smoothers_bld|,
\verb|hierarchy_build|, \verb|smoothers_build|,
\verb|bld|, and \verb|apply| encapsulate all the
functionalities for the setup and the application of any multi-level and one-level
preconditioner implemented in the package.
@ -199,10 +199,9 @@ coarsest-level solvers, and shortcuts are available
in this case too (see Table~\ref{tab:p_coarse}). \\
\textbf{Remark 3.} In general, a coarsest-level solver cannot be used with
both the replicated and distributed coarsest-matrix layout, and vice versa;
therefore, setting the solver after the layout may change the layout, and setting
the layout after the solver may change the solver, if the choices of the two
parameters do not agree.
both the replicated and distributed coarsest-matrix layout;
therefore, setting the solver after the layout may change the layout.
Similarly, setting the layout after the solver may change the solver.
More precisely, UMFPACK and SuperLU require the coarsest-level
matrix to be replicated, while SuperLU\_Dist requires it to be distributed.
@ -368,7 +367,9 @@ of levels. } \\
& How the damping parameter $\omega$ in the
smoothed aggregation is obtained:
either via an estimate of the spectral radius of
$D^{-1}A$, or explicily
$D^{-1}A$, where $A$ is the matrix at the current
level and $D$ is the diagonal matrix with
the same diagonal entires as $A$, or explicily
specified by the user. \\ \hline
\verb|mld_aggr_eig_| \par \verb|AGGR_EIG| & \verb|character(len=*)|
& \texttt{'A\_NORMI'}
@ -420,13 +421,13 @@ the parameter \texttt{ilev}.} \\
& \texttt{'MUMPS'} \par \texttt{'UMF'} \par
\texttt{'SLU'} \par \texttt{'SLUDIST'} \par
\texttt{'JACOBI'} \par \texttt{'GS'} \par \texttt{'BJAC'}
& See~Note~1
& See~Note.
& Solver used at the coarsest level: sequential
LU from MUMPS, UMFPACK, or SuperLU
(plus tri\-an\-gular solve);
distributed LU from MUMPS or SuperLU\_Dist
(plus triangular solve);
point-Jacobi, hybrid Gauss-Seidel (see Note~2) or block-Jacobi. \par
point-Jacobi, hybrid Gauss-Seidel or block-Jacobi. \par
Note that \texttt{UMF} and \texttt{SLU} require the coarsest
matrix to be replicated, \texttt{SLUDIST}, \texttt{JACOBI},
\texttt{GS} and \texttt{BJAC} require it to be
@ -440,7 +441,7 @@ the parameter \texttt{ilev}.} \\
\verb|mld_coarse_subsolve_| \par \verb|COARSE_SUBSOLVE| & \verb|character(len=*)|
& \texttt{'ILU'} \par \texttt{'ILUT'} \par \texttt{'MILU'} \par
\texttt{'MUMPS'} \par \texttt{'SLU'} \par \texttt{'UMF'}
& See~Note~1
& See~Note.
& Solver for the diagonal blocks of the coarse matrix,
in case the block Jacobi solver
is chosen as coarsest-level solver: ILU($p$), ILU($p,t$),
@ -449,7 +450,7 @@ the parameter \texttt{ilev}.} \\
Note that UMFPACK and SuperLU\_Dist
are available only in double precision. \\
\hline
\multicolumn{5}{|l|}{{\bfseries Note 1.} Defaults for \texttt{mld\_coarse\_solve\_} and
\multicolumn{5}{|l|}{{\bfseries Note.} Defaults for \texttt{mld\_coarse\_solve\_} and
\texttt{mld\_coarse\_subsolve\_} are chosen in the following order:} \\
\multicolumn{5}{|l|}{single precision version -- \texttt{MUMPS} if installed,
then \texttt{SLU} if installed,
@ -457,11 +458,6 @@ the parameter \texttt{ilev}.} \\
\multicolumn{5}{|l|}{double precision version -- \texttt{UMF} if installed,
then \texttt{MUMPS} if installed, then \texttt{SLU} if
installed, \texttt{ILU} otherwise.}\\
\multicolumn{5}{|l|}{{\bfseries Note 2.} The hybrid Gauss-Seidel method is
between the Gauss-Seidel and Jacobi methods: at each iteration, the process-} \\
\multicolumn{5}{|l|}{es use the most recent values of their own local variables, and the values of
the non-local variables computed at the previ-}\\
\multicolumn{5}{|l|}{ous iteration.}\\
\hline
\end{tabular}
\end{center}
@ -512,7 +508,7 @@ level (continued).\label{tab:p_coarse_1}}
& Type of smoother used in the multi-level preconditioner:
point-Jacobi, hybrid (forward) Gauss-Seidel,
hybrid backward Gauss-Seidel, block-Jacobi, and
Additive Schwarz. See Note for details on hybrix Gauss-Seidel.\par
Additive Schwarz. \par
It is ignored by one-level preconditioners. \\ \hline
\verb|mld_sub_solve_| \par \verb|SUB_SOLVE| & \verb|character(len=*)|
& \texttt{'JACOBI'} \par
@ -541,11 +537,7 @@ level (continued).\label{tab:p_coarse_1}}
\verb|mld_sub_ovr_| \par \verb|SUB_OVR| & \verb|integer|
& Any integer \par number~$\ge 0$
& 1
& Number of overlap layers, for Additive Schwarz only. \\ \hline
\multicolumn{5}{|l|}{{\bfseries Note.} The hybrid Gauss-Seidel method is
between the Gauss-Seidel and Jacobi methods: at each iteration, the processes use the} \\
\multicolumn{5}{|l|}{most recent values of their own local variables, and the values of
the non-local variables computed at the previous iteration.}\\
& Number of overlap layers, for Additive Schwarz only. \\
\hline
\end{tabular}
\end{center}
@ -565,13 +557,17 @@ the non-local variables computed at the previous iteration.}\\
& \texttt{'HALO'}
& Type of restriction operator, for Additive Schwarz only:
\texttt{HALO} for taking into account the overlap, \texttt{NONE}
for neglecting it. \\ \hline
for neglecting it. \par
Note that \texttt{HALO} must be chosen for
the classical Addditive Schwarz smoother and its RAS variant.\\ \hline
\verb|mld_sub_prol_| \par \verb|SUB_PROL| & \verb|character(len=*)|
& \texttt{'SUM'} \par \texttt{'NONE'}
& \texttt{'NONE'}
& Type of prolongation operator, for Additive Schwarz only:
\texttt{SUM} for adding the contributions from the overlap, \texttt{NONE}
for neglecting them. \\ \hline
for neglecting them. \par
Note that \texttt{SUM} must be chosen for the classical Additive
Schwarz smoother, and \texttt{NONE} for its RAS variant. \\ \hline
\verb|mld_sub_fillin_| \par \verb|SUB_FILLIN| & \verb|integer|
& Any integer \par number~$\ge 0$
& 0
@ -601,16 +597,16 @@ the non-local variables computed at the previous iteration.}\\
\clearpage
\subsection{Subroutine bld\label{sec:precbld}}
\subsection{Subroutine build\label{sec:precbld}}
\begin{center}
\verb|call p%bld(a,desc_a,info)|\\
\verb|call p%build(a,desc_a,info)|\\
\end{center}
\noindent
This routine builds the one-level preconditioner \verb|p| according to the requirements
made by the user through the routines \verb|init| and \verb|set|
(see Sections~\ref{sec:hier_bld} and~\ref{sec:smoothers_bld} for multi-level preconditioners).
(see Sections~\ref{sec:hier_bld} and~\ref{sec:smooth_bld} for multi-level preconditioners).
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
@ -643,10 +639,10 @@ In this case, the routine can be used to build multi-level preconditioners too.
\clearpage
\subsection{Subroutine hierarchy\_bld\label{sec:hier_bld}}
\subsection{Subroutine hierarchy\_build\label{sec:hier_bld}}
\begin{center}
\verb|call p%hierarchy_bld(a,desc_a,info)|\\
\verb|call p%hierarchy_build(a,desc_a,info)|\\
\end{center}
\noindent
@ -676,18 +672,18 @@ single/double precision version of MLD2P4 under use.
\clearpage
\subsection{Subroutine smoothers\_bld\label{sec:smoothers_bld}}
\subsection{Subroutine smoothers\_build\label{sec:smooth_bld}}
\begin{center}
\verb|call p%smoothers_bld(a,desc_a,p,info)|\\
\verb|call p%smoothers_build(a,desc_a,p,info)|\\
\end{center}
\noindent
This routine builds the smoothers and the coarsest-level solvers for the
multi-level preconditioner \verb|p|, according to the requirements made by
the user through the routines \verb|init| and \verb|set|, and based on the aggregation
hierarchy produced by a previous call to \verb|hierarchy_bld|
hierarchy produced by a previous call to \verb|hierarchy_build|
(see Section~\ref{sec:hier_bld}).
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
@ -804,8 +800,8 @@ as follows:
\noindent
This routine prints a description of the preconditioner \verb|p| to the standard output or
to a file. It must be called after \verb|hierachy_bld| and \verb|smoothers_bld|,
or \verb|bld|, have been called.
to a file. It must be called after \verb|hierachy_build| and \verb|smoothers_build|,
or \verb|build|, have been called.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip

Loading…
Cancel
Save