mld2p4:
copyright and internal doc adjustments for version 1.1.
@@ -1,11 +1,11 @@
|
||||
|
||||
MLD2P4 version 1.0.1
|
||||
MLD2P4 version 1.1
|
||||
MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
|
||||
(C) Copyright 2008
|
||||
(C) Copyright 2008,2009
|
||||
|
||||
Salvatore Filippone University of Rome Tor Vergata
|
||||
Salvatore Filippone University of Rome Tor Vergata
|
||||
Alfredo Buttari University of Rome Tor Vergata
|
||||
Pasqua D'Ambra ICAR-CNR, Naples
|
||||
Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
This directory contains the MLD2P4 set of preconditioners, version 1.0.1
|
||||
This directory contains the MLD2P4 set of preconditioners, version 1.1
|
||||
|
||||
WHAT'S NEW
|
||||
|
||||
In version 1.0.1:
|
||||
In version 1.1:
|
||||
- The MLD_SIZEOF() function has been redefined to be INTEGER(8), so
|
||||
as to be able to measure large data sets.
|
||||
- The internals of the multilevel preconditioner have been repackaged
|
||||
|
||||
@@ -38,11 +38,11 @@ dnl NOTE : odd configurations like ifc + gcc still await in the mist of the unkn
|
||||
###############################################################################
|
||||
|
||||
# NOTE: the literal for version (the second argument to AC_INIT should be a literal!)
|
||||
AC_INIT([MLD2P4],1.0.1, bugreport@mld2p4.it)
|
||||
AC_INIT([MLD2P4],1.1, bugreport@mld2p4.it)
|
||||
|
||||
# VERSION is the file containing the PSBLAS version code
|
||||
# FIXME
|
||||
mld2p4_cv_version="`cat VERSION`"
|
||||
mld2p4_cv_version="1.1"
|
||||
|
||||
# A sample source file
|
||||
AC_CONFIG_SRCDIR([mlprec/mld_prec_type.f90])
|
||||
|
||||
|
Before Width: | Height: | Size: 376 B After Width: | Height: | Size: 368 B |
|
Before Width: | Height: | Size: 678 B After Width: | Height: | Size: 647 B |
|
Before Width: | Height: | Size: 372 B After Width: | Height: | Size: 683 B |
|
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 375 B |
|
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 768 B After Width: | Height: | Size: 802 B |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 275 B |
|
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 355 B After Width: | Height: | Size: 296 B |
|
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 359 B |
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 263 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 366 B |
|
Before Width: | Height: | Size: 445 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 445 B |
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 201 B |
|
Before Width: | Height: | Size: 501 B After Width: | Height: | Size: 338 B |
|
Before Width: | Height: | Size: 517 B After Width: | Height: | Size: 507 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 521 B |
|
Before Width: | Height: | Size: 279 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 222 B After Width: | Height: | Size: 283 B |
|
Before Width: | Height: | Size: 486 B After Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 456 B After Width: | Height: | Size: 490 B |
|
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 464 B |
|
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 222 B |
|
Before Width: | Height: | Size: 200 B After Width: | Height: | Size: 564 B |
|
Before Width: | Height: | Size: 345 B After Width: | Height: | Size: 198 B |
|
Before Width: | Height: | Size: 303 B After Width: | Height: | Size: 351 B |
|
Before Width: | Height: | Size: 210 B After Width: | Height: | Size: 304 B |
|
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 212 B |
|
Before Width: | Height: | Size: 190 B After Width: | Height: | Size: 280 B |
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 191 B |
|
Before Width: | Height: | Size: 223 B After Width: | Height: | Size: 364 B |
|
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 226 B |
|
Before Width: | Height: | Size: 497 B After Width: | Height: | Size: 687 B |
|
Before Width: | Height: | Size: 272 B After Width: | Height: | Size: 495 B |
|
Before Width: | Height: | Size: 649 B After Width: | Height: | Size: 275 B |
|
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 636 B |
|
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 259 B |
|
Before Width: | Height: | Size: 222 B After Width: | Height: | Size: 202 B |
|
Before Width: | Height: | Size: 648 B After Width: | Height: | Size: 218 B |
@@ -65,9 +65,9 @@ University of Rome ``Tor Vergata'', Italy
|
||||
<BR>
|
||||
<BR>
|
||||
<BR>
|
||||
Software version: 1.0
|
||||
Software version: 1.1
|
||||
<BR>
|
||||
Sept. 9th, 2008
|
||||
March 13, 2009
|
||||
|
||||
<BR>
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ MLD2P4 (M<SMALL>ULTI-</SMALL>L<SMALL>EVEL </SMALL>D<SMALL>OMAIN </SMALL>D<SMALL>
|
||||
It implements various versions of one-level additive and of multi-level additive
|
||||
and hybrid Schwarz algorithms. 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 required to be square, real
|
||||
concerning the matrix to be preconditioned. The matrix is assumed to be square, real
|
||||
or complex, with a symmetric sparsity pattern.
|
||||
|
||||
<P>
|
||||
|
||||
@@ -135,11 +135,11 @@ of this algorithm is implemented, where the smoothed aggregation is applied loca
|
||||
to each submatrix [<A
|
||||
HREF="node25.html#TUMINARO_TONG">23</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 user
|
||||
aggregation technique as implemented in MLD2P4. For further details the reader
|
||||
is referred to [<A
|
||||
HREF="node25.html#para_04">2</A>,<A
|
||||
HREF="node25.html#aaecc_07">3</A>,<A
|
||||
HREF="node25.html#apnum_07">4</A>,<A
|
||||
HREF="node25.html#apnum_07">4</A>,,<A
|
||||
HREF="node25.html#dd2_96">20</A>].
|
||||
|
||||
<P>
|
||||
|
||||
@@ -276,7 +276,7 @@ three steps:
|
||||
ALT="$i=1,\ldots,m$">;
|
||||
</LI>
|
||||
<LI>prolongation and sum of the <IMG
|
||||
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
WIDTH="23" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img32.png"
|
||||
ALT="$w_i$">'s, i.e. <!-- MATH
|
||||
$w = \sum_{i=1}^m (R_i^{\delta})^T w_i$
|
||||
@@ -309,7 +309,7 @@ time on parallel distributed-memory computers is the so-called <I>Restricted AS
|
||||
HREF="node25.html#CAI_SARKIS">5</A>,<A
|
||||
HREF="node25.html#EFSTATHIOU">13</A>]. It
|
||||
is obtained by zeroing the components of <IMG
|
||||
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
WIDTH="23" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img32.png"
|
||||
ALT="$w_i$"> corresponding to the
|
||||
overlapping vertices when applying the prolongation. Therefore,
|
||||
@@ -405,7 +405,7 @@ In a pure algebraic setting, <IMG
|
||||
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img43.png"
|
||||
ALT="$A_C$"> is usually built with
|
||||
a Galerkin approach. Given a set <IMG
|
||||
the Galerkin approach. Given a set <IMG
|
||||
WIDTH="32" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img44.png"
|
||||
ALT="$W_C$"> of <I>coarse vertices</I>,
|
||||
@@ -683,7 +683,11 @@ and the corresponding basic preconditioner at each level <IMG
|
||||
ALT="$M_l$">, respectively, with <IMG
|
||||
WIDTH="61" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img65.png"
|
||||
ALT="$A_1=A$">.
|
||||
ALT="$A_1=A$">, while the related restriction operator is
|
||||
denoted by <IMG
|
||||
WIDTH="23" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img66.png"
|
||||
ALT="$R_l$">.
|
||||
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:mlhpost_alg"></A><A NAME="508"></A>
|
||||
<TABLE>
|
||||
@@ -720,14 +724,14 @@ $w = y_1$;
|
||||
}$
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="430" HEIGHT="435" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img66.png"
|
||||
WIDTH="429" HEIGHT="435" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img67.png"
|
||||
ALT="\framebox{
|
||||
\begin{minipage}{.85\textwidth} {\small
|
||||
\begin{tabbing}
|
||||
\quad \=\quad...
|
||||
...= y_l+r_l$\\
|
||||
\textbf{endfor} [1mm]
|
||||
\textbf{endfor} \\ [1mm]
|
||||
$w = y_1$;
|
||||
\end{tabbing}}
|
||||
\end{minipage}}">
|
||||
|
||||
@@ -62,7 +62,7 @@ Smoothed Aggregation
|
||||
<P>
|
||||
In order to define the restriction operator <IMG
|
||||
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img67.png"
|
||||
SRC="img68.png"
|
||||
ALT="$R_C$">, which is used to compute
|
||||
the coarse-level matrix <IMG
|
||||
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
@@ -81,7 +81,7 @@ The basic idea of this algorithm is to build a coarse set of vertices
|
||||
ALT="$W$"> into disjoint subsets
|
||||
(aggregates), and to define the coarse-to-fine space transfer operator <IMG
|
||||
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img68.png"
|
||||
SRC="img69.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.
|
||||
@@ -100,15 +100,15 @@ Three main steps can be identified in the smoothed aggregation procedure:
|
||||
</LI>
|
||||
<LI>construction of the prolongator <IMG
|
||||
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img68.png"
|
||||
SRC="img69.png"
|
||||
ALT="$R_C^T$">;
|
||||
</LI>
|
||||
<LI>application of <IMG
|
||||
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img67.png"
|
||||
SRC="img68.png"
|
||||
ALT="$R_C$"> and <IMG
|
||||
WIDTH="29" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img68.png"
|
||||
SRC="img69.png"
|
||||
ALT="$R_C^T$"> to build <IMG
|
||||
WIDTH="29" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img43.png"
|
||||
@@ -124,14 +124,14 @@ in [<A
|
||||
this algorithm has been actually considered,
|
||||
in which each aggregate <IMG
|
||||
WIDTH="26" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img69.png"
|
||||
SRC="img70.png"
|
||||
ALT="$N_r$"> is made of vertices of <IMG
|
||||
WIDTH="24" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img10.png"
|
||||
ALT="$W$"> that are <I>strongly coupled</I>
|
||||
to a certain root vertex <IMG
|
||||
WIDTH="53" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img70.png"
|
||||
SRC="img71.png"
|
||||
ALT="$r \in W$">, i.e. <BR><P></P>
|
||||
<DIV ALIGN="CENTER">
|
||||
<!-- MATH
|
||||
@@ -143,7 +143,7 @@ N_r = \left\{s \in W: |a_{rs}| > \theta \sqrt{|a_{rr}a_{ss}|} \right\}
|
||||
|
||||
<IMG
|
||||
WIDTH="319" HEIGHT="38" BORDER="0"
|
||||
SRC="img71.png"
|
||||
SRC="img72.png"
|
||||
ALT="\begin{displaymath}N_r = \left\{s \in W: \vert a_{rs}\vert > \theta \sqrt{\vert a_{rr}a_{ss}\vert} \right\}
|
||||
\cup \left\{ r \right\} ,
|
||||
\end{displaymath}">
|
||||
@@ -155,16 +155,16 @@ for a given <!-- MATH
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="69" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img72.png"
|
||||
SRC="img73.png"
|
||||
ALT="$\theta \in [0,1]$">.
|
||||
Since this algorithm has a sequential nature, a <I>decoupled</I> version of
|
||||
it has been chosen, where each processor <IMG
|
||||
WIDTH="10" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img73.png"
|
||||
WIDTH="11" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img74.png"
|
||||
ALT="$i$"> independently applies the algorithm to
|
||||
the set of vertices <IMG
|
||||
WIDTH="31" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img74.png"
|
||||
SRC="img75.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,
|
||||
@@ -183,14 +183,14 @@ since it has been shown to produce good results in practice
|
||||
<P>
|
||||
The prolongator <IMG
|
||||
WIDTH="75" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img75.png"
|
||||
SRC="img76.png"
|
||||
ALT="$P_C=R_C^T$"> is built starting from a <I>tentative prolongator</I>
|
||||
<!-- MATH
|
||||
$P \in \Re^{n \times n_C}$
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="90" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img76.png"
|
||||
WIDTH="89" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img77.png"
|
||||
ALT="$P \in \Re^{n \times n_C}$">, defined as
|
||||
<BR>
|
||||
<DIV ALIGN="RIGHT">
|
||||
@@ -207,7 +207,7 @@ P=(p_{ij}), \quad p_{ij}=
|
||||
<TABLE WIDTH="100%" ALIGN="CENTER">
|
||||
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:tent_prol"></A><IMG
|
||||
WIDTH="290" HEIGHT="52" BORDER="0"
|
||||
SRC="img77.png"
|
||||
SRC="img78.png"
|
||||
ALT="\begin{displaymath}
|
||||
P=(p_{ij}), \quad p_{ij}=
|
||||
\left\{ \begin{array}{ll}
|
||||
@@ -222,17 +222,17 @@ P=(p_{ij}), \quad p_{ij}=
|
||||
<BR CLEAR="ALL"></DIV><P></P>
|
||||
<IMG
|
||||
WIDTH="27" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img78.png"
|
||||
SRC="img79.png"
|
||||
ALT="$P_C$"> is obtained by
|
||||
applying to <IMG
|
||||
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img79.png"
|
||||
SRC="img80.png"
|
||||
ALT="$P$"> a smoother <!-- MATH
|
||||
$S \in \Re^{n \times n}$
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="78" HEIGHT="38" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img80.png"
|
||||
SRC="img81.png"
|
||||
ALT="$S \in \Re^{n \times n}$">:
|
||||
<BR>
|
||||
<DIV ALIGN="RIGHT">
|
||||
@@ -245,7 +245,7 @@ P_C = S P,
|
||||
<TABLE WIDTH="100%" ALIGN="CENTER">
|
||||
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:smoothed_prol"></A><IMG
|
||||
WIDTH="73" HEIGHT="30" BORDER="0"
|
||||
SRC="img81.png"
|
||||
SRC="img82.png"
|
||||
ALT="\begin{displaymath}
|
||||
P_C = S P,
|
||||
\end{displaymath}"></TD>
|
||||
@@ -260,7 +260,7 @@ Schwarz method [<A
|
||||
HREF="node25.html#StubenGMD69_99">22</A>].
|
||||
A simple choice for <IMG
|
||||
WIDTH="16" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img82.png"
|
||||
SRC="img83.png"
|
||||
ALT="$S$"> is the damped Jacobi smoother:
|
||||
<BR>
|
||||
<DIV ALIGN="RIGHT">
|
||||
@@ -273,7 +273,7 @@ S = I - \omega D^{-1} A ,
|
||||
<TABLE WIDTH="100%" ALIGN="CENTER">
|
||||
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="eq:jac_smoother"></A><IMG
|
||||
WIDTH="126" HEIGHT="30" BORDER="0"
|
||||
SRC="img83.png"
|
||||
SRC="img84.png"
|
||||
ALT="\begin{displaymath}
|
||||
S = I - \omega D^{-1} A ,
|
||||
\end{displaymath}"></TD>
|
||||
@@ -283,11 +283,11 @@ S = I - \omega D^{-1} A ,
|
||||
<BR CLEAR="ALL"></DIV><P></P>
|
||||
where the value of <IMG
|
||||
WIDTH="16" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img84.png"
|
||||
SRC="img85.png"
|
||||
ALT="$\omega$"> can be chosen
|
||||
using some estimate of the spectral radius of <IMG
|
||||
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img85.png"
|
||||
WIDTH="51" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img86.png"
|
||||
ALT="$D^{-1}A$"> [<A
|
||||
HREF="node25.html#BREZINA_VANEK">1</A>].
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ compilers.
|
||||
|
||||
<P>
|
||||
<BR><P></P>
|
||||
<DIV ALIGN="CENTER"><A NAME="923"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="925"></A>
|
||||
<TABLE>
|
||||
<CAPTION><STRONG>Table 1:</STRONG>
|
||||
Preconditioner types, corresponding strings and default choices.
|
||||
@@ -185,12 +185,12 @@ Preconditioner types, corresponding strings and default choices.
|
||||
Aggregation: decoupled smoothed aggregation with
|
||||
threshold <IMG
|
||||
WIDTH="45" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img86.png"
|
||||
SRC="img87.png"
|
||||
ALT="$\theta = 0$">.
|
||||
Coarsest matrix: distributed among the processors.
|
||||
Coarsest-level solver:
|
||||
4 sweeps of the block-Jacobi solver,
|
||||
with LU (or ILU) factorization of the blocks
|
||||
with LU or ILU factorization of the blocks
|
||||
(UMFPACK for the double precision versions and
|
||||
SuperLU for the single precision ones, if the packages
|
||||
have been installed; ILU(0), otherwise).</TD>
|
||||
|
||||
@@ -90,7 +90,7 @@ the corresponding Fortran 95 codes are available in <code>examples/fileread/</co
|
||||
|
||||
<P>
|
||||
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_default"></A><A NAME="926"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_default"></A><A NAME="928"></A>
|
||||
<TABLE>
|
||||
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
|
||||
Setup and application of the default multi-level Schwarz preconditioner.
|
||||
@@ -207,7 +207,7 @@ and linked to the MLD2P4 library.
|
||||
<BR>
|
||||
<P>
|
||||
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_3lh"></A><A NAME="928"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_3lh"></A><A NAME="930"></A>
|
||||
<TABLE>
|
||||
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
|
||||
Setup of a hybrid three-level Schwarz preconditioner.</CAPTION>
|
||||
@@ -239,7 +239,7 @@ Setup of a hybrid three-level Schwarz preconditioner.</CAPTION>
|
||||
|
||||
<P>
|
||||
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_3la"></A><A NAME="930"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_3la"></A><A NAME="932"></A>
|
||||
<TABLE>
|
||||
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4:</STRONG>
|
||||
Setup of an additive three-level Schwarz preconditioner.</CAPTION>
|
||||
@@ -271,7 +271,7 @@ Setup of an additive three-level Schwarz preconditioner.</CAPTION>
|
||||
|
||||
<P>
|
||||
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_1l"></A><A NAME="932"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="fig:ex_1l"></A><A NAME="934"></A>
|
||||
<TABLE>
|
||||
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 5:</STRONG>
|
||||
Setup of a one-level Schwarz preconditioner.</CAPTION>
|
||||
|
||||
@@ -90,8 +90,8 @@ i.e.
|
||||
WIDTH="13" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img21.png"
|
||||
ALT="$v$"> and <IMG
|
||||
WIDTH="17" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img87.png"
|
||||
WIDTH="18" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img88.png"
|
||||
ALT="$w$"> involved in
|
||||
the preconditioner application <IMG
|
||||
WIDTH="87" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
|
||||
@@ -137,7 +137,7 @@ refer to Section <A HREF="node11.html#sec:background">4</A>.
|
||||
|
||||
<P>
|
||||
<BR><P></P>
|
||||
<DIV ALIGN="CENTER"><A NAME="1260"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="1262"></A>
|
||||
<TABLE>
|
||||
<CAPTION><STRONG>Table 2:</STRONG>
|
||||
Parameters defining the type of multi-level preconditioner.
|
||||
@@ -181,7 +181,7 @@ Parameters defining the type of multi-level preconditioner.
|
||||
|
||||
<P>
|
||||
<BR><P></P>
|
||||
<DIV ALIGN="CENTER"><A NAME="1262"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="1264"></A>
|
||||
<TABLE>
|
||||
<CAPTION><STRONG>Table 3:</STRONG>
|
||||
Parameters defining the one-level preconditioner used as smoother.
|
||||
@@ -198,8 +198,8 @@ Parameters defining the one-level preconditioner used as smoother.
|
||||
<TR><TD ALIGN="LEFT"><code>mld_sub_ovr_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>integer</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>any int. num. <IMG
|
||||
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img88.png"
|
||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img89.png"
|
||||
ALT="$\ge 0$"></TD>
|
||||
<TD ALIGN="LEFT">1</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Number of overlap layers.</TD>
|
||||
@@ -240,8 +240,8 @@ Parameters defining the one-level preconditioner used as smoother.
|
||||
<TR><TD ALIGN="LEFT"><code>mld_sub_fillin_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>integer</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any int. num. <IMG
|
||||
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img88.png"
|
||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img89.png"
|
||||
ALT="$\ge 0$"></TD>
|
||||
<TD ALIGN="LEFT">0</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Fill-in level <IMG
|
||||
@@ -252,13 +252,13 @@ Parameters defining the one-level preconditioner used as smoother.
|
||||
<TR><TD ALIGN="LEFT"><code>mld_sub_iluthrs_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any real num. <IMG
|
||||
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img88.png"
|
||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img89.png"
|
||||
ALT="$\ge 0$"></TD>
|
||||
<TD ALIGN="LEFT">0</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Drop tolerance <IMG
|
||||
WIDTH="11" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img89.png"
|
||||
SRC="img90.png"
|
||||
ALT="$t$"> in the ILU(<IMG
|
||||
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img35.png"
|
||||
@@ -281,7 +281,7 @@ Parameters defining the one-level preconditioner used as smoother.
|
||||
|
||||
<P>
|
||||
<BR><P></P>
|
||||
<DIV ALIGN="CENTER"><A NAME="1264"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="1266"></A>
|
||||
<TABLE>
|
||||
<CAPTION><STRONG>Table 4:</STRONG>
|
||||
Parameters defining the aggregation algorithm.
|
||||
@@ -304,20 +304,21 @@ Parameters defining the aggregation algorithm.
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT"><code>mld_aggr_kind_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>character(len=*)</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'SMOOTH'</TT> <TT>'RAW'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'SMOOTH'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Type of aggregation: smoothed, raw (i.e. using the tentative prolongator).</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'SMOOTHED'</TT> <TT>'NONSMOOTHED'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'SMOOTHED'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Type of aggregation: smoothed, nonsmoothed
|
||||
(i.e. using the tentative prolongator).</TD>
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT"><code>mld_aggr_thresh_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68>Any real num. <IMG
|
||||
WIDTH="56" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img90.png"
|
||||
SRC="img91.png"
|
||||
ALT="$\in [0, 1]$"></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68>0</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Threshold <IMG
|
||||
WIDTH="13" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img91.png"
|
||||
SRC="img92.png"
|
||||
ALT="$\theta$"> in the aggregation algorithm.</TD>
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT"><code>mld_aggr_omega_alg_</code></TD>
|
||||
@@ -326,13 +327,13 @@ Parameters defining the aggregation algorithm.
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'EIG_EST'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>How the damping parameter <IMG
|
||||
WIDTH="16" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img84.png"
|
||||
SRC="img85.png"
|
||||
ALT="$\omega$"> in the
|
||||
smoothed aggregation should be computed:
|
||||
either via an estimate of the spectral radius of
|
||||
<IMG
|
||||
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img85.png"
|
||||
WIDTH="51" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img86.png"
|
||||
ALT="$D^{-1}A$">, or explicily
|
||||
specified by the user.</TD>
|
||||
</TR>
|
||||
@@ -341,8 +342,8 @@ Parameters defining the aggregation algorithm.
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'A_NORMI'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'A_NORMI'</TT></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>How to estimate the spectral radius of <IMG
|
||||
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img85.png"
|
||||
WIDTH="51" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img86.png"
|
||||
ALT="$D^{-1}A$">.
|
||||
Currently only the infinity norm estimate
|
||||
is available.</TD>
|
||||
@@ -355,11 +356,11 @@ Parameters defining the aggregation algorithm.
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="113" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img92.png"
|
||||
SRC="img93.png"
|
||||
ALT="$4/(3\rho(D^{-1}A))$"></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Damping parameter <IMG
|
||||
WIDTH="16" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img84.png"
|
||||
SRC="img85.png"
|
||||
ALT="$\omega$"> in the smoothed aggregation algorithm.
|
||||
It must be set by the user if
|
||||
<code>USER_CHOICE</code> was specified for
|
||||
@@ -367,11 +368,11 @@ Parameters defining the aggregation algorithm.
|
||||
otherwise it is computed by the library, using the
|
||||
selected estimate of the spectral radius <IMG
|
||||
WIDTH="73" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img93.png"
|
||||
SRC="img94.png"
|
||||
ALT="$\rho(D^{-1}A)$"> of
|
||||
<IMG
|
||||
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img85.png"
|
||||
WIDTH="51" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img86.png"
|
||||
ALT="$D^{-1}A$">.</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
@@ -383,7 +384,7 @@ Parameters defining the aggregation algorithm.
|
||||
|
||||
<P>
|
||||
<BR><P></P>
|
||||
<DIV ALIGN="CENTER"><A NAME="1267"></A>
|
||||
<DIV ALIGN="CENTER"><A NAME="1269"></A>
|
||||
<TABLE>
|
||||
<CAPTION><STRONG>Table 5:</STRONG>
|
||||
Parameters defining the coarse-space correction at the coarsest
|
||||
@@ -440,8 +441,8 @@ level.</CAPTION>
|
||||
<TR><TD ALIGN="LEFT"><code>mld_coarse_sweeps_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>integer</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any int. num. <IMG
|
||||
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img94.png"
|
||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img95.png"
|
||||
ALT="$> 0$"></TD>
|
||||
<TD ALIGN="LEFT">4</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Number of Block-Jacobi sweeps when 'BJAC' is used as
|
||||
@@ -450,8 +451,8 @@ level.</CAPTION>
|
||||
<TR><TD ALIGN="LEFT"><code>mld_coarse_fillin_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>integer</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any int. num. <IMG
|
||||
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img88.png"
|
||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img89.png"
|
||||
ALT="$\ge 0$"></TD>
|
||||
<TD ALIGN="LEFT">0</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Fill-in level <IMG
|
||||
@@ -462,24 +463,24 @@ level.</CAPTION>
|
||||
<TR><TD ALIGN="LEFT"><code>mld_coarse_iluthrs_</code></TD>
|
||||
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any real. num. <IMG
|
||||
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img88.png"
|
||||
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img89.png"
|
||||
ALT="$\ge 0$"></TD>
|
||||
<TD ALIGN="LEFT">0</TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=198>Drop tolerance <IMG
|
||||
WIDTH="11" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img89.png"
|
||||
SRC="img90.png"
|
||||
ALT="$t$"> in the ILU(<IMG
|
||||
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img35.png"
|
||||
ALT="$p,t$">) factorization.</TD>
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT" COLSPAN=5><B>Note</B> Defaults for
|
||||
<TR><TD ALIGN="LEFT" COLSPAN=5><B>Note:</B> defaults for
|
||||
<TT>m</TT>ld_coarse_subsolve_ are chosen as</TD>
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT" COLSPAN=5>Single precision version: 'SLU' if installed, 'ILU' otherwise</TD>
|
||||
<TR><TD ALIGN="LEFT" COLSPAN=5>single precision version: 'SLU' if installed, 'ILU' otherwise</TD>
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT" COLSPAN=5>Double precision version: 'UMF' if installed,
|
||||
<TR><TD ALIGN="LEFT" COLSPAN=5>double precision version: 'UMF' if installed,
|
||||
else 'SLU' if installed, 'ILU' otherwise</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
@@ -72,20 +72,20 @@ This routine computes <!-- MATH
|
||||
$y = op(M^{-1})\, x$
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="117" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img95.png"
|
||||
WIDTH="118" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img96.png"
|
||||
ALT="$y = op(M^{-1})\, x$">, where <IMG
|
||||
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img59.png"
|
||||
ALT="$M$"> is a previously built
|
||||
preconditioner, stored into <code>p</code>, and <IMG
|
||||
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img96.png"
|
||||
WIDTH="21" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img97.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>mld_precaply</code> is called within the PSBLAS routine <code>mld_krylov</code>
|
||||
<code>mld_precaply</code> is called within the PSBLAS routine <code>psb_krylov</code>
|
||||
and hence it is completely transparent to the user.
|
||||
|
||||
<P>
|
||||
@@ -109,8 +109,8 @@ and hence it is completely transparent to the user.
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34> </TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
|
||||
WIDTH="14" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img97.png"
|
||||
WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
|
||||
SRC="img98.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>
|
||||
@@ -120,8 +120,8 @@ and hence it is completely transparent to the user.
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34> </TD>
|
||||
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
|
||||
WIDTH="14" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img98.png"
|
||||
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img99.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>
|
||||
@@ -148,28 +148,28 @@ and hence it is completely transparent to the user.
|
||||
-->
|
||||
<IMG
|
||||
WIDTH="132" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img99.png"
|
||||
SRC="img100.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="img100.png"
|
||||
SRC="img101.png"
|
||||
ALT="$op(M^{-1}) = M^{-T}$">
|
||||
(transpose of <IMG
|
||||
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img101.png"
|
||||
SRC="img102.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="img102.png"
|
||||
SRC="img103.png"
|
||||
ALT="$op(M^{-1}) = M^{-C}$">
|
||||
(conjugate transpose of <IMG
|
||||
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
|
||||
SRC="img101.png"
|
||||
SRC="img102.png"
|
||||
ALT="$M^{-1})$">.</TD>
|
||||
</TR>
|
||||
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>work</code></TD>
|
||||
|
||||
@@ -63,11 +63,11 @@ License
|
||||
<P>
|
||||
The MLD2P4 is freely distributable under the following copyright
|
||||
terms: <PRE>
|
||||
MLD2P4 version 1.0
|
||||
MLD2P4 version 1.1
|
||||
MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
based on PSBLAS (Parallel Sparse BLAS version 2.3)
|
||||
|
||||
(C) Copyright 2008
|
||||
(C) Copyright 2008, 2009
|
||||
|
||||
Salvatore Filippone University of Rome Tor Vergata
|
||||
Alfredo Buttari University of Rome Tor Vergata
|
||||
|
||||
@@ -67,7 +67,7 @@ Mathematics Department, Macquarie University, Sydney.
|
||||
The command line arguments were: <BR>
|
||||
<STRONG>latex2html</STRONG> <TT>-noaddress -dir ../../html userhtml.tex</TT>
|
||||
<P>
|
||||
The translation was initiated by Salvatore Filippone on 2008-09-12
|
||||
The translation was initiated by Salvatore Filippone on 2009-03-13
|
||||
<BR><HR>
|
||||
|
||||
</BODY>
|
||||
|
||||
@@ -75,7 +75,7 @@ Ax=b,
|
||||
-->
|
||||
<TABLE WIDTH="100%" ALIGN="CENTER">
|
||||
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="system1"></A><IMG
|
||||
WIDTH="58" HEIGHT="30" BORDER="0"
|
||||
WIDTH="57" HEIGHT="30" BORDER="0"
|
||||
SRC="img1.png"
|
||||
ALT="\begin{displaymath}
|
||||
Ax=b,
|
||||
@@ -151,7 +151,6 @@ On the other hand, the routines of the middle and lower layer can be used and ex
|
||||
by expert users to build new versions of multi-level Schwarz preconditioners.
|
||||
We provide here a description of the upper-layer routines, but not of the
|
||||
medium-layer ones.
|
||||
|
||||
<P>
|
||||
This guide is organized as follows. General information on the distribution of the source code
|
||||
is reported in Section <A HREF="node4.html#sec:distribution">2</A>, while details on the configuration
|
||||
|
||||
@@ -75,7 +75,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 1.0 to adapt to many kinds of systems.
|
||||
`configure' configures MLD2P4 1.1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: ./configure [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
||||
@@ -65,9 +65,9 @@ University of Rome ``Tor Vergata'', Italy
|
||||
<BR>
|
||||
<BR>
|
||||
<BR>
|
||||
Software version: 1.0
|
||||
Software version: 1.1
|
||||
<BR>
|
||||
Sept. 9th, 2008
|
||||
March 13, 2009
|
||||
|
||||
<BR>
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ PDF = $(join $(BASEFILE),.pdf)
|
||||
PS = $(join $(BASEFILE),.ps)
|
||||
GXS = $(join $(BASEFILE),.gxs)
|
||||
GLX = $(join $(BASEFILE),.glx)
|
||||
TARGETPDF= ../mld2p4-1.0-guide.pdf
|
||||
TARGETPDF= ../mld2p4-1.1-guide.pdf
|
||||
BASEHTML = $(patsubst %.tex,%,$(HTMLFILE))
|
||||
HTML = $(join $(HTMLFILE),.html)
|
||||
HTMLDIR = ../html
|
||||
|
||||
@@ -5,7 +5,7 @@ PSBLAS}) is a package of parallel algebraic multi-level preconditioners.
|
||||
It implements various versions of one-level additive and of multi-level additive
|
||||
and hybrid Schwarz algorithms. 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 required to be square, real
|
||||
concerning the matrix to be preconditioned. The matrix is assumed to be square, real
|
||||
or complex, with a symmetric sparsity pattern.
|
||||
|
||||
MLD2P4 has been designed to provide scalable and easy-to-use preconditioners in the
|
||||
|
||||
@@ -62,8 +62,8 @@ aggregation} algorithm \cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}. A decoupled ve
|
||||
of this algorithm is implemented, where the smoothed aggregation is applied locally
|
||||
to each submatrix \cite{TUMINARO_TONG}. 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 user
|
||||
is referred to \cite{para_04,aaecc_07,apnum_07,dd2_96}.
|
||||
aggregation technique as implemented in MLD2P4. For further details the reader
|
||||
is referred to \cite{para_04,aaecc_07,apnum_07,MLD2P4_TOMS,dd2_96}.
|
||||
|
||||
|
||||
\subsection{Multi-level Schwarz Preconditioners\label{sec:multilevel}}
|
||||
@@ -144,7 +144,7 @@ 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 $A_C$ of the matrix $A$.
|
||||
In a pure algebraic setting, $A_C$ is usually built with
|
||||
a Galerkin approach. Given a set $W_C$ of \emph{coarse vertices},
|
||||
the Galerkin approach. Given a set $W_C$ of \emph{coarse vertices},
|
||||
with size $n_C$, and a suitable restriction operator
|
||||
$R_C \in \Re^{n_C \times n}$, $A_C$ is defined as
|
||||
\[
|
||||
@@ -225,7 +225,8 @@ example, in Figure~\ref{fig:mlhpost_alg}. Here the number of levels
|
||||
is denoted by $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 $l$ are denoted by $A_l$ and
|
||||
$M_l$, respectively, with $A_1=A$.
|
||||
$M_l$, respectively, with $A_1=A$, while the related restriction operator is
|
||||
denoted by $R_l$.
|
||||
%
|
||||
\begin{figure}[t]
|
||||
\begin{center}
|
||||
|
||||
@@ -69,7 +69,14 @@ 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},
|
||||
%% COMPLETARE.
|
||||
%
|
||||
\bibitem{UMFPACK}
|
||||
T.A.~Davis,
|
||||
{\em Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
|
||||
|
||||
@@ -96,7 +96,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 1.0 to adapt to many kinds of systems.
|
||||
`configure' configures MLD2P4 1.1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: ./configure [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ Multilevel &\verb|'ML'| & Multi-level hybrid preconditioner (additive
|
||||
Coarsest matrix: distributed among the processors.
|
||||
Coarsest-level solver:
|
||||
4 sweeps of the block-Jacobi solver,
|
||||
with LU (or ILU) factorization of the blocks
|
||||
with LU or ILU factorization of the blocks
|
||||
(UMFPACK for the double precision versions and
|
||||
SuperLU for the single precision ones, if the packages
|
||||
have been installed; ILU(0), otherwise). \\
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
The MLD2P4 is freely distributable under the following copyright
|
||||
terms: {\small
|
||||
\begin{verbatim}
|
||||
MLD2P4 version 1.0
|
||||
MLD2P4 version 1.1
|
||||
MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
based on PSBLAS (Parallel Sparse BLAS version 2.3)
|
||||
|
||||
(C) Copyright 2008
|
||||
(C) Copyright 2008, 2009
|
||||
|
||||
Salvatore Filippone University of Rome Tor Vergata
|
||||
Alfredo Buttari University of Rome Tor Vergata
|
||||
@@ -41,4 +41,4 @@ 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.
|
||||
\end{verbatim}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,8 @@ build any preconditioner available in MLD2P4 and to apply it within a PSBLAS Kry
|
||||
On the other hand, the routines of the middle and lower layer can be used and extended
|
||||
by expert users to build new versions of multi-level Schwarz preconditioners.
|
||||
We provide here a description of the upper-layer routines, but not of the
|
||||
medium-layer ones.
|
||||
medium-layer ones.%% For a detailed description of the overall software architecture
|
||||
%% of MLD2P4 the reader is referred to~\cite{MLD2P4_TOMS}.
|
||||
|
||||
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
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
\pdfcompresslevel=0 %-- 0 = none, 9 = best
|
||||
\pdfinfo{ %-- Info dictionary of PDF output /Author (PD, DdS, SF)
|
||||
/Title (MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
based on PSBLAS, V. 1.0)
|
||||
based on PSBLAS, V. 1.1)
|
||||
/Subject (MultiLevel Domain Decomposition Parallel Preconditioners Package)
|
||||
/Keywords (Parallel Numerical Software, Algebraic Multilevel Preconditioners, Sparse Iterative Solvers, PSBLAS, MPI)
|
||||
/Creator (pdfLaTeX)
|
||||
@@ -125,9 +125,9 @@ based on PSBLAS}
|
||||
\vspace{\stretch{1}}
|
||||
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
|
||||
\flushright
|
||||
\large Software version: 1.0\\
|
||||
\large Software version: 1.1\\
|
||||
%\today
|
||||
\large Sept. 9th, 2008
|
||||
\large March 13, 2009
|
||||
\end{minipage}}
|
||||
%\addtolength{\textwidth}{\centeroffset}
|
||||
\vspace{\stretch{2}}
|
||||
|
||||
@@ -102,9 +102,9 @@ based on PSBLAS}\\[3ex]
|
||||
University of Rome ``Tor Vergata'', Italy\\[2ex]
|
||||
%\\[10ex]
|
||||
%\today
|
||||
Software version: 1.0\\
|
||||
Software version: 1.1\\
|
||||
%\today
|
||||
Sept. 9th, 2008
|
||||
March 13, 2009
|
||||
\clearpage
|
||||
\ \\
|
||||
\thispagestyle{empty}
|
||||
|
||||
@@ -228,9 +228,10 @@ refer to Section~\ref{sec:background}.
|
||||
& Aggregation algorithm. Currently, only the
|
||||
decoupled aggregation is available. \\ \hline
|
||||
\verb|mld_aggr_kind_| & \verb|character(len=*)|
|
||||
& \texttt{'SMOOTH'} \hspace{2.5cm} \texttt{'RAW'}
|
||||
& \texttt{'SMOOTH'}
|
||||
& Type of aggregation: smoothed, raw (i.e.\ using the tentative prolongator). \\ \hline
|
||||
& \texttt{'SMOOTHED'} \hspace{2.5cm} \texttt{'NONSMOOTHED'}
|
||||
& \texttt{'SMOOTHED'}
|
||||
& Type of aggregation: smoothed, nonsmoothed
|
||||
(i.e.\ using the tentative prolongator). \\ \hline
|
||||
\verb|mld_aggr_thresh_| & \verb|real(|\emph{kind\_parameter}\verb|)|
|
||||
& Any~real~num. $\in [0, 1]$
|
||||
& 0
|
||||
@@ -312,10 +313,10 @@ refer to Section~\ref{sec:background}.
|
||||
& 0
|
||||
& Drop tolerance $t$ in the ILU($p,t$) factorization. \\
|
||||
\hline
|
||||
\multicolumn{5}{|l|}{{\bfseries Note} Defaults for
|
||||
\multicolumn{5}{|l|}{{\bfseries Note:} defaults for
|
||||
{\texttt mld\_coarse\_subsolve\_} are chosen as }\\
|
||||
\multicolumn{5}{|l|}{Single precision version: 'SLU' if installed, 'ILU' otherwise}\\
|
||||
\multicolumn{5}{|l|}{Double precision version: 'UMF' if installed,
|
||||
\multicolumn{5}{|l|}{single precision version: 'SLU' if installed, 'ILU' otherwise}\\
|
||||
\multicolumn{5}{|l|}{double precision version: 'UMF' if installed,
|
||||
else 'SLU' if installed, 'ILU' otherwise}\\
|
||||
\hline
|
||||
\end{tabular}
|
||||
@@ -379,7 +380,7 @@ preconditioner, stored into \verb|p|, and $op$
|
||||
denotes the preconditioner itself or its transpose, according to
|
||||
the value of \verb|trans|.
|
||||
Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
|
||||
\verb|mld_precaply| is called within the PSBLAS routine \verb|mld_krylov|
|
||||
\verb|mld_precaply| is called within the PSBLAS routine \verb|psb_krylov|
|
||||
and hence it is completely transparent to the user.
|
||||
|
||||
{\vskip2\baselineskip\noindent\large\bfseries Arguments}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -68,14 +68,14 @@
|
||||
! the fine-level matrix.
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of the fine-level matrix.
|
||||
! nlaggr - integer, dimension(:), allocatable.
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! ilaggr - integer, dimension(:), allocatable.
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix.
|
||||
! nlaggr - integer, dimension(:), allocatable.
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
@@ -86,7 +86,7 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
|
||||
|
||||
implicit none
|
||||
|
||||
! Arguments
|
||||
! Arguments
|
||||
integer, intent(in) :: aggr_type
|
||||
real(psb_spk_), intent(in) :: theta
|
||||
type(psb_cspmat_type), intent(in) :: a
|
||||
@@ -94,7 +94,7 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
|
||||
integer, allocatable, intent(out) :: ilaggr(:),nlaggr(:)
|
||||
integer, intent(out) :: info
|
||||
|
||||
! Local variables
|
||||
! Local variables
|
||||
integer, allocatable :: ils(:), neigh(:)
|
||||
integer :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m
|
||||
type(psb_cspmat_type) :: atmp, atrans
|
||||
@@ -131,7 +131,7 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
|
||||
atmp%m=nr
|
||||
atmp%k=nr
|
||||
if (info == 0) call psb_sp_free(atrans,info)
|
||||
if (info == 0) call psb_ipcoo2csr(atmp,info)
|
||||
if (info == 0) call psb_spcnv(atmp,info,afmt='csr')
|
||||
if (info == 0) call mld_dec_map_bld(theta,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
if (info == 0) call psb_sp_free(atmp,info)
|
||||
|
||||
@@ -161,8 +161,6 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
|
||||
|
||||
contains
|
||||
|
||||
|
||||
|
||||
subroutine mld_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
@@ -337,7 +335,7 @@ contains
|
||||
!
|
||||
isz = nr+1
|
||||
ia = -1
|
||||
cpling = 0.0
|
||||
cpling = szero
|
||||
call psb_sp_getrow(i,a,nz,irow,icol,val,info)
|
||||
if (info/=0) then
|
||||
info=4010
|
||||
@@ -384,7 +382,7 @@ contains
|
||||
|
||||
if (ia>naggr) then
|
||||
info=4001
|
||||
call psb_errpush(info,name,a_err='loc_Aggregate: n > naggr 4? ')
|
||||
call psb_errpush(info,name,a_err='loc_Aggregate: n > naggr ? ')
|
||||
goto 9999
|
||||
end if
|
||||
ils(ia) = ils(ia) + 1
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -42,7 +42,7 @@
|
||||
! Version: complex
|
||||
!
|
||||
! This routine builds a coarse-level matrix A_C from a fine-level matrix A
|
||||
! by using a Galerkin approach, i.e.
|
||||
! by using the Galerkin approach, i.e.
|
||||
!
|
||||
! A_C = P_C^T A P_C,
|
||||
!
|
||||
@@ -50,18 +50,18 @@
|
||||
!
|
||||
! A mapping from the nodes of the adjacency graph of A to the nodes of the
|
||||
! adjacency graph of A_C has been computed by the mld_aggrmap_bld subroutine.
|
||||
! The prolongator P_C is built here from this mapping, according to the
|
||||
! The prolongator P_C is built here from this mapping, according to the
|
||||
! value of p%iprcparm(mld_aggr_kind_), specified by the user through
|
||||
! mld_cprecinit and mld_cprecset.
|
||||
!
|
||||
! Currently three different prolongators are implemented, corresponding to
|
||||
! three aggregation algorithms:
|
||||
! 1. raw aggregation,
|
||||
! 1. non-smoothed aggregation,
|
||||
! 2. smoothed aggregation,
|
||||
! 3. "bizarre" aggregation.
|
||||
! 1. The raw aggregation uses as prolongator the piecewise constant interpolation
|
||||
! operator corresponding to the fine-to-coarse level mapping built by
|
||||
! mld_aggrmap_bld. This is called tentative prolongator.
|
||||
! 1. The non-smoothed aggregation uses as prolongator the piecewise constant
|
||||
! interpolation operator corresponding to the fine-to-coarse level mapping built
|
||||
! by mld_aggrmap_bld. This is called tentative prolongator.
|
||||
! 2. The smoothed aggregation uses as prolongator the operator obtained by applying
|
||||
! a damped Jacobi smoother to the tentative prolongator.
|
||||
! 3. The "bizarre" aggregation uses a prolongator proposed by the authors of MLD2P4.
|
||||
@@ -84,9 +84,17 @@
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of the fine-level matrix.
|
||||
! p - type(mld_conelev_type), input/output.
|
||||
! The one-level preconditioner data structure containing the local
|
||||
! part of the base preconditioner to be built as well as the
|
||||
! aggregate matrices.
|
||||
! The 'one-level' data structure that will contain the local
|
||||
! part of the matrix to be built as well as the information
|
||||
! concerning the prolongator and its transpose.
|
||||
! ilaggr - integer, dimension(:), allocatable.
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix.
|
||||
! nlaggr - integer, dimension(:), allocatable.
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -42,7 +42,7 @@
|
||||
! Version: complex
|
||||
!
|
||||
! This routine builds a coarse-level matrix A_C from a fine-level matrix A
|
||||
! by using a Galerkin approach, i.e.
|
||||
! by using the Galerkin approach, i.e.
|
||||
!
|
||||
! A_C = P_C^T A P_C,
|
||||
!
|
||||
@@ -67,9 +67,17 @@
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of the fine-level matrix.
|
||||
! p - type(mld_conelev_type), input/output.
|
||||
! The one-level preconditioner data structure containing the local
|
||||
! part of the base preconditioner to be built as well as the
|
||||
! aggregate matrices.
|
||||
! The 'one-level' data structure that will contain the local
|
||||
! part of the matrix to be built as well as the information
|
||||
! concerning the prolongator and its transpose.
|
||||
! ilaggr - integer, dimension(:), allocatable.
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix.
|
||||
! nlaggr - integer, dimension(:), allocatable.
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -42,7 +42,7 @@
|
||||
! Version: complex
|
||||
!
|
||||
! This routine builds a coarse-level matrix A_C from a fine-level matrix A
|
||||
! by using a Galerkin approach, i.e.
|
||||
! by using the Galerkin approach, i.e.
|
||||
!
|
||||
! A_C = P_C^T A P_C,
|
||||
!
|
||||
@@ -59,7 +59,7 @@
|
||||
! of A, and omega is a suitable smoothing parameter. An estimate of the spectral
|
||||
! radius of D^(-1)A, to be used in the computation of omega, is provided,
|
||||
! according to the value of p%iprcparm(mld_aggr_omega_alg_), specified by the user
|
||||
! through mld_dprecinit and mld_dprecset.
|
||||
! through mld_cprecinit and mld_cprecset.
|
||||
!
|
||||
! This routine can also build A_C according to a "bizarre" aggregation algorithm,
|
||||
! using a "naive" prolongator proposed by the authors of MLD2P4. However, this
|
||||
@@ -68,7 +68,7 @@
|
||||
!
|
||||
! The coarse-level matrix A_C is distributed among the parallel processes or
|
||||
! replicated on each of them, according to the value of p%iprcparm(mld_coarse_mat_),
|
||||
! specified by the user through mld_dprecinit and mld_dprecset.
|
||||
! specified by the user through mld_cprecinit and mld_cprecset.
|
||||
!
|
||||
! For more details see
|
||||
! M. Brezina and P. Vanek, A black-box iterative solver based on a
|
||||
@@ -84,9 +84,17 @@
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of the fine-level matrix.
|
||||
! p - type(mld_conelev_type), input/output.
|
||||
! The one-level preconditioner data structure containing the local
|
||||
! part of the base preconditioner to be built as well as the
|
||||
! aggregate matrices.
|
||||
! The 'one-level' data structure that will contain the local
|
||||
! part of the matrix to be built as well as the information
|
||||
! concerning the prolongator and its transpose.
|
||||
! ilaggr - integer, dimension(:), allocatable.
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix.
|
||||
! nlaggr - integer, dimension(:), allocatable.
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
@@ -116,10 +124,10 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
& naggr, nzl,naggrm1,naggrp1, i, j, k, jd, icolF
|
||||
integer ::ictxt,np,me, err_act, icomm
|
||||
character(len=20) :: name
|
||||
type(psb_cspmat_type) :: am1,am2, AF
|
||||
type(psb_cspmat_type) :: am1,am2, af
|
||||
type(psb_cspmat_type) :: am3,am4
|
||||
complex(psb_spk_), allocatable :: adiag(:)
|
||||
logical :: ml_global_nmb
|
||||
logical :: ml_global_nmb, filter_mat
|
||||
integer :: debug_level, debug_unit
|
||||
integer, parameter :: ncmax=16
|
||||
real(psb_spk_) :: omega, anorm, tmp, dg, theta
|
||||
@@ -168,6 +176,8 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
& ( (p%iprcparm(mld_aggr_kind_) == mld_biz_prol_).and.&
|
||||
& (p%iprcparm(mld_coarse_mat_) == mld_repl_mat_)) )
|
||||
|
||||
filter_mat = (p%iprcparm(mld_aggr_filter_) == mld_filter_mat_)
|
||||
|
||||
if (ml_global_nmb) then
|
||||
ilaggr(1:nrow) = ilaggr(1:nrow) + naggrm1
|
||||
call psb_halo(ilaggr,desc_a,info)
|
||||
@@ -190,11 +200,11 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
! Get diagonal D
|
||||
! Get the diagonal D
|
||||
call psb_sp_getdiag(a,adiag,info)
|
||||
if (info == 0) &
|
||||
& call psb_halo(adiag,desc_a,info)
|
||||
|
||||
|
||||
if(info /= 0) then
|
||||
call psb_errpush(4010,name,a_err='sp_getdiag')
|
||||
goto 9999
|
||||
@@ -243,45 +253,44 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& ' Initial copies done.'
|
||||
|
||||
if (filter_mat) then
|
||||
!
|
||||
! Build the filtered matrix Af from A
|
||||
!
|
||||
call psb_spcnv(a,af,info,afmt='csr',dupl=psb_dupl_add_)
|
||||
|
||||
!********************************+
|
||||
! building the filtered matrix af from A
|
||||
!
|
||||
!
|
||||
call psb_spcnv(a,af,info,afmt='csr',dupl=psb_dupl_add_)
|
||||
|
||||
do i=1,nrow
|
||||
tmp = czero
|
||||
jd = -1
|
||||
do j=af%ia2(i),af%ia2(i+1)-1
|
||||
if (af%ia1(j) == i) jd = j
|
||||
if (abs(af%aspk(j)) < theta*sqrt(abs(adiag(i)*adiag(af%ia1(j))))) then
|
||||
tmp=tmp+af%aspk(j)
|
||||
af%aspk(j)=czero
|
||||
endif
|
||||
do i=1,nrow
|
||||
tmp = czero
|
||||
jd = -1
|
||||
do j=af%ia2(i),af%ia2(i+1)-1
|
||||
if (af%ia1(j) == i) jd = j
|
||||
if (abs(af%aspk(j)) < theta*sqrt(abs(adiag(i)*adiag(af%ia1(j))))) then
|
||||
tmp=tmp+af%aspk(j)
|
||||
af%aspk(j)=czero
|
||||
endif
|
||||
|
||||
enddo
|
||||
if (jd == -1) then
|
||||
write(0,*) 'Wrong input: we need the diagonal!!!!', i
|
||||
else
|
||||
af%aspk(jd)=af%aspk(jd)-tmp
|
||||
end if
|
||||
enddo
|
||||
if (jd == -1) then
|
||||
write(0,*) 'Wrong input: we need the diagonal!!!!'
|
||||
else
|
||||
af%aspk(jd)=af%aspk(jd)-tmp
|
||||
end if
|
||||
enddo
|
||||
! Ora eliminiamo i termini che sono stato azzerati
|
||||
call psb_spcnv(af,info,afmt='coo')
|
||||
k = 0
|
||||
do j=1,psb_sp_get_nnzeros(af)
|
||||
if ((af%aspk(j) /= czero) .or. (af%ia1(j)==af%ia2(j))) then
|
||||
k = k + 1
|
||||
af%aspk(k) = af%aspk(j)
|
||||
af%ia1(k) = af%ia1(j)
|
||||
af%ia2(k) = af%ia2(j)
|
||||
end if
|
||||
end do
|
||||
! Take out zeroed terms
|
||||
call psb_spcnv(af,info,afmt='coo')
|
||||
k = 0
|
||||
do j=1,psb_sp_get_nnzeros(af)
|
||||
if ((af%aspk(j) /= czero) .or. (af%ia1(j)==af%ia2(j))) then
|
||||
k = k + 1
|
||||
af%aspk(k) = af%aspk(j)
|
||||
af%ia1(k) = af%ia1(j)
|
||||
af%ia2(k) = af%ia2(j)
|
||||
end if
|
||||
end do
|
||||
!!$ write(debug_unit,*) me,' ',trim(name),' Non zeros from filtered matrix:',k,af%m,af%k
|
||||
call psb_sp_setifld(k,psb_nnz_,af,info)
|
||||
call psb_spcnv(af,info,afmt='csr')
|
||||
|
||||
call psb_sp_setifld(k,psb_nnz_,af,info)
|
||||
call psb_spcnv(af,info,afmt='csr')
|
||||
end if
|
||||
|
||||
|
||||
do i=1,size(adiag)
|
||||
@@ -291,10 +300,13 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
adiag(i) = cone
|
||||
end if
|
||||
end do
|
||||
call psb_sp_scal(af,adiag,info)
|
||||
|
||||
if (filter_mat) call psb_sp_scal(af,adiag,info)
|
||||
|
||||
call psb_sp_scal(am3,adiag,info)
|
||||
if (info /= 0) goto 9999
|
||||
!*******************************************
|
||||
|
||||
|
||||
if (p%iprcparm(mld_aggr_omega_alg_) == mld_eig_est_) then
|
||||
|
||||
if (p%iprcparm(mld_aggr_eig_) == mld_max_norm_) then
|
||||
@@ -302,7 +314,7 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
if (p%iprcparm(mld_aggr_kind_) == mld_biz_prol_) then
|
||||
|
||||
!
|
||||
! This only works with CSR.
|
||||
! This only works with CSR
|
||||
!
|
||||
if (psb_toupper(am3%fida)=='CSR') then
|
||||
anorm = szero
|
||||
@@ -352,44 +364,89 @@ subroutine mld_caggrmat_smth_asb(a,desc_a,ilaggr,nlaggr,p,info)
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
! %
|
||||
if (psb_toupper(af%fida)=='CSR') then
|
||||
do i=1,af%m
|
||||
do j=af%ia2(i),af%ia2(i+1)-1
|
||||
if (af%ia1(j) == i) then
|
||||
af%aspk(j) = cone - omega*af%aspk(j)
|
||||
else
|
||||
af%aspk(j) = - omega*af%aspk(j)
|
||||
end if
|
||||
if (filter_mat) then
|
||||
!
|
||||
! Build the smoothed prolongator using the filtered matrix
|
||||
!
|
||||
if (psb_toupper(af%fida)=='CSR') then
|
||||
do i=1,af%m
|
||||
do j=af%ia2(i),af%ia2(i+1)-1
|
||||
if (af%ia1(j) == i) then
|
||||
af%aspk(j) = cone - omega*af%aspk(j)
|
||||
else
|
||||
af%aspk(j) = - omega*af%aspk(j)
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
else
|
||||
call psb_errpush(4001,name,a_err='Invalid AF storage format')
|
||||
goto 9999
|
||||
else
|
||||
call psb_errpush(4001,name,a_err='Invalid AF storage format')
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
if (debug_level >= psb_debug_outer_) &
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& 'Done gather, going for SYMBMM 1'
|
||||
!
|
||||
! Symbmm90 does the allocation for its result.
|
||||
!
|
||||
! am1 = (I-w*D*Af)Ptilde
|
||||
! Doing it this way means to consider diag(Af_i)
|
||||
!
|
||||
!
|
||||
call psb_symbmm(af,am4,am1,info)
|
||||
if(info /= 0) then
|
||||
call psb_errpush(4010,name,a_err='symbmm 1')
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
call psb_numbmm(af,am4,am1)
|
||||
|
||||
if (debug_level >= psb_debug_outer_) &
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& 'Done NUMBMM 1'
|
||||
else
|
||||
!
|
||||
! Build the smoothed prolongator using the original matrix
|
||||
!
|
||||
if (psb_toupper(am3%fida)=='CSR') then
|
||||
do i=1,am3%m
|
||||
do j=am3%ia2(i),am3%ia2(i+1)-1
|
||||
if (am3%ia1(j) == i) then
|
||||
am3%aspk(j) = cone - omega*am3%aspk(j)
|
||||
else
|
||||
am3%aspk(j) = - omega*am3%aspk(j)
|
||||
end if
|
||||
end do
|
||||
end do
|
||||
else
|
||||
call psb_errpush(4001,name,a_err='Invalid AM3 storage format')
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
if (debug_level >= psb_debug_outer_) &
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& 'Done gather, going for SYMBMM 1'
|
||||
!
|
||||
! Symbmm90 does the allocation for its result.
|
||||
!
|
||||
! am1 = (I-w*D*A)Ptilde
|
||||
! Doing it this way means to consider diag(A_i)
|
||||
!
|
||||
!
|
||||
call psb_symbmm(am3,am4,am1,info)
|
||||
if(info /= 0) then
|
||||
call psb_errpush(4010,name,a_err='symbmm 1')
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
call psb_numbmm(am3,am4,am1)
|
||||
|
||||
if (debug_level >= psb_debug_outer_) &
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& 'Done NUMBMM 1'
|
||||
|
||||
end if
|
||||
|
||||
if (debug_level >= psb_debug_outer_) &
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& 'Done gather, going for SYMBMM 1'
|
||||
!
|
||||
! Symbmm90 does the allocation for its result.
|
||||
!
|
||||
! am1 = (i-wDA)Ptilde
|
||||
! Doing it this way means to consider diag(Ai)
|
||||
!
|
||||
!
|
||||
call psb_symbmm(af,am4,am1,info)
|
||||
if(info /= 0) then
|
||||
call psb_errpush(4010,name,a_err='symbmm 1')
|
||||
goto 9999
|
||||
end if
|
||||
|
||||
call psb_numbmm(af,am4,am1)
|
||||
|
||||
if (debug_level >= psb_debug_outer_) &
|
||||
& write(debug_unit,*) me,' ',trim(name),&
|
||||
& 'Done NUMBMM 1'
|
||||
|
||||
call psb_sp_free(am4,info)
|
||||
if(info /= 0) then
|
||||
call psb_errpush(4010,name,a_err='sp_free')
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -163,7 +163,7 @@ subroutine mld_cbaseprec_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
|
||||
|
||||
case(mld_bjac_,mld_as_)
|
||||
!
|
||||
! Additive Schwarz preconditioner
|
||||
! Additive Schwarz preconditioner (including block-Jacobi as special case)
|
||||
!
|
||||
call mld_as_aply(alpha,prec,x,beta,y,desc_data,trans_,work,info)
|
||||
if(info /= 0) then
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -46,7 +46,7 @@
|
||||
! base preconditioner at each level.
|
||||
!
|
||||
! Details on the base preconditioner to be built are stored in the iprcparm
|
||||
! field of the preconditioner data structure (for a description of this
|
||||
! field of the base preconditioner data structure (for a description of this
|
||||
! data structure see mld_prec_type.f90).
|
||||
!
|
||||
!
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -41,11 +41,15 @@
|
||||
! Subroutine: mld_ccoarse_bld
|
||||
! Version: complex
|
||||
!
|
||||
! This routine builds the preconditioner corresponding to the current
|
||||
! level of the multilevel preconditioner. The routine first builds the
|
||||
! (coarse) matrix associated to the current level from the (fine) matrix
|
||||
! associated to the previous level, then builds the related base preconditioner.
|
||||
! Note that this routine is only ever called on levels >= 2.
|
||||
! This routine builds the matrix associated to the current level of the
|
||||
! multilevel preconditioner from the matrix associated to the previous level,
|
||||
! by using a smoothed aggregation technique (therefore, it also builds the
|
||||
! prolongation and restriction operators mapping the current level to the
|
||||
! previous one and vice versa). Then the routine builds the base preconditioner
|
||||
! at the current level.
|
||||
! The current level is regarded as the coarse one, while the previous as
|
||||
! the fine one. This is in agreement with the fact that the routine is called,
|
||||
! by mld_mlprec_bld, only on levels >=2.
|
||||
!
|
||||
!
|
||||
! Arguments:
|
||||
@@ -55,8 +59,9 @@
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of a.
|
||||
! p - type(mld_conelev_type), input/output.
|
||||
! The preconditioner data structure containing the local
|
||||
! part of the one-level preconditioner to be built.
|
||||
! The 'one-level' data structure containing the local part
|
||||
! of the base preconditioner to be built as well as
|
||||
! information concerning the prolongator and its transpose.
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
@@ -100,6 +105,8 @@ subroutine mld_ccoarse_bld(a,desc_a,p,info)
|
||||
& mld_smooth_prol_,is_legal_ml_aggr_kind)
|
||||
call mld_check_def(p%iprcparm(mld_coarse_mat_),'Coarse matrix',&
|
||||
& mld_distr_mat_,is_legal_ml_coarse_mat)
|
||||
call mld_check_def(p%iprcparm(mld_aggr_filter_),'Use filtered matrix',&
|
||||
& mld_no_filter_mat_,is_legal_aggr_filter)
|
||||
call mld_check_def(p%iprcparm(mld_smoother_pos_),'smooth_pos',&
|
||||
& mld_pre_smooth_,is_legal_ml_smooth_pos)
|
||||
call mld_check_def(p%iprcparm(mld_aggr_omega_alg_),'Omega Alg.',&
|
||||
@@ -124,7 +131,7 @@ subroutine mld_ccoarse_bld(a,desc_a,p,info)
|
||||
end if
|
||||
|
||||
!
|
||||
! Build the coarse-level matrix from the fine level one, starting from
|
||||
! Build the coarse-level matrix from the fine-level one, starting from
|
||||
! the mapping defined by mld_aggrmap_bld and applying the aggregation
|
||||
! algorithm specified by p%iprcparm(mld_aggr_kind_)
|
||||
!
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -41,10 +41,10 @@
|
||||
! Subroutine: mld_cfact_bld
|
||||
! Version: complex
|
||||
!
|
||||
! This routine computes an LU or incomplete LU (ILU) factorization of the diagonal
|
||||
! blocks of a distributed matrix, according to the value of
|
||||
! p%iprcparm(iprcparm(sub_solve_), set by the user through
|
||||
! mld_dprecinit or mld_dprecset.
|
||||
! This routine computes an LU or incomplete LU (ILU) factorization of the
|
||||
! diagonal blocks of a distributed matrix, according to the value of
|
||||
! p%iprcparm(iprcparm(sub_solve_), set by the user through mld_cprecinit
|
||||
! or mld_cprecset.
|
||||
! It may also compute an LU factorization of a distributed matrix, or split
|
||||
! a distributed matrix into its block-diagonal and off block-diagonal parts,
|
||||
! for the future application of multiple block-Jacobi sweeps.
|
||||
@@ -60,8 +60,8 @@
|
||||
! More precisely, the routine performs one of the following tasks:
|
||||
!
|
||||
! 1. LU or ILU factorization of the diagonal blocks of the distributed matrix
|
||||
! for the construction of a block-Jacobi or AS preconditioners
|
||||
! (allowed at any level of a multilevel preconditioner);
|
||||
! for the construction of block-Jacobi or AS preconditioners (allowed at
|
||||
! any level of a multilevel preconditioner);
|
||||
!
|
||||
! 2. setup of block-Jacobi sweeps to compute an approximate solution of a
|
||||
! linear system
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
@@ -42,11 +42,11 @@
|
||||
! Version: complex
|
||||
! Contains: mld_cilu0_factint, ilu_copyin
|
||||
!
|
||||
! This routine computes either the ILU(0) or the MILU(0) factorization of the
|
||||
! diagonal blocks of a distributed matrix. These factorizations
|
||||
! are used to build the 'base preconditioner' (block-Jacobi preconditioner/solver,
|
||||
! Additive Schwarz preconditioner) corresponding to a given level of a multilevel
|
||||
! preconditioner.
|
||||
! This routine computes either the ILU(0) or the MILU(0) factorization of
|
||||
! the diagonal blocks of a distributed matrix. These factorizations are used
|
||||
! to build the 'base preconditioner' (block-Jacobi preconditioner/solver,
|
||||
! Additive Schwarz preconditioner) corresponding to a given level of a
|
||||
! multilevel preconditioner.
|
||||
!
|
||||
! Details on the above factorizations can be found in
|
||||
! Y. Saad, Iterative Methods for Sparse Linear Systems, Second Edition,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
!!$
|
||||
!!$
|
||||
!!$ MLD2P4 version 1.0
|
||||
!!$ MLD2P4 version 1.1
|
||||
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.2)
|
||||
!!$ based on PSBLAS (Parallel Sparse BLAS version 2.3.1)
|
||||
!!$
|
||||
!!$ (C) Copyright 2008
|
||||
!!$ (C) Copyright 2008,2009
|
||||
!!$
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Salvatore Filippone University of Rome Tor Vergata
|
||||
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||
!!$ Pasqua D'Ambra ICAR-CNR, Naples
|
||||
!!$ Daniela di Serafino Second University of Naples
|
||||
|
||||