Fix from Mac coding to Unix coding.

This commit is contained in:
Salvatore Filippone
2017-07-25 14:19:05 +01:00
parent 79922b5939
commit 92e47008bd
9 changed files with 653 additions and 125 deletions
+85 -32
View File
@@ -53,30 +53,49 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<H2><A NAME="SECTION00063000000000000000"></A><A NAME="sec:smoothers"></A>
<BR>
Smoothers and coarsest-level solvers
</H2><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">␍␍The smoothers implemented in MLD2P4 include the Jacobi and block-Jacobi methods,␍a hybrid version of the forward and backward Gauss-Seidel methods, and the␍additive Schwarz (AS) ones (see, e.g., [<A
</H2><FONT SIZE="+1"><FONT SIZE="+1"></FONT></FONT>
<P>
<FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">The smoothers implemented in MLD2P4 include the Jacobi and block-Jacobi methods,
a hybrid version of the forward and backward Gauss-Seidel methods, and the
additive Schwarz (AS) ones (see, e.g., [<A
HREF="node29.html#Saad_book">20</A>,<A
HREF="node29.html#dd2_96">21</A>]). ␍␍The hybrid Gauss-Seidel␍version is considered because the original Gauss-Seidel method is inherently sequential.␍At each iteration of the hybrid version, each parallel process uses the most recent values␍of its own local variables and the values of the non-local variables computed at the␍previous iteration, obtained by exchanging data with other processes before␍the beginning of the current iteration.␍␍In the AS methods, the index space <IMG
HREF="node29.html#dd2_96">21</A>]).
</FONT></FONT></FONT>
<P>
<FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">The hybrid Gauss-Seidel
version is considered because the original Gauss-Seidel method is inherently sequential.
At each iteration of the hybrid version, each parallel process uses the most recent values
of its own local variables and the values of the non-local variables computed at the
previous iteration, obtained by exchanging data with other processes before
the beginning of the current iteration.
</FONT></FONT></FONT>
<P>
<FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">In the AS methods, the index space <IMG
WIDTH="25" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img9.png"
ALT="$\Omega^k$"> is divided into <IMG
WIDTH="28" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img50.png"
ALT="$m_k$">␍subsets <IMG
ALT="$m_k$">
subsets <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img51.png"
ALT="$\Omega^k_i$"> of size <IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img52.png"
ALT="$n_{k,i}$">, possibly␍overlapping. For each <IMG
ALT="$n_{k,i}$">, possibly
overlapping. For each <IMG
WIDTH="11" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img30.png"
ALT="$i$"> we consider the restriction␍operator <!-- MATH
ALT="$i$"> we consider the restriction
operator <!-- MATH
$R_i^k \in \mathbb{R}^{n_{k,i} \times n_k}$
-->
<IMG
WIDTH="110" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img53.png"
ALT="$R_i^k \in \mathbb{R}^{n_{k,i} \times n_k}$">␍that maps a vector <IMG
ALT="$R_i^k \in \mathbb{R}^{n_{k,i} \times n_k}$">
that maps a vector <IMG
WIDTH="23" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
SRC="img54.png"
ALT="$x^k$"> to the vector <IMG
@@ -85,16 +104,19 @@ Smoothers and coarsest-level solvers
ALT="$x_i^k$"> made of the components of <IMG
WIDTH="23" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
SRC="img54.png"
ALT="$x^k$">␍with indices in <IMG
ALT="$x^k$">
with indices in <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img51.png"
ALT="$\Omega^k_i$">, and the prolongation operator␍<!-- MATH
ALT="$\Omega^k_i$">, and the prolongation operator
<!-- MATH
$P^k_i = (R_i^k)^T$
-->
<IMG
WIDTH="95" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img56.png"
ALT="$P^k_i = (R_i^k)^T$">. These operators are then used to build␍<!-- MATH
ALT="$P^k_i = (R_i^k)^T$">. These operators are then used to build
<!-- MATH
$A_i^k=R_i^kA^kP_i^k$
-->
<IMG
@@ -103,13 +125,16 @@ Smoothers and coarsest-level solvers
ALT="$A_i^k=R_i^kA^kP_i^k$">, which is the restriction of <IMG
WIDTH="26" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img41.png"
ALT="$A^k$"> to the index␍space <IMG
ALT="$A^k$"> to the index
space <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img51.png"
ALT="$\Omega^k_i$">.␍The classical AS preconditioner <IMG
ALT="$\Omega^k_i$">.
The classical AS preconditioner <IMG
WIDTH="41" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img58.png"
ALT="$M^k_{AS}$"> is defined as␍</FONT></FONT></FONT>
ALT="$M^k_{AS}$"> is defined as
</FONT></FONT></FONT>
<BR><P></P>
<DIV ALIGN="CENTER">
<!-- MATH
@@ -124,40 +149,47 @@ Smoothers and coarsest-level solvers
ALT="\begin{displaymath}␍ ( M^k_{AS} )^{-1} = \sum_{i=1}^{m_k} P_i^k (A_i^k)^{-1} R_i^{k},␍\end{displaymath}">
</DIV>
<BR CLEAR="ALL">
<P></P><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">␍where <IMG
<P></P><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">
where <IMG
WIDTH="26" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img60.png"
ALT="$A_i^k$"> is supposed to be nonsingular. We observe that an approximate␍inverse of <IMG
ALT="$A_i^k$"> is supposed to be nonsingular. We observe that an approximate
inverse of <IMG
WIDTH="26" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img60.png"
ALT="$A_i^k$"> is usually considered instead of <IMG
WIDTH="57" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img61.png"
ALT="$(A_i^k)^{-1}$">.␍The setup of <IMG
ALT="$(A_i^k)^{-1}$">.
The setup of <IMG
WIDTH="41" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img58.png"
ALT="$M^k_{AS}$"> during the multilevel build phase␍involves␍</FONT></FONT></FONT>
ALT="$M^k_{AS}$"> during the multilevel build phase
involves
</FONT></FONT></FONT>
<UL>
<LI>the definition of the index subspaces <IMG
WIDTH="25" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img62.png"
ALT="$\Omega_i^k$"> and of the corresponding ␍ operators <IMG
ALT="$\Omega_i^k$"> and of the corresponding
operators <IMG
WIDTH="26" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img63.png"
ALT="$R_i^k$"> (and <IMG
WIDTH="26" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img64.png"
ALT="$P_i^k$">);
ALT="$P_i^k$">);
</LI>
<LI>the computation of the submatrices <IMG
WIDTH="26" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img60.png"
ALT="$A_i^k$">;
ALT="$A_i^k$">;
</LI>
<LI>the computation of their inverses (usually approximated␍ through some form of incomplete factorization).
<LI>the computation of their inverses (usually approximated
through some form of incomplete factorization).
</LI>
</UL><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">␍The computation of <!-- MATH
</UL><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">
The computation of <!-- MATH
$z^k=M^k_{AS}w^k$
-->
<IMG
@@ -169,8 +201,9 @@ Smoothers and coarsest-level solvers
<IMG
WIDTH="76" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img66.png"
ALT="$w^k \in \mathbb{R}^{n_k}$">, during the␍multilevel application phase, requires␍</FONT></FONT></FONT>
ALT="$w^k \in \mathbb{R}^{n_k}$">, during the
multilevel application phase, requires
</FONT></FONT></FONT>
<UL>
<LI>the restriction of <IMG
WIDTH="25" HEIGHT="19" ALIGN="BOTTOM" BORDER="0"
@@ -181,13 +214,14 @@ Smoothers and coarsest-level solvers
<IMG
WIDTH="41" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img68.png"
ALT="$\mathbb{R}^{n_{k,i}}$">,␍ i.e. <!-- MATH
ALT="$\mathbb{R}^{n_{k,i}}$">,
i.e. <!-- MATH
$w_i^k = R_i^{k} w^k$
-->
<IMG
WIDTH="91" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img69.png"
ALT="$w_i^k = R_i^{k} w^k$">;
ALT="$w_i^k = R_i^{k} w^k$">;
</LI>
<LI>the computation of the vectors <!-- MATH
$z_i^k=(A_i^k)^{-1} w_i^k$
@@ -195,19 +229,38 @@ Smoothers and coarsest-level solvers
<IMG
WIDTH="119" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img70.png"
ALT="$z_i^k=(A_i^k)^{-1} w_i^k$">;
ALT="$z_i^k=(A_i^k)^{-1} w_i^k$">;
</LI>
<LI>the prolongation and the sum of the previous vectors,␍ i.e. <!-- MATH
<LI>the prolongation and the sum of the previous vectors,
i.e. <!-- MATH
$z^k = \sum_{i=1}^{m_k} P_i^k z_i^k$
-->
<IMG
WIDTH="127" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img71.png"
ALT="$z^k = \sum_{i=1}^{m_k} P_i^k z_i^k$">.
ALT="$z^k = \sum_{i=1}^{m_k} P_i^k z_i^k$">.
</LI>
</UL><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">␍Variants of the classical AS method, which use modifications of the␍restriction and prolongation operators, are also implemented in MLD2P4.␍Among them, the Restricted AS (RAS) preconditioner usually␍outperforms the classical AS preconditioner in terms of convergence␍rate and of computation and communication time on parallel distributed-memory␍computers, and is therefore the most widely used among the AS␍preconditioners&nbsp;[<A
HREF="node29.html#CAI_SARKIS">6</A>]. ␍␍Direct solvers based on sparse LU factorizations, implemented in the␍third-party libraries reported in Section&nbsp;<A HREF="node7.html#sec:third-party">3.2</A>, can be applied␍as coarsest-level solvers by MLD2P4. Native inexact solvers based on␍incomplete LU factorizations, as well as Jacobi, hybrid (forward) Gauss-Seidel,␍and block Jacobi preconditioners are also available. Direct solvers usually␍lead to more effective preconditioners in terms of algorithmic scalability;␍however, this does not guarantee parallel efficiency.␍
</FONT></FONT></FONT><HR>
</UL><FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">
Variants of the classical AS method, which use modifications of the
restriction and prolongation operators, are also implemented in MLD2P4.
Among them, the Restricted AS (RAS) preconditioner usually
outperforms the classical AS preconditioner in terms of convergence
rate and of computation and communication time on parallel distributed-memory
computers, and is therefore the most widely used among the AS
preconditioners&nbsp;[<A
HREF="node29.html#CAI_SARKIS">6</A>].
</FONT></FONT></FONT>
<P>
<FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1">Direct solvers based on sparse LU factorizations, implemented in the
third-party libraries reported in Section&nbsp;<A HREF="node7.html#sec:third-party">3.2</A>, can be applied
as coarsest-level solvers by MLD2P4. Native inexact solvers based on
incomplete LU factorizations, as well as Jacobi, hybrid (forward) Gauss-Seidel,
and block Jacobi preconditioners are also available. Direct solvers usually
lead to more effective preconditioners in terms of algorithmic scalability;
however, this does not guarantee parallel efficiency.
</FONT></FONT></FONT>
<P>
<FONT SIZE="+1"><FONT SIZE="+1"><FONT SIZE="+1"></FONT></FONT></FONT><HR>
<!--Navigation Panel-->
<A NAME="tex2html251"
HREF="node15.html">