mld2p4-smooth-2side:

docs/html/img100.png
 docs/html/img101.png
 docs/html/img102.png
 docs/html/img103.png
 docs/html/img104.png
 docs/html/img105.png
 docs/html/img92.png
 docs/html/img93.png
 docs/html/img95.png
 docs/html/img96.png
 docs/html/img97.png
 docs/html/img98.png
 docs/html/img99.png
 docs/html/index.html
 docs/html/node1.html
 docs/html/node10.html
 docs/html/node11.html
 docs/html/node12.html
 docs/html/node13.html
 docs/html/node14.html
 docs/html/node15.html
 docs/html/node16.html
 docs/html/node17.html
 docs/html/node18.html
 docs/html/node19.html
 docs/html/node2.html
 docs/html/node20.html
 docs/html/node21.html
 docs/html/node22.html
 docs/html/node23.html
 docs/html/node24.html
 docs/html/node25.html
 docs/html/node26.html
 docs/html/node3.html
 docs/html/node4.html
 docs/html/node5.html
 docs/html/node6.html
 docs/html/node7.html
 docs/html/node8.html
 docs/html/node9.html
 docs/html/userhtml.html
 docs/mld2p4-2.1-guide.pdf
 docs/src/userinterface.tex
 mlprec/impl/level/mld_c_base_onelev_cseti.f90
 mlprec/impl/level/mld_c_base_onelev_seti.f90
 mlprec/impl/level/mld_d_base_onelev_cseti.f90
 mlprec/impl/level/mld_d_base_onelev_seti.f90
 mlprec/impl/level/mld_s_base_onelev_cseti.f90
 mlprec/impl/level/mld_s_base_onelev_seti.f90
 mlprec/impl/level/mld_z_base_onelev_cseti.f90
 mlprec/impl/level/mld_z_base_onelev_seti.f90
 mlprec/impl/mld_c_dec_map_bld.f90
 mlprec/impl/mld_caggrmap_bld.f90
 mlprec/impl/mld_ccoarse_bld.f90
 mlprec/impl/mld_ccprecset.F90
 mlprec/impl/mld_cprecinit.F90
 mlprec/impl/mld_cprecset.F90
 mlprec/impl/mld_d_dec_map_bld.f90
 mlprec/impl/mld_daggrmap_bld.f90
 mlprec/impl/mld_dcoarse_bld.f90
 mlprec/impl/mld_dcprecset.F90
 mlprec/impl/mld_dprecinit.F90
 mlprec/impl/mld_dprecset.F90
 mlprec/impl/mld_s_dec_map_bld.f90
 mlprec/impl/mld_saggrmap_bld.f90
 mlprec/impl/mld_scoarse_bld.f90
 mlprec/impl/mld_scprecset.F90
 mlprec/impl/mld_sprecinit.F90
 mlprec/impl/mld_sprecset.F90
 mlprec/impl/mld_z_dec_map_bld.f90
 mlprec/impl/mld_zaggrmap_bld.f90
 mlprec/impl/mld_zcoarse_bld.f90
 mlprec/impl/mld_zcprecset.F90
 mlprec/impl/mld_zprecinit.F90
 mlprec/impl/mld_zprecset.F90
 mlprec/mld_base_prec_type.F90
 mlprec/mld_c_inner_mod.f90
 mlprec/mld_c_onelev_mod.f90
 mlprec/mld_d_base_solver_mod.f90
 mlprec/mld_d_inner_mod.f90
 mlprec/mld_d_onelev_mod.f90
 mlprec/mld_d_prec_type.f90
 mlprec/mld_d_umf_solver.F90
 mlprec/mld_s_inner_mod.f90
 mlprec/mld_s_onelev_mod.f90
 mlprec/mld_z_inner_mod.f90
 mlprec/mld_z_onelev_mod.f90
 tests/pdegen/ppde2d.f90
 tests/pdegen/ppde3d.f90
 tests/pdegen/runs/ppde.inp
 tests/pdegen/spde2d.f90
 tests/pdegen/spde3d.f90

Merged changes from trunk for aggregation ordering.
stopcriterion
Salvatore Filippone 10 years ago
commit 33c9c6ae9f

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 B

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 B

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 B

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 650 B

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 B

After

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 667 B

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 467 B

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

After

Width:  |  Height:  |  Size: 250 B

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -22,31 +22,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html13"
<!--Navigation Panel-->
<A NAME="tex2html14"
HREF="node1.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_g.png">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png">
<A NAME="tex2html11"
<A NAME="tex2html12"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html14"
<B> Next:</B> <A NAME="tex2html15"
HREF="node1.html">Abstract</A>
&nbsp; <B> <A NAME="tex2html12"
&nbsp; <B> <A NAME="tex2html13"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<BIG CLASS="XXLARGE"><B>MLD2P4
<FONT SIZE="+2"><B>MLD2P4
<BR>
<BR>
User's and Reference Guide</B></BIG>
<BR><SPAN CLASS="textit"><BIG CLASS="LARGE">A guide for the Multi-Level Domain Decomposition
User's and Reference Guide</B></FONT>
<BR><I><FONT SIZE="+1">A guide for the Multi-Level Domain Decomposition
Parallel Preconditioners Package
based on PSBLAS</BIG></SPAN>
based on PSBLAS</FONT></I>
<BR>
<BR>
<BR>
@ -62,9 +61,9 @@ University of Rome ``Tor Vergata'', Italy
<BR>
<BR>
<BR>
Software version: 2.0
Software version: 2.1
<BR>
Oct. 12, 2015
Mar. 31, 2016
<BR>
@ -77,70 +76,70 @@ Oct. 12, 2015
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"></A>
<UL CLASS="ChildLinks">
<LI><A NAME="tex2html15"
HREF="node1.html">Abstract</A>
<UL>
<LI><A NAME="tex2html16"
HREF="node2.html">Contents</A>
HREF="node1.html">Abstract</A>
<LI><A NAME="tex2html17"
HREF="node3.html">General Overview</A>
HREF="node2.html">Contents</A>
<LI><A NAME="tex2html18"
HREF="node4.html">Code Distribution</A>
HREF="node3.html">General Overview</A>
<LI><A NAME="tex2html19"
HREF="node4.html">Code Distribution</A>
<LI><A NAME="tex2html20"
HREF="node5.html">Configuring and Building MLD2P4</A>
<UL>
<LI><A NAME="tex2html20"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html21"
HREF="node7.html">Optional third party libraries</A>
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html22"
HREF="node8.html">Configuration options</A>
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html23"
HREF="node9.html">Bug reporting</A>
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html24"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html25"
HREF="node10.html">Example and test programs</A>
</UL>
<BR>
<LI><A NAME="tex2html25"
<LI><A NAME="tex2html26"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<UL>
<LI><A NAME="tex2html26"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html27"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html28"
HREF="node13.html">Smoothed Aggregation</A>
</UL>
<BR>
<LI><A NAME="tex2html28"
<LI><A NAME="tex2html29"
HREF="node14.html">Getting Started</A>
<UL>
<LI><A NAME="tex2html29"
<LI><A NAME="tex2html30"
HREF="node15.html">Examples</A>
</UL>
<BR>
<LI><A NAME="tex2html30"
<LI><A NAME="tex2html31"
HREF="node16.html">User Interface</A>
<UL>
<LI><A NAME="tex2html31"
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html32"
HREF="node18.html">Subroutine mld_precset</A>
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html33"
HREF="node19.html">Subroutine mld_precbld</A>
HREF="node18.html">Subroutine mld_precset</A>
<LI><A NAME="tex2html34"
HREF="node20.html">Subroutine mld_precaply</A>
HREF="node19.html">Subroutine mld_precbld</A>
<LI><A NAME="tex2html35"
HREF="node21.html">Subroutine mld_precfree</A>
HREF="node20.html">Subroutine mld_precaply</A>
<LI><A NAME="tex2html36"
HREF="node21.html">Subroutine mld_precfree</A>
<LI><A NAME="tex2html37"
HREF="node22.html">Subroutine mld_precdescr</A>
</UL>
<BR>
<LI><A NAME="tex2html37"
HREF="node23.html">Error Handling</A>
<LI><A NAME="tex2html38"
HREF="node24.html">License</A>
HREF="node23.html">Error Handling</A>
<LI><A NAME="tex2html39"
HREF="node25.html">Bibliography</A>
HREF="node24.html">License</A>
<LI><A NAME="tex2html40"
HREF="node25.html">Bibliography</A>
<LI><A NAME="tex2html41"
HREF="node26.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html51"
<!--Navigation Panel-->
<A NAME="tex2html52"
HREF="node2.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html47"
<A NAME="tex2html48"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html41"
<A NAME="tex2html42"
HREF="userhtml.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html49"
<A NAME="tex2html50"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html52"
<B> Next:</B> <A NAME="tex2html53"
HREF="node2.html">Contents</A>
<B> Up:</B> <A NAME="tex2html48"
<B> Up:</B> <A NAME="tex2html49"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html42"
<B> Previous:</B> <A NAME="tex2html43"
HREF="userhtml.html">userhtml</A>
&nbsp; <B> <A NAME="tex2html50"
&nbsp; <B> <A NAME="tex2html51"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00010000000000000000">
@ -87,30 +86,29 @@ the user interface of MLD2P4.
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html51"
<A NAME="tex2html52"
HREF="node2.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html47"
<A NAME="tex2html48"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html41"
<A NAME="tex2html42"
HREF="userhtml.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html49"
<A NAME="tex2html50"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html52"
<B> Next:</B> <A NAME="tex2html53"
HREF="node2.html">Contents</A>
<B> Up:</B> <A NAME="tex2html48"
<B> Up:</B> <A NAME="tex2html49"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html42"
<B> Previous:</B> <A NAME="tex2html43"
HREF="userhtml.html">userhtml</A>
&nbsp; <B> <A NAME="tex2html50"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html51"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -24,31 +24,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html183"
<!--Navigation Panel-->
<A NAME="tex2html184"
HREF="node11.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html179"
<A NAME="tex2html180"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html175"
<A NAME="tex2html176"
HREF="node9.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html181"
<A NAME="tex2html182"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html184"
<B> Next:</B> <A NAME="tex2html185"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Up:</B> <A NAME="tex2html180"
<B> Up:</B> <A NAME="tex2html181"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html176"
<B> Previous:</B> <A NAME="tex2html177"
HREF="node9.html">Bug reporting</A>
&nbsp; <B> <A NAME="tex2html182"
&nbsp; <B> <A NAME="tex2html183"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00055000000000000000"></A><A NAME="sec:ex_and_test"></A>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html195"
<!--Navigation Panel-->
<A NAME="tex2html196"
HREF="node12.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html191"
<A NAME="tex2html192"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html185"
<A NAME="tex2html186"
HREF="node10.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html193"
<A NAME="tex2html194"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html196"
<B> Next:</B> <A NAME="tex2html197"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<B> Up:</B> <A NAME="tex2html192"
<B> Up:</B> <A NAME="tex2html193"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html186"
<B> Previous:</B> <A NAME="tex2html187"
HREF="node10.html">Example and test programs</A>
&nbsp; <B> <A NAME="tex2html194"
&nbsp; <B> <A NAME="tex2html195"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00060000000000000000"></A><A NAME="sec:background"></A>
@ -58,7 +57,7 @@ Multi-level Domain Decomposition Background
</H1>
<P>
<SPAN CLASS="textit">Domain Decomposition</SPAN> (DD) preconditioners, coupled with Krylov iterative
<I>Domain Decomposition</I> (DD) preconditioners, coupled with Krylov iterative
solvers, are widely used in the parallel solution of large and sparse linear systems.
These preconditioners are based on the divide and conquer technique: the matrix
to be preconditioned is divided into submatrices, a ``local'' linear system
@ -71,13 +70,13 @@ solution of the original problem from the local solutions
[<A
HREF="node25.html#Cai_Widlund_92">6</A>,<A
HREF="node25.html#dd1_94">7</A>,<A
HREF="node25.html#dd2_96">22</A>].
HREF="node25.html#dd2_96">23</A>].
<P>
<SPAN CLASS="textit">Additive Schwarz</SPAN> preconditioners are DD preconditioners using overlapping
<I>Additive Schwarz</I> preconditioners are DD preconditioners using overlapping
submatrices, i.e. with some common rows, to couple the local information
related to the submatrices (see, e.g., [<A
HREF="node25.html#dd2_96">22</A>]).
HREF="node25.html#dd2_96">23</A>]).
The main motivation for choosing Additive Schwarz preconditioners is their
intrinsic parallelism. A drawback of these
preconditioners is that the number of iterations of the preconditioned solvers
@ -90,15 +89,15 @@ in a coarse space, which globally couples the information related to the single
submatrices.
<P>
<SPAN CLASS="textit">Two-level Schwarz</SPAN> preconditioners are obtained
<I>Two-level Schwarz</I> preconditioners are obtained
by combining basic (one-level) Schwarz preconditioners with a coarse-level
correction. In this context, the one-level preconditioner is often
called `smoother'. Different two-level preconditioners are obtained by varying the
choice of the smoother and of the coarse-level correction, and the
way they are combined [<A
HREF="node25.html#dd2_96">22</A>]. The same reasoning can be applied starting
HREF="node25.html#dd2_96">23</A>]. The same reasoning can be applied starting
from the coarse-level system, i.e. a coarse-space correction can be built
from this system, thus obtaining <SPAN CLASS="textit">multi-level</SPAN> preconditioners.
from this system, thus obtaining <I>multi-level</I> preconditioners.
<P>
It is worth noting that optimal preconditioners do not necessarily correspond
@ -120,17 +119,17 @@ are considered. The algebraic approach builds coarse-space corrections using onl
information. It performs a fully automatic coarsening and enforces the interplay between
the fine and coarse levels by suitably choosing the coarse space and the coarse-to-fine
interpolation [<A
HREF="node25.html#StubenGMD69_99">24</A>].
HREF="node25.html#StubenGMD69_99">25</A>].
<P>
MLD2P4 uses a pure algebraic approach for building the sequence of coarse matrices
starting from the original matrix. The algebraic approach is based on the <SPAN CLASS="textit">smoothed
aggregation</SPAN> algorithm [<A
starting from the original matrix. The algebraic approach is based on the <I>smoothed
aggregation</I> algorithm [<A
HREF="node25.html#BREZINA_VANEK">1</A>,<A
HREF="node25.html#VANEK_MANDEL_BREZINA">26</A>]. A decoupled version
HREF="node25.html#VANEK_MANDEL_BREZINA">27</A>]. A decoupled version
of this algorithm is implemented, where the smoothed aggregation is applied locally
to each submatrix [<A
HREF="node25.html#TUMINARO_TONG">25</A>]. In the next two subsections we provide
HREF="node25.html#TUMINARO_TONG">26</A>]. In the next two subsections we provide
a brief description of the multi-level Schwarz preconditioners and of the smoothed
aggregation technique as implemented in MLD2P4. For further details the reader
is referred to [<A
@ -138,44 +137,43 @@ is referred to [<A
HREF="node25.html#aaecc_07">3</A>,<A
HREF="node25.html#apnum_07">4</A>,<A
HREF="node25.html#MLD2P4_TOMS">8</A>,<A
HREF="node25.html#dd2_96">22</A>].
HREF="node25.html#dd2_96">23</A>].
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
<LI><A NAME="tex2html197"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<UL>
<LI><A NAME="tex2html198"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html199"
HREF="node13.html">Smoothed Aggregation</A>
</UL>
<!--End of Table of Child-Links-->
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html195"
<A NAME="tex2html196"
HREF="node12.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html191"
<A NAME="tex2html192"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html185"
<A NAME="tex2html186"
HREF="node10.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html193"
<A NAME="tex2html194"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html196"
<B> Next:</B> <A NAME="tex2html197"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<B> Up:</B> <A NAME="tex2html192"
<B> Up:</B> <A NAME="tex2html193"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html186"
<B> Previous:</B> <A NAME="tex2html187"
HREF="node10.html">Example and test programs</A>
&nbsp; <B> <A NAME="tex2html194"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html195"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html209"
<A NAME="tex2html210"
HREF="node13.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html205"
<A NAME="tex2html206"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html199"
<A NAME="tex2html200"
HREF="node11.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html207"
<A NAME="tex2html208"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html210"
<B> Next:</B> <A NAME="tex2html211"
HREF="node13.html">Smoothed Aggregation</A>
<B> Up:</B> <A NAME="tex2html206"
<B> Up:</B> <A NAME="tex2html207"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html200"
<B> Previous:</B> <A NAME="tex2html201"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
&nbsp; <B> <A NAME="tex2html208"
&nbsp; <B> <A NAME="tex2html209"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -295,7 +295,7 @@ ILU(<IMG
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img36.png"
ALT="$p,t$">) [<A
HREF="node25.html#Saad_book">21</A>, Chapter 10].
HREF="node25.html#Saad_book">22</A>, Chapter 10].
<P>
A variant of the classical AS preconditioner that outperforms it
@ -303,7 +303,7 @@ in terms of convergence rate and of computation and communication
time on parallel distributed-memory computers is the so-called <I>Restricted AS
(RAS)</I> preconditioner&nbsp;[<A
HREF="node25.html#CAI_SARKIS">5</A>,<A
HREF="node25.html#EFSTATHIOU">14</A>]. It
HREF="node25.html#EFSTATHIOU">15</A>]. It
is obtained by zeroing the components of <IMG
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img33.png"
@ -387,7 +387,7 @@ of <IMG
SRC="img11.png"
ALT="$W$"> increases [<A
HREF="node25.html#dd1_94">7</A>,<A
HREF="node25.html#dd2_96">22</A>]. To reduce the dependency
HREF="node25.html#dd2_96">23</A>]. To reduce the dependency
of the number of iterations on the degree of parallelism we may
introduce a global coupling among the overlapping partitions by defining
a coarse-space approximation <IMG
@ -642,12 +642,12 @@ in which the coarse-level correction is re-applied starting from the current
coarse-level system. The corresponding preconditioners, called <I>multi-level</I>
preconditioners, can significantly reduce the computational cost of preconditioning
with respect to the two-level case (see [<A
HREF="node25.html#dd2_96">22</A>, Chapter 3]).
HREF="node25.html#dd2_96">23</A>, Chapter 3]).
Additive and hybrid multilevel preconditioners
are obtained as direct extensions of the two-level counterparts.
For a detailed descrition of them, the reader is
referred to [<A
HREF="node25.html#dd2_96">22</A>, Chapter 3].
HREF="node25.html#dd2_96">23</A>, Chapter 3].
The algorithm for the application of a multi-level hybrid
post-smoothed preconditioner <IMG
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
@ -685,7 +685,7 @@ denoted by <IMG
SRC="img67.png"
ALT="$R_l$">.
<DIV ALIGN="CENTER"><A NAME="fig:mlhpost_alg"></A><A NAME="509"></A>
<DIV ALIGN="CENTER"><A NAME="fig:mlhpost_alg"></A><A NAME="514"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 1:</STRONG>
Application of the multi-level hybrid post-smoothed preconditioner.</CAPTION>
@ -726,7 +726,7 @@ $w = y_1$;
\begin{tabbing}
\quad \=\quad...
...= y_l+r_l$\\
\textbf{endfor} [1mm]
\textbf{endfor} \\ [1mm]
$w = y_1$;
\end{tabbing}}
\end{minipage}}">
@ -738,26 +738,26 @@ $w = y_1$;
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html209"
<A NAME="tex2html210"
HREF="node13.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html205"
<A NAME="tex2html206"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html199"
<A NAME="tex2html200"
HREF="node11.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html207"
<A NAME="tex2html208"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html210"
<B> Next:</B> <A NAME="tex2html211"
HREF="node13.html">Smoothed Aggregation</A>
<B> Up:</B> <A NAME="tex2html206"
<B> Up:</B> <A NAME="tex2html207"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html200"
<B> Previous:</B> <A NAME="tex2html201"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
&nbsp; <B> <A NAME="tex2html208"
&nbsp; <B> <A NAME="tex2html209"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -25,26 +25,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html219"
<A NAME="tex2html220"
HREF="node14.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html215"
<A NAME="tex2html216"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html211"
<A NAME="tex2html212"
HREF="node12.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html217"
<A NAME="tex2html218"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html220"
<B> Next:</B> <A NAME="tex2html221"
HREF="node14.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html216"
<B> Up:</B> <A NAME="tex2html217"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html212"
<B> Previous:</B> <A NAME="tex2html213"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
&nbsp; <B> <A NAME="tex2html218"
&nbsp; <B> <A NAME="tex2html219"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -66,7 +66,7 @@ the coarse-level matrix <IMG
ALT="$A_C$">, MLD2P4 uses the <I>smoothed aggregation</I>
algorithm described in [<A
HREF="node25.html#BREZINA_VANEK">1</A>,<A
HREF="node25.html#VANEK_MANDEL_BREZINA">26</A>].
HREF="node25.html#VANEK_MANDEL_BREZINA">27</A>].
The basic idea of this algorithm is to build a coarse set of vertices
<IMG
WIDTH="32" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
@ -115,7 +115,7 @@ Three main steps can be identified in the smoothed aggregation procedure:
To perform the coarsening step, we have implemented the aggregation algorithm sketched
in [<A
HREF="node25.html#apnum_07">4</A>]. According to [<A
HREF="node25.html#VANEK_MANDEL_BREZINA">26</A>], a modification of
HREF="node25.html#VANEK_MANDEL_BREZINA">27</A>], a modification of
this algorithm has been actually considered,
in which each aggregate <IMG
WIDTH="26" HEIGHT="32" ALIGN="MIDDLE" BORDER="0"
@ -173,7 +173,7 @@ since it has been shown to produce good results in practice
[<A
HREF="node25.html#aaecc_07">3</A>,<A
HREF="node25.html#apnum_07">4</A>,<A
HREF="node25.html#TUMINARO_TONG">25</A>].
HREF="node25.html#TUMINARO_TONG">26</A>].
<P>
The prolongator <IMG
@ -252,7 +252,7 @@ in order to remove oscillatory components from the range of the prolongator
and hence to improve the convergence properties of the multi-level
Schwarz method [<A
HREF="node25.html#BREZINA_VANEK">1</A>,<A
HREF="node25.html#StubenGMD69_99">24</A>].
HREF="node25.html#StubenGMD69_99">25</A>].
A simple choice for <IMG
WIDTH="16" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img84.png"
@ -288,26 +288,26 @@ using some estimate of the spectral radius of <IMG
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html219"
<A NAME="tex2html220"
HREF="node14.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html215"
<A NAME="tex2html216"
HREF="node11.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html211"
<A NAME="tex2html212"
HREF="node12.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html217"
<A NAME="tex2html218"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html220"
<B> Next:</B> <A NAME="tex2html221"
HREF="node14.html">Getting Started</A>
<B> Up:</B> <A NAME="tex2html216"
<B> Up:</B> <A NAME="tex2html217"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<B> Previous:</B> <A NAME="tex2html212"
<B> Previous:</B> <A NAME="tex2html213"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
&nbsp; <B> <A NAME="tex2html218"
&nbsp; <B> <A NAME="tex2html219"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html231"
<A NAME="tex2html232"
HREF="node15.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html227"
<A NAME="tex2html228"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html221"
<A NAME="tex2html222"
HREF="node13.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html229"
<A NAME="tex2html230"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html232"
<B> Next:</B> <A NAME="tex2html233"
HREF="node15.html">Examples</A>
<B> Up:</B> <A NAME="tex2html228"
<B> Up:</B> <A NAME="tex2html229"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html222"
<B> Previous:</B> <A NAME="tex2html223"
HREF="node13.html">Smoothed Aggregation</A>
&nbsp; <B> <A NAME="tex2html230"
&nbsp; <B> <A NAME="tex2html231"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -59,7 +59,7 @@ Getting Started
<P>
We describe the basics for building and applying MLD2P4 one-level and multi-level
Schwarz preconditioners with the Krylov solvers included in PSBLAS [<A
HREF="node25.html#PSBLASGUIDE">15</A>].
HREF="node25.html#PSBLASGUIDE">16</A>].
The following steps are required:
<OL>
@ -131,7 +131,7 @@ for the coarsest-level solvers available in MLD2P4).
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="924"></A>
<DIV ALIGN="CENTER"><A NAME="943"></A>
<TABLE>
<CAPTION><STRONG>Table 1:</STRONG>
Preconditioner types, corresponding strings and default choices.
@ -197,32 +197,32 @@ Preconditioner types, corresponding strings and default choices.
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html233"
<LI><A NAME="tex2html234"
HREF="node15.html">Examples</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html231"
<A NAME="tex2html232"
HREF="node15.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html227"
<A NAME="tex2html228"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html221"
<A NAME="tex2html222"
HREF="node13.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html229"
<A NAME="tex2html230"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html232"
<B> Next:</B> <A NAME="tex2html233"
HREF="node15.html">Examples</A>
<B> Up:</B> <A NAME="tex2html228"
<B> Up:</B> <A NAME="tex2html229"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html222"
<B> Previous:</B> <A NAME="tex2html223"
HREF="node13.html">Smoothed Aggregation</A>
&nbsp; <B> <A NAME="tex2html230"
&nbsp; <B> <A NAME="tex2html231"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -24,31 +24,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html242"
<!--Navigation Panel-->
<A NAME="tex2html243"
HREF="node16.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html238"
<A NAME="tex2html239"
HREF="node14.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html234"
<A NAME="tex2html235"
HREF="node14.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html240"
<A NAME="tex2html241"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html243"
<B> Next:</B> <A NAME="tex2html244"
HREF="node16.html">User Interface</A>
<B> Up:</B> <A NAME="tex2html239"
<B> Up:</B> <A NAME="tex2html240"
HREF="node14.html">Getting Started</A>
<B> Previous:</B> <A NAME="tex2html235"
<B> Previous:</B> <A NAME="tex2html236"
HREF="node14.html">Getting Started</A>
&nbsp; <B> <A NAME="tex2html241"
&nbsp; <B> <A NAME="tex2html242"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00071000000000000000"></A><A NAME="sec:examples"></A>
@ -76,7 +75,7 @@ in the directory <code>examples/fileread</code> of the MLD2P4 tree (see
Section&nbsp;<A HREF="node10.html#sec:ex_and_test">3.5</A>).
For details on the use of the PSBLAS routines, see the PSBLAS User's
Guide [<A
HREF="node25.html#PSBLASGUIDE">15</A>].
HREF="node25.html#PSBLASGUIDE">16</A>].
<P>
The setup and application of the default multi-level
@ -87,7 +86,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="930"></A>
<DIV ALIGN="CENTER"><A NAME="fig:ex_default"></A><A NAME="946"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
Setup and application of the default multi-level Schwarz preconditioner.
@ -164,6 +163,10 @@ preconditioner, which uses block Jacobi with ILU(0) on the
local blocks as post-smoother, has a coarsest matrix replicated on the processors,
and solves the coarsest-level system with the LU factorization from UMFPACK&nbsp;[<A
HREF="node25.html#UMFPACK">9</A>].
Figure&nbsp;<A HREF="#fig:ex_3lhm">4</A> shows how to set a three-level preconditioner similar to the one of&nbsp;<A HREF="#fig:ex_3lh">3</A>, but the coarsest-level systems is solved with the multifrontal factorization from MUMPS&nbsp;[<A
HREF="node25.html#UMFPACK">9</A>].
Note that MUMPS can be used on both replicated and distributed coarsest level matrices,
as a global and local solver respectively.
The number of levels is specified by using <code>mld_precinit</code>; the other
preconditioner parameters are set by calling <code>mld_precset</code>. Note that
the type of multilevel framework (i.e. multiplicative among the levels
@ -171,7 +174,7 @@ with post-smoothing only) is not specified since it is the default
set by <code>mld_precinit</code>.
<P>
Figure&nbsp;<A HREF="#fig:ex_3la">4</A> shows how to
Figure&nbsp;<A HREF="#fig:ex_3la">5</A> shows how to
set a three-level additive Schwarz preconditioner,
which uses RAS, with overlap 1 and ILU(0) on the blocks,
as pre- and post-smoother, and applies five block-Jacobi sweeps, with
@ -180,11 +183,11 @@ solver. Again, <code>mld_precset</code> is used only to set
non-default values of the parameters (see Tables&nbsp;<A HREF="#tab:p_type">2</A>-<A HREF="#tab:p_coarse">5</A>).
In both cases, the construction and the application of the preconditioner
are carried out as for the default multi-level preconditioner.
The code fragments shown in in Figures&nbsp;<A HREF="#fig:ex_3lh">3</A>-<A HREF="#fig:ex_3la">4</A> are
The code fragments shown in in Figures&nbsp;<A HREF="#fig:ex_3lh">3</A>&nbsp;<A HREF="#fig:ex_3lhm">4</A>-<A HREF="#fig:ex_3la">5</A> are
included in the example program file <code>mld_dexample_ml.f90</code> too.
<P>
Finally, Figure&nbsp;<A HREF="#fig:ex_1l">5</A> shows the setup of a one-level
Finally, Figure&nbsp;<A HREF="#fig:ex_1l">6</A> shows the setup of a one-level
additive Schwarz preconditioner, i.e. RAS with overlap 2. The corresponding
example program is available in <code>mld_dexample_</code> <code>1lev.f90</code>.
@ -195,7 +198,7 @@ boundary conditions are also available in the directory <code>examples/pdegen</c
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex_3lh"></A><A NAME="932"></A>
<DIV ALIGN="CENTER"><A NAME="fig:ex_3lh"></A><A NAME="948"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
Setup of a hybrid three-level Schwarz preconditioner.</CAPTION>
@ -228,9 +231,43 @@ Setup of a hybrid three-level Schwarz preconditioner.</CAPTION>
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex_3la"></A><A NAME="934"></A>
<DIV ALIGN="CENTER"><A NAME="fig:ex_3lhm"></A><A NAME="950"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4:</STRONG>
Setup of a hybrid three-level Schwarz preconditioner.</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
</DIV><TABLE WIDTH="90%">
<TR><TD>
<PRE>
... ...
! set a three-level hybrid Schwarz preconditioner, which uses
! block Jacobi (with ILU(0) on the blocks) as post-smoother,
! a coarsest matrix replicated on the processors, and the
! multifrontal solver in MUMPS as coarse-level solver
call mld_precinit(P,'ML',info,nlev=3)
call mld_precset(P,mld_smoother_type_,'BJAC',info)
call mld_precset(P,mld_coarse_mat_,'REPL',info)
call mld_precset(P,mld_coarse_solve_,'MUMPS',info)
... ...
</PRE>
</TD></TR>
</TABLE>
<DIV ALIGN="CENTER">
</DIV>
<P>
<DIV ALIGN="CENTER">
</DIV></TD></TR>
</TABLE>
</DIV>
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex_3la"></A><A NAME="952"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 5:</STRONG>
Setup of an additive three-level Schwarz preconditioner.</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
@ -260,9 +297,9 @@ Setup of an additive three-level Schwarz preconditioner.</CAPTION>
<P>
<DIV ALIGN="CENTER"><A NAME="fig:ex_1l"></A><A NAME="936"></A>
<DIV ALIGN="CENTER"><A NAME="fig:ex_1l"></A><A NAME="954"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 5:</STRONG>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 6:</STRONG>
Setup of a one-level Schwarz preconditioner.</CAPTION>
<TR><TD>
<DIV ALIGN="CENTER">
@ -284,30 +321,29 @@ Setup of a one-level Schwarz preconditioner.</CAPTION>
</DIV>
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html242"
<A NAME="tex2html243"
HREF="node16.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html238"
<A NAME="tex2html239"
HREF="node14.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html234"
<A NAME="tex2html235"
HREF="node14.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html240"
<A NAME="tex2html241"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html243"
<B> Next:</B> <A NAME="tex2html244"
HREF="node16.html">User Interface</A>
<B> Up:</B> <A NAME="tex2html239"
<B> Up:</B> <A NAME="tex2html240"
HREF="node14.html">Getting Started</A>
<B> Previous:</B> <A NAME="tex2html235"
<B> Previous:</B> <A NAME="tex2html236"
HREF="node14.html">Getting Started</A>
&nbsp; <B> <A NAME="tex2html241"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html242"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html254"
<!--Navigation Panel-->
<A NAME="tex2html255"
HREF="node17.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html250"
<A NAME="tex2html251"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html244"
<A NAME="tex2html245"
HREF="node15.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html252"
<A NAME="tex2html253"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html255"
<B> Next:</B> <A NAME="tex2html256"
HREF="node17.html">Subroutine mld_precinit</A>
<B> Up:</B> <A NAME="tex2html251"
<B> Up:</B> <A NAME="tex2html252"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html245"
<B> Previous:</B> <A NAME="tex2html246"
HREF="node15.html">Examples</A>
&nbsp; <B> <A NAME="tex2html253"
&nbsp; <B> <A NAME="tex2html254"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00080000000000000000"></A><A NAME="sec:userinterface"></A>
@ -73,28 +72,28 @@ i.e.
<UL>
<LI>the sparse matrix data structure, containing the matrix to be
preconditioned, must be of type <code>psb_</code><SPAN CLASS="textit">x</SPAN><code>spmat_type</code>
with <SPAN CLASS="textit">x</SPAN> = <code>s</code> for real single precision, <SPAN CLASS="textit">x</SPAN> = <code>d</code>
for real double precision, <SPAN CLASS="textit">x</SPAN> = <code>c</code> for complex single precision,
<SPAN CLASS="textit">x</SPAN> = <code>z</code> for complex double precision;
preconditioned, must be of type <code>psb_</code><I>x</I><code>spmat_type</code>
with <I>x</I> = <code>s</code> for real single precision, <I>x</I> = <code>d</code>
for real double precision, <I>x</I> = <code>c</code> for complex single precision,
<I>x</I> = <code>z</code> for complex double precision;
</LI>
<LI>the preconditioner data structure must be of type
<code>mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type</code>, with <SPAN CLASS="textit">x</SPAN> =
<code>mld_</code><I>x</I><code>prec_type</code>, with <I>x</I> =
<code>s</code>, <code>d</code>, <code>c</code>, <code>z</code>, according to the sparse
matrix data structure;
</LI>
<LI>the arrays containing the vectors <SPAN CLASS="MATH"><IMG
<LI>the arrays containing the vectors <IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img22.png"
ALT="$v$"></SPAN> and <SPAN CLASS="MATH"><IMG
ALT="$v$"> and <IMG
WIDTH="17" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img89.png"
ALT="$w$"></SPAN> involved in
the preconditioner application <SPAN CLASS="MATH"><IMG
ALT="$w$"> involved in
the preconditioner application <IMG
WIDTH="86" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img61.png"
ALT="$w=M^{-1}v$"></SPAN> must be of type
<code>psb_</code><SPAN CLASS="textit">x</SPAN><code>vect_type</code> with <SPAN CLASS="textit">x</SPAN> =
ALT="$w=M^{-1}v$"> must be of type
<code>psb_</code><I>x</I><code>vect_type</code> with <I>x</I> =
<code>s</code>, <code>d</code>, <code>c</code>, <code>z</code>, in a manner completely
analogous to the sparse matrix type;
</LI>
@ -112,45 +111,44 @@ A description of each routine is given in the remainder of this section.
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
<LI><A NAME="tex2html256"
HREF="node17.html">Subroutine mld_precinit</A>
<UL>
<LI><A NAME="tex2html257"
HREF="node18.html">Subroutine mld_precset</A>
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html258"
HREF="node19.html">Subroutine mld_precbld</A>
HREF="node18.html">Subroutine mld_precset</A>
<LI><A NAME="tex2html259"
HREF="node20.html">Subroutine mld_precaply</A>
HREF="node19.html">Subroutine mld_precbld</A>
<LI><A NAME="tex2html260"
HREF="node21.html">Subroutine mld_precfree</A>
HREF="node20.html">Subroutine mld_precaply</A>
<LI><A NAME="tex2html261"
HREF="node21.html">Subroutine mld_precfree</A>
<LI><A NAME="tex2html262"
HREF="node22.html">Subroutine mld_precdescr</A>
</UL>
<!--End of Table of Child-Links-->
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html254"
<A NAME="tex2html255"
HREF="node17.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html250"
<A NAME="tex2html251"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html244"
<A NAME="tex2html245"
HREF="node15.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html252"
<A NAME="tex2html253"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html255"
<B> Next:</B> <A NAME="tex2html256"
HREF="node17.html">Subroutine mld_precinit</A>
<B> Up:</B> <A NAME="tex2html251"
<B> Up:</B> <A NAME="tex2html252"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html245"
<B> Previous:</B> <A NAME="tex2html246"
HREF="node15.html">Examples</A>
&nbsp; <B> <A NAME="tex2html253"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html254"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html272"
<!--Navigation Panel-->
<A NAME="tex2html273"
HREF="node18.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html268"
<A NAME="tex2html269"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html262"
<A NAME="tex2html263"
HREF="node16.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html270"
<A NAME="tex2html271"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html273"
<B> Next:</B> <A NAME="tex2html274"
HREF="node18.html">Subroutine mld_precset</A>
<B> Up:</B> <A NAME="tex2html269"
<B> Up:</B> <A NAME="tex2html270"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html263"
<B> Previous:</B> <A NAME="tex2html264"
HREF="node16.html">User Interface</A>
&nbsp; <B> <A NAME="tex2html271"
&nbsp; <B> <A NAME="tex2html272"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00081000000000000000"></A><A NAME="sec:precinit"></A>
@ -69,15 +68,15 @@ This routine allocates and initializes the preconditioner data structure,
according to the preconditioner type chosen by the user.
<P>
<BIG CLASS="LARGE"><B>Arguments</B></BIG>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>p</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type), intent(inout)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><I>x</I><code>prec_type), intent(inout)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <SPAN CLASS="textit">x</SPAN>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <I>x</I>
must be chosen according to the real/complex, single/double
precision version of MLD2P4 under use.</TD>
</TR>
@ -110,30 +109,29 @@ according to the preconditioner type chosen by the user.
<P>
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html272"
<A NAME="tex2html273"
HREF="node18.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html268"
<A NAME="tex2html269"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html262"
<A NAME="tex2html263"
HREF="node16.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html270"
<A NAME="tex2html271"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html273"
<B> Next:</B> <A NAME="tex2html274"
HREF="node18.html">Subroutine mld_precset</A>
<B> Up:</B> <A NAME="tex2html269"
<B> Up:</B> <A NAME="tex2html270"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html263"
<B> Previous:</B> <A NAME="tex2html264"
HREF="node16.html">User Interface</A>
&nbsp; <B> <A NAME="tex2html271"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html272"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html284"
<!--Navigation Panel-->
<A NAME="tex2html285"
HREF="node19.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html280"
<A NAME="tex2html281"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html274"
<A NAME="tex2html275"
HREF="node17.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html282"
<A NAME="tex2html283"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html285"
<B> Next:</B> <A NAME="tex2html286"
HREF="node19.html">Subroutine mld_precbld</A>
<B> Up:</B> <A NAME="tex2html281"
<B> Up:</B> <A NAME="tex2html282"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html275"
<B> Previous:</B> <A NAME="tex2html276"
HREF="node17.html">Subroutine mld_precinit</A>
&nbsp; <B> <A NAME="tex2html283"
&nbsp; <B> <A NAME="tex2html284"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00082000000000000000"></A><A NAME="sec:precset"></A>
@ -89,25 +88,25 @@ the new smoother/solver variable to the setup routine as follows:
<BR><code>call p%set(solver,info [,ilev])</code>
</DIV>
In this way, the variable will act as a <SPAN CLASS="textit">mold</SPAN> to which the
In this way, the variable will act as a <I>mold</I> to which the
preconditioner will conform, even though the MLD2P4 library is not
modified, and thus has no direct knowledge about the new type.
<P>
<BIG CLASS="LARGE"><B>Arguments</B></BIG>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>p</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type), intent(inout)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><I>x</I><code>prec_type), intent(inout)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <SPAN CLASS="textit">x</SPAN> must
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <I>x</I> must
be chosen according to the real/complex, single/double precision
version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>what</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(in)</code> <SPAN CLASS="textit">or</SPAN> <code>character(len=*)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer, intent(in)</code> <I>or</I> <code>character(len=*)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The parameter to be set. It can be specified by
@ -116,8 +115,8 @@ modified, and thus has no direct knowledge about the new type.
Tables&nbsp;<A HREF="#tab:p_type">2</A>-<A HREF="#tab:p_coarse">5</A>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>val </code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer</code> <SPAN CLASS="textit">or</SPAN> <code>character(len=*)</code> <SPAN CLASS="textit">or</SPAN>
<code>real(psb_spk_)</code> <SPAN CLASS="textit">or</SPAN> <code>real(psb_dpk_)</code>,
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>integer</code> <I>or</I> <code>character(len=*)</code> <I>or</I>
<code>real(psb_spk_)</code> <I>or</I> <code>real(psb_dpk_)</code>,
<code>intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
@ -180,7 +179,7 @@ object is specified its defaults are also set, overriding in both
cases any previous settings even if explicitly specified. Therefore if
the user sets a new smoother, and wishes to use a solver
different from the default one, the call to set the solver must come
<SPAN CLASS="textit">after</SPAN> the call to set the smoother.
<I>after</I> the call to set the smoother.
<P>
The combination of a Jacobi smoother with a Diagonal Scaling local
solver is equivalent to the strategy called Point Jacobi in the
@ -203,7 +202,7 @@ according to their needs.
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1271"></A>
<DIV ALIGN="CENTER"><A NAME="1302"></A>
<TABLE>
<CAPTION><STRONG>Table 2:</STRONG>
Parameters defining the type of multi-level preconditioner.
@ -247,7 +246,7 @@ Parameters defining the type of multi-level preconditioner.
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1273"></A>
<DIV ALIGN="CENTER"><A NAME="1304"></A>
<TABLE>
<CAPTION><STRONG>Table 3:</STRONG>
Parameters defining the one-level preconditioner used as smoother.
@ -263,10 +262,10 @@ Parameters defining the one-level preconditioner used as smoother.
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_sub_ovr_</code> <BR><code>SUB_OVR</code></TD>
<TD ALIGN="LEFT"><code>integer</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>any&nbsp;int.&nbsp;num.&nbsp;<SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>any&nbsp;int.&nbsp;num.&nbsp;<IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img90.png"
ALT="$\ge 0$"></SPAN></TD>
ALT="$\ge 0$"></TD>
<TD ALIGN="LEFT">1</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Number of overlap layers.</TD>
</TR>
@ -311,30 +310,30 @@ Parameters defining the one-level preconditioner used as smoother.
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_sub_fillin_</code> <BR><code>SUB_FILLIN</code></TD>
<TD ALIGN="LEFT"><code>integer</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img90.png"
ALT="$\ge 0$"></SPAN></TD>
ALT="$\ge 0$"></TD>
<TD ALIGN="LEFT">0</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Fill-in level <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Fill-in level <IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img35.png"
ALT="$p$"></SPAN> of the incomplete LU factorizations.</TD>
ALT="$p$"> of the incomplete LU factorizations.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_sub_iluthrs_</code> <BR><code>SUB_ILUTHRS</code></TD>
<TD ALIGN="LEFT"><code>real(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;real&nbsp;num.&nbsp;<SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;real&nbsp;num.&nbsp;<IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img90.png"
ALT="$\ge 0$"></SPAN></TD>
ALT="$\ge 0$"></TD>
<TD ALIGN="LEFT">0</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Drop tolerance <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Drop tolerance <IMG
WIDTH="11" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img91.png"
ALT="$t$"></SPAN> in the ILU(<SPAN CLASS="MATH"><IMG
ALT="$t$"> in the ILU(<IMG
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img36.png"
ALT="$p,t$"></SPAN>) factorization.</TD>
ALT="$p,t$">) factorization.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_sub_ren_</code> <BR><code>SUB_REN</code></TD>
<TD ALIGN="LEFT"><code>character(len=*)</code></TD>
@ -347,7 +346,7 @@ Parameters defining the one-level preconditioner used as smoother.
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_solver_sweeps_</code> <BR><code>SOLVER_SWEEPS</code></TD>
<TD ALIGN="LEFT"><code>integer</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<IMG
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img92.png"
ALT="$\ge 1$"></TD>
<TD ALIGN="LEFT">1</TD>
@ -363,7 +362,7 @@ Parameters defining the one-level preconditioner used as smoother.
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1275"></A>
<DIV ALIGN="CENTER"><A NAME="1306"></A>
<TABLE>
<CAPTION><STRONG>Table 4:</STRONG>
Parameters defining the aggregation algorithm.
@ -396,6 +395,16 @@ Parameters defining the aggregation algorithm.
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>Aggregation algorithm. Currently, only the
decoupled aggregation is available.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142><code>mld_aggr_ord_</code> <BR><code>AGGR_ORD</code></TD>
<TD ALIGN="LEFT"><code>character(len=*)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'NAT'</TT></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'DEGREE'</TT></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>Initial ordering of indices for aggregation
algorithm: natural ordering or sorted by
descending degree of the node in the
matrix graph. Since aggregation is
heuristics, results will be different.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142><code>mld_aggr_kind_</code> <BR><code>AGGR_KIND</code></TD>
<TD ALIGN="LEFT"><code>character(len=*)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'SMOOTHED'</TT> <TT>'NONSMOOTHED'</TT></TD>
@ -404,16 +413,16 @@ Parameters defining the aggregation algorithm.
(i.e. using the tentative prolongator).</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142><code>mld_aggr_thresh_</code> <BR><code>AGGR_THRESH</code></TD>
<TD ALIGN="LEFT"><code>real(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68>Any&nbsp;real&nbsp;num. <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68>Any&nbsp;real&nbsp;num. <IMG
WIDTH="56" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
SRC="img93.png"
ALT="$\in [0, 1]$"></SPAN></TD>
ALT="$\in [0, 1]$"></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68>0.05</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>Threshold <IMG
WIDTH="13" HEIGHT="16" ALIGN="BOTTOM" BORDER="0"
SRC="img94.png"
ALT="$\theta$"></SPAN> in the aggregation algorithm.</TD>
ALT="$\theta$"> in the aggregation algorithm.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142><code>mld_aggr_scale_</code> <BR><code>AGGR_SCALE</code></TD>
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
@ -435,55 +444,55 @@ Parameters defining the aggregation algorithm.
<TD ALIGN="LEFT"><code>character(len=*)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'EIG_EST'</TT> <TT>'USER_CHOICE'</TT></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><TT>'EIG_EST'</TT></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>How the damping parameter <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>How the damping parameter <IMG
WIDTH="16" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img86.png"
ALT="$\omega$"></SPAN> in the
ALT="$\omega$"> in the
smoothed aggregation should be computed:
either via an estimate of the spectral radius of
<SPAN CLASS="MATH"><IMG
<IMG
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img87.png"
ALT="$D^{-1}A$"></SPAN>, or explicily
ALT="$D^{-1}A$">, or explicily
specified by the user.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142><code>mld_aggr_eig_</code> <BR><code>AGGR_EIG</code></TD>
<TD ALIGN="LEFT"><code>character(len=*)</code></TD>
<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=170>How to estimate the spectral radius of <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>How to estimate the spectral radius of <IMG
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img87.png"
ALT="$D^{-1}A$"></SPAN>.
ALT="$D^{-1}A$">.
Currently only the infinity norm estimate
is available.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142><code>mld_aggr_omega_val_</code> <BR><code>AGGR_OMEGA_VAL</code></TD>
<TD ALIGN="LEFT"><code>real(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>)</code></TD>
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68>Any&nbsp;nonnegative&nbsp;real&nbsp;num.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=68><!-- MATH
$4/(3\rho(D^{-1}A))$
-->
<SPAN CLASS="MATH"><IMG
<IMG
WIDTH="113" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img97.png"
ALT="$4/(3\rho(D^{-1}A))$"></SPAN></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>Damping parameter <SPAN CLASS="MATH"><IMG
ALT="$4/(3\rho(D^{-1}A))$"></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=170>Damping parameter <IMG
WIDTH="16" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img86.png"
ALT="$\omega$"></SPAN> in the smoothed aggregation algorithm.
ALT="$\omega$"> in the smoothed aggregation algorithm.
It must be set by the user if
<code>USER_CHOICE</code> was specified for
<code>mld_aggr_omega_alg_</code>,
otherwise it is computed by the library, using the
selected estimate of the spectral radius <SPAN CLASS="MATH"><IMG
selected estimate of the spectral radius <IMG
WIDTH="73" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img98.png"
ALT="$\rho(D^{-1}A)$"></SPAN> of
<SPAN CLASS="MATH"><IMG
ALT="$\rho(D^{-1}A)$"> of
<IMG
WIDTH="50" HEIGHT="21" ALIGN="BOTTOM" BORDER="0"
SRC="img87.png"
ALT="$D^{-1}A$"></SPAN>.</TD>
ALT="$D^{-1}A$">.</TD>
</TR>
</TABLE>
</DIV>
@ -494,7 +503,7 @@ Parameters defining the aggregation algorithm.
<P>
<BR><P></P>
<DIV ALIGN="CENTER"><A NAME="1278"></A>
<DIV ALIGN="CENTER"><A NAME="1309"></A>
<TABLE>
<CAPTION><STRONG>Table 5:</STRONG>
Parameters defining the coarse-space correction at the coarsest
@ -535,63 +544,63 @@ level.</CAPTION>
<TD ALIGN="LEFT">See note</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Solver for the diagonal blocks of the coarse matrix,
in case the block Jacobi solver
is chosen as coarsest-level solver: ILU(<SPAN CLASS="MATH"><IMG
is chosen as coarsest-level solver: ILU(<IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img35.png"
ALT="$p$"></SPAN>), MILU(<SPAN CLASS="MATH"><IMG
ALT="$p$">), MILU(<IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img35.png"
ALT="$p$"></SPAN>),
ILU(<SPAN CLASS="MATH"><IMG
ALT="$p$">),
ILU(<IMG
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img36.png"
ALT="$p,t$"></SPAN>), LU from UMFPACK,
ALT="$p,t$">), LU from UMFPACK,
LU from SuperLU, plus triangular solve.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_coarse_sweeps_</code> <BR><code>COARSE_SWEEPS</code></TD>
<TD ALIGN="LEFT"><code>integer</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<SPAN CLASS="MATH"><IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<IMG
WIDTH="31" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img99.png"
ALT="$&gt; 0$"></SPAN></TD>
ALT="$&gt; 0$"></TD>
<TD ALIGN="LEFT">4</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Number of Block-Jacobi sweeps when 'BJAC' is used as
coarsest-level solver.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_coarse_fillin_</code> <BR><code>COARSE_FILLIN</code></TD>
<TD ALIGN="LEFT"><code>integer</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;int.&nbsp;num.&nbsp;<IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img90.png"
ALT="$\ge 0$"></SPAN></TD>
ALT="$\ge 0$"></TD>
<TD ALIGN="LEFT">0</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Fill-in level <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Fill-in level <IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img35.png"
ALT="$p$"></SPAN> of the incomplete LU factorizations.</TD>
ALT="$p$"> of the incomplete LU factorizations.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=99><code>mld_coarse_iluthrs_</code> <BR><code>COARSE_ILUTHRS</code></TD>
<TD ALIGN="LEFT"><code>real(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;real.&nbsp;num.&nbsp;<SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT"><code>real(</code><I>kind_parameter</I><code>)</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=91>Any&nbsp;real.&nbsp;num.&nbsp;<IMG
WIDTH="32" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img90.png"
ALT="$\ge 0$"></SPAN></TD>
ALT="$\ge 0$"></TD>
<TD ALIGN="LEFT">0</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Drop tolerance <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=142>Drop tolerance <IMG
WIDTH="11" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img91.png"
ALT="$t$"></SPAN> in the ILU(<SPAN CLASS="MATH"><IMG
ALT="$t$"> in the ILU(<IMG
WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img36.png"
ALT="$p,t$"></SPAN>) factorization.</TD>
ALT="$p,t$">) factorization.</TD>
</TR>
<TR><TD ALIGN="LEFT" COLSPAN=5><SPAN><B>Note:</B> defaults for
<TT>m</TT>ld_coarse_subsolve_ are chosen as </SPAN></TD>
<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><SPAN>single precision version: 'SLU' if installed, 'ILU' otherwise</SPAN></TD>
<TR><TD ALIGN="LEFT" COLSPAN=5>single precision version: 'SLU' if installed, 'ILU' otherwise</TD>
</TR>
<TR><TD ALIGN="LEFT" COLSPAN=5><SPAN>double precision version: 'UMF' if installed,
else 'SLU' if installed, 'ILU' otherwise</SPAN></TD>
<TR><TD ALIGN="LEFT" COLSPAN=5>double precision version: 'UMF' if installed,
else 'SLU' if installed, 'ILU' otherwise</TD>
</TR>
</TABLE>
</DIV>
@ -603,30 +612,29 @@ level.</CAPTION>
<P>
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html284"
<A NAME="tex2html285"
HREF="node19.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html280"
<A NAME="tex2html281"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html274"
<A NAME="tex2html275"
HREF="node17.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html282"
<A NAME="tex2html283"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html285"
<B> Next:</B> <A NAME="tex2html286"
HREF="node19.html">Subroutine mld_precbld</A>
<B> Up:</B> <A NAME="tex2html281"
<B> Up:</B> <A NAME="tex2html282"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html275"
<B> Previous:</B> <A NAME="tex2html276"
HREF="node17.html">Subroutine mld_precinit</A>
&nbsp; <B> <A NAME="tex2html283"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html284"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html296"
<!--Navigation Panel-->
<A NAME="tex2html297"
HREF="node20.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html292"
<A NAME="tex2html293"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html286"
<A NAME="tex2html287"
HREF="node18.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html294"
<A NAME="tex2html295"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html297"
<B> Next:</B> <A NAME="tex2html298"
HREF="node20.html">Subroutine mld_precaply</A>
<B> Up:</B> <A NAME="tex2html293"
<B> Up:</B> <A NAME="tex2html294"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html287"
<B> Previous:</B> <A NAME="tex2html288"
HREF="node18.html">Subroutine mld_precset</A>
&nbsp; <B> <A NAME="tex2html295"
&nbsp; <B> <A NAME="tex2html296"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00083000000000000000"></A><A NAME="sec:precbld"></A>
@ -68,20 +67,20 @@ This routine builds the preconditioner according to the requirements made by
the user through the routines <code>mld_precinit</code> and <code>mld_precset</code>.
<P>
<BIG CLASS="LARGE"><B>Arguments</B></BIG>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_</code><SPAN CLASS="textit">x</SPAN><code>spmat_type), intent(in)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_</code><I>x</I><code>spmat_type), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that <SPAN CLASS="textit">x</SPAN> must be chosen according
matrix to be preconditioned. Note that <I>x</I> must be chosen according
to the real/complex,
single/double precision version of MLD2P4 under use.
See the PSBLAS User's Guide for details [<A
HREF="node25.html#PSBLASGUIDE">15</A>].</TD>
HREF="node25.html#PSBLASGUIDE">16</A>].</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>desc_a</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(psb_desc_type), intent(in)</code>.</TD>
@ -89,13 +88,13 @@ single/double precision version of MLD2P4 under use.
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The communication descriptor of <code>a</code>. See the PSBLAS User's Guide for
details [<A
HREF="node25.html#PSBLASGUIDE">15</A>].</TD>
HREF="node25.html#PSBLASGUIDE">16</A>].</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>p</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type), intent(inout)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><I>x</I><code>prec_type), intent(inout)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <SPAN CLASS="textit">x</SPAN> must be chosen according
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <I>x</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>
@ -108,29 +107,29 @@ single/double precision version of MLD2P4 under use.
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html296"
<A NAME="tex2html297"
HREF="node20.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html292"
<A NAME="tex2html293"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html286"
<A NAME="tex2html287"
HREF="node18.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html294"
<A NAME="tex2html295"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html297"
<B> Next:</B> <A NAME="tex2html298"
HREF="node20.html">Subroutine mld_precaply</A>
<B> Up:</B> <A NAME="tex2html293"
<B> Up:</B> <A NAME="tex2html294"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html287"
<B> Previous:</B> <A NAME="tex2html288"
HREF="node18.html">Subroutine mld_precset</A>
&nbsp; <B> <A NAME="tex2html295"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html296"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,26 +25,25 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html61"
<!--Navigation Panel-->
<A NAME="tex2html62"
HREF="node3.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html59"
<A NAME="tex2html60"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html53"
<A NAME="tex2html54"
HREF="node1.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html62"
<B> Next:</B> <A NAME="tex2html63"
HREF="node3.html">General Overview</A>
<B> Up:</B> <A NAME="tex2html60"
<B> Up:</B> <A NAME="tex2html61"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html54"
<B> Previous:</B> <A NAME="tex2html55"
HREF="node1.html">Abstract</A>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<BR>
@ -53,64 +52,64 @@ Contents</A>
</H2>
<!--Table of Contents-->
<UL CLASS="TofC">
<LI><A NAME="tex2html63"
HREF="node3.html">General Overview</A>
<UL>
<LI><A NAME="tex2html64"
HREF="node4.html">Code Distribution</A>
HREF="node3.html">General Overview</A>
<LI><A NAME="tex2html65"
HREF="node4.html">Code Distribution</A>
<LI><A NAME="tex2html66"
HREF="node5.html">Configuring and Building MLD2P4</A>
<UL>
<LI><A NAME="tex2html66"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html67"
HREF="node7.html">Optional third party libraries</A>
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html68"
HREF="node8.html">Configuration options</A>
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html69"
HREF="node9.html">Bug reporting</A>
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html70"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html71"
HREF="node10.html">Example and test programs</A>
</UL>
<BR>
<LI><A NAME="tex2html71"
<LI><A NAME="tex2html72"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<UL>
<LI><A NAME="tex2html72"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html73"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html74"
HREF="node13.html">Smoothed Aggregation</A>
</UL>
<BR>
<LI><A NAME="tex2html74"
<LI><A NAME="tex2html75"
HREF="node14.html">Getting Started</A>
<UL>
<LI><A NAME="tex2html75"
<LI><A NAME="tex2html76"
HREF="node15.html">Examples</A>
</UL>
<BR>
<LI><A NAME="tex2html76"
<LI><A NAME="tex2html77"
HREF="node16.html">User Interface</A>
<UL>
<LI><A NAME="tex2html77"
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html78"
HREF="node18.html">Subroutine mld_precset</A>
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html79"
HREF="node19.html">Subroutine mld_precbld</A>
HREF="node18.html">Subroutine mld_precset</A>
<LI><A NAME="tex2html80"
HREF="node20.html">Subroutine mld_precaply</A>
HREF="node19.html">Subroutine mld_precbld</A>
<LI><A NAME="tex2html81"
HREF="node21.html">Subroutine mld_precfree</A>
HREF="node20.html">Subroutine mld_precaply</A>
<LI><A NAME="tex2html82"
HREF="node21.html">Subroutine mld_precfree</A>
<LI><A NAME="tex2html83"
HREF="node22.html">Subroutine mld_precdescr</A>
</UL>
<BR>
<LI><A NAME="tex2html83"
HREF="node23.html">Error Handling</A>
<LI><A NAME="tex2html84"
HREF="node24.html">License</A>
HREF="node23.html">Error Handling</A>
<LI><A NAME="tex2html85"
HREF="node24.html">License</A>
<LI><A NAME="tex2html86"
HREF="node25.html">Bibliography</A>
</UL>
<!--End of Table of Contents-->

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html308"
<!--Navigation Panel-->
<A NAME="tex2html309"
HREF="node21.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html304"
<A NAME="tex2html305"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html298"
<A NAME="tex2html299"
HREF="node19.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html306"
<A NAME="tex2html307"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html309"
<B> Next:</B> <A NAME="tex2html310"
HREF="node21.html">Subroutine mld_precfree</A>
<B> Up:</B> <A NAME="tex2html305"
<B> Up:</B> <A NAME="tex2html306"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html299"
<B> Previous:</B> <A NAME="tex2html300"
HREF="node19.html">Subroutine mld_precbld</A>
&nbsp; <B> <A NAME="tex2html307"
&nbsp; <B> <A NAME="tex2html308"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00084000000000000000"></A><A NAME="sec:precaply"></A>
@ -68,17 +67,17 @@ Subroutine mld_precaply
This routine computes <!-- MATH
$y = op(M^{-1})\, x$
-->
<SPAN CLASS="MATH"><IMG
WIDTH="117" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
<IMG
WIDTH="118" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img100.png"
ALT="$y = op(M^{-1}) x$"></SPAN>, where <SPAN CLASS="MATH"><IMG
ALT="$y = op(M^{-1})\, x$">, where <IMG
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img60.png"
ALT="$M$"></SPAN> is a previously built
preconditioner, stored into <code>p</code>, and <SPAN CLASS="MATH"><IMG
WIDTH="22" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
ALT="$M$"> is a previously built
preconditioner, stored into <code>p</code>, and <IMG
WIDTH="21" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img101.png"
ALT="$op$"></SPAN>
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,
@ -86,41 +85,41 @@ Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,
and hence it is completely transparent to the user.
<P>
<BIG CLASS="LARGE"><B>Arguments</B></BIG>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>p</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type), intent(inout)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><I>x</I><code>prec_type), intent(inout)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure, containing the local part of <SPAN CLASS="MATH"><IMG
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure, containing the local part of <IMG
WIDTH="23" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img60.png"
ALT="$M$"></SPAN>.
Note that <SPAN CLASS="textit">x</SPAN> must be chosen according
ALT="$M$">.
Note that <I>x</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>x</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><SPAN CLASS="textit">type</SPAN><code>(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>), dimension(:), intent(in)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <SPAN CLASS="MATH"><IMG
WIDTH="14" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
WIDTH="15" HEIGHT="18" ALIGN="BOTTOM" BORDER="0"
SRC="img102.png"
ALT="$x$"></SPAN>. Note that <SPAN CLASS="textit">type</SPAN> and
<SPAN CLASS="textit">kind_parameter</SPAN> must be chosen according
ALT="$x$">. Note that <I>type</I> and
<I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>y</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><SPAN CLASS="textit">type</SPAN><code>(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>), dimension(:), intent(out)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), intent(out)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <SPAN CLASS="MATH"><IMG
WIDTH="14" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The local part of the vector <IMG
WIDTH="13" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
SRC="img103.png"
ALT="$y$"></SPAN>. Note that <SPAN CLASS="textit">type</SPAN> and
<SPAN CLASS="textit">kind_parameter</SPAN> must be chosen according
ALT="$y$">. Note that <I>type</I> and
<I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>desc_a</code></TD>
@ -143,39 +142,39 @@ and hence it is completely transparent to the user.
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>If <code>trans</code> = <code>'N','n'</code> then <!-- MATH
$op(M^{-1}) = M^{-1}$
-->
<SPAN CLASS="MATH"><IMG
<IMG
WIDTH="132" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img104.png"
ALT="$op(M^{-1}) = M^{-1}$"></SPAN>;
ALT="$op(M^{-1}) = M^{-1}$">;
if <code>trans</code> = <code>'T','t'</code> then <!-- MATH
$op(M^{-1}) = M^{-T}$
-->
<SPAN CLASS="MATH"><IMG
<IMG
WIDTH="135" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img105.png"
ALT="$op(M^{-1}) = M^{-T}$"></SPAN>
(transpose of <SPAN CLASS="MATH"><IMG
ALT="$op(M^{-1}) = M^{-T}$">
(transpose of <IMG
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img106.png"
ALT="$M^{-1})$"></SPAN>; if <code>trans</code> = <code>'C','c'</code> then <!-- MATH
ALT="$M^{-1})$">; if <code>trans</code> = <code>'C','c'</code> then <!-- MATH
$op(M^{-1}) = M^{-C}$
-->
<SPAN CLASS="MATH"><IMG
<IMG
WIDTH="136" HEIGHT="40" ALIGN="MIDDLE" BORDER="0"
SRC="img107.png"
ALT="$op(M^{-1}) = M^{-C}$"></SPAN>
(conjugate transpose of <SPAN CLASS="MATH"><IMG
ALT="$op(M^{-1}) = M^{-C}$">
(conjugate transpose of <IMG
WIDTH="48" HEIGHT="39" ALIGN="MIDDLE" BORDER="0"
SRC="img106.png"
ALT="$M^{-1})$"></SPAN>.</TD>
ALT="$M^{-1})$">.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>work</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><SPAN CLASS="textit">type</SPAN><code>(</code><SPAN CLASS="textit">kind_parameter</SPAN><code>), dimension(:), optional, target</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><I>type</I><code>(</code><I>kind_parameter</I><code>), dimension(:), optional, target</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>Workspace. Its size should be at
least <code>4 * psb_cd_get_local_</code> <code>cols(desc_a)</code> (see the PSBLAS User's Guide).
Note that <SPAN CLASS="textit">type</SPAN> and <SPAN CLASS="textit">kind_parameter</SPAN> must be chosen according
Note that <I>type</I> and <I>kind_parameter</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
</TABLE>
@ -183,30 +182,29 @@ and hence it is completely transparent to the user.
<P>
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html308"
<A NAME="tex2html309"
HREF="node21.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html304"
<A NAME="tex2html305"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html298"
<A NAME="tex2html299"
HREF="node19.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html306"
<A NAME="tex2html307"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html309"
<B> Next:</B> <A NAME="tex2html310"
HREF="node21.html">Subroutine mld_precfree</A>
<B> Up:</B> <A NAME="tex2html305"
<B> Up:</B> <A NAME="tex2html306"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html299"
<B> Previous:</B> <A NAME="tex2html300"
HREF="node19.html">Subroutine mld_precbld</A>
&nbsp; <B> <A NAME="tex2html307"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html308"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html320"
<!--Navigation Panel-->
<A NAME="tex2html321"
HREF="node22.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html316"
<A NAME="tex2html317"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html310"
<A NAME="tex2html311"
HREF="node20.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html318"
<A NAME="tex2html319"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html321"
<B> Next:</B> <A NAME="tex2html322"
HREF="node22.html">Subroutine mld_precdescr</A>
<B> Up:</B> <A NAME="tex2html317"
<B> Up:</B> <A NAME="tex2html318"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html311"
<B> Previous:</B> <A NAME="tex2html312"
HREF="node20.html">Subroutine mld_precaply</A>
&nbsp; <B> <A NAME="tex2html319"
&nbsp; <B> <A NAME="tex2html320"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00085000000000000000"></A><A NAME="sec:precfree"></A>
@ -67,15 +66,15 @@ Subroutine mld_precfree
This routine deallocates the preconditioner data structure.
<P>
<BIG CLASS="LARGE"><B>Arguments</B></BIG>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>p</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298><code>type(mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type), intent(inout)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298><code>type(mld_</code><I>x</I><code>prec_type), intent(inout)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298>The preconditioner data structure. Note that <SPAN CLASS="textit">x</SPAN> must be chosen according
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=298>The preconditioner data structure. Note that <I>x</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -24,31 +24,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html330"
<!--Navigation Panel-->
<A NAME="tex2html331"
HREF="node23.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html326"
<A NAME="tex2html327"
HREF="node16.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html322"
<A NAME="tex2html323"
HREF="node21.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html328"
<A NAME="tex2html329"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html331"
<B> Next:</B> <A NAME="tex2html332"
HREF="node23.html">Error Handling</A>
<B> Up:</B> <A NAME="tex2html327"
<B> Up:</B> <A NAME="tex2html328"
HREF="node16.html">User Interface</A>
<B> Previous:</B> <A NAME="tex2html323"
<B> Previous:</B> <A NAME="tex2html324"
HREF="node21.html">Subroutine mld_precfree</A>
&nbsp; <B> <A NAME="tex2html329"
&nbsp; <B> <A NAME="tex2html330"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00086000000000000000"></A><A NAME="sec:precdescr"></A>
@ -68,15 +67,15 @@ This routine prints a description of the preconditioner to the standard output o
to a file. It must be called after <code>mld_precbld</code> has been called.
<P>
<BIG CLASS="LARGE"><B>Arguments</B></BIG>
<FONT SIZE="+1"><B>Arguments</B></FONT>
<P>
<TABLE CELLPADDING=3>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>p</code></TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><SPAN CLASS="textit">x</SPAN><code>prec_type), intent(in)</code>.</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340><code>type(mld_</code><I>x</I><code>prec_type), intent(in)</code>.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34>&nbsp;</TD>
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <SPAN CLASS="textit">x</SPAN> must be chosen according
<TD ALIGN="LEFT" VALIGN="TOP" WIDTH=340>The preconditioner data structure. Note that <I>x</I> must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.</TD>
</TR>
<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=34><code>info</code></TD>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html342"
<!--Navigation Panel-->
<A NAME="tex2html343"
HREF="node24.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html338"
<A NAME="tex2html339"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html332"
<A NAME="tex2html333"
HREF="node22.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html340"
<A NAME="tex2html341"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html343"
<B> Next:</B> <A NAME="tex2html344"
HREF="node24.html">License</A>
<B> Up:</B> <A NAME="tex2html339"
<B> Up:</B> <A NAME="tex2html340"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html333"
<B> Previous:</B> <A NAME="tex2html334"
HREF="node22.html">Subroutine mld_precdescr</A>
&nbsp; <B> <A NAME="tex2html341"
&nbsp; <B> <A NAME="tex2html342"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00090000000000000000"></A><A NAME="sec:errors"></A>
@ -69,7 +68,7 @@ will then take action, and whether
an error message should be printed. These options may be set by using
the PSBLAS error handling routines; for further details see the PSBLAS
User's Guide [<A
HREF="node25.html#PSBLASGUIDE">15</A>].
HREF="node25.html#PSBLASGUIDE">16</A>].
<P>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html354"
<!--Navigation Panel-->
<A NAME="tex2html355"
HREF="node25.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html350"
<A NAME="tex2html351"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html344"
<A NAME="tex2html345"
HREF="node23.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html352"
<A NAME="tex2html353"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html355"
<B> Next:</B> <A NAME="tex2html356"
HREF="node25.html">Bibliography</A>
<B> Up:</B> <A NAME="tex2html351"
<B> Up:</B> <A NAME="tex2html352"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html345"
<B> Previous:</B> <A NAME="tex2html346"
HREF="node23.html">Error Handling</A>
&nbsp; <B> <A NAME="tex2html353"
&nbsp; <B> <A NAME="tex2html354"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION000100000000000000000"></A><A NAME="sec:license"></A>

@ -26,26 +26,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html366"
<A NAME="tex2html367"
HREF="node26.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html362"
<A NAME="tex2html363"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html356"
<A NAME="tex2html357"
HREF="node24.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html364"
<A NAME="tex2html365"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html367"
<B> Next:</B> <A NAME="tex2html368"
HREF="node26.html">About this document ...</A>
<B> Up:</B> <A NAME="tex2html363"
<B> Up:</B> <A NAME="tex2html364"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html357"
<B> Previous:</B> <A NAME="tex2html358"
HREF="node24.html">License</A>
&nbsp; <B> <A NAME="tex2html365"
&nbsp; <B> <A NAME="tex2html366"
HREF="node2.html">Contents</A></B>
<BR><BR>
<!--End of Navigation Panel-->
@ -102,35 +102,44 @@ T.A.&nbsp;Davis,
<EM>Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
Method with a Column Pre-ordering Strategy</EM>,
ACM Transactions on Mathematical Software, 30, 2004, 196-199.
(See also <TT>http://www.cise.ufl.edu/&nbsp;davis/</TT>)<P></P><DT><A NAME="SUPERLU">10</A>
(See also <TT>http://www.cise.ufl.edu/&nbsp;davis/</TT>)
<P>
<P></P><DT><A NAME="MUMPS">10</A>
<DD>
P.R.&nbsp;Amestoy, C.&nbsp;Ashcraft, O.&nbsp;Boiteau, A.&nbsp;Buttari, J.&nbsp;L'Excellent, C.&nbsp;Weisbecker
<EM>Improving multifrontal methods by means of block low-rank representations</EM>,
SIAM SISC, volume 37, number 3, pages A1452-A1474.
(See also <TT>http://mumps.enseeiht.fr</TT>)
<P>
<P></P><DT><A NAME="SUPERLU">11</A>
<DD>
J.W.&nbsp;Demmel, S.C.&nbsp;Eisenstat, J.R.&nbsp;Gilbert, X.S.&nbsp;Li and J.W.H.&nbsp;Liu,
A supernodal approach to sparse partial pivoting,
SIAM Journal on Matrix Analysis and Applications, 20, 3, 1999, 720-755.<P></P><DT><A NAME="blas3">11</A>
SIAM Journal on Matrix Analysis and Applications, 20, 3, 1999, 720-755.<P></P><DT><A NAME="blas3">12</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra, J.&nbsp;Du Croz, I.&nbsp;S.&nbsp;Duff, S.&nbsp;Hammarling,
<I>A set of Level 3 Basic Linear Algebra Subprograms</I>,
ACM Transactions on Mathematical Software, 16, 1990, 1-17.<P></P><DT><A NAME="blas2">12</A>
ACM Transactions on Mathematical Software, 16, 1990, 1-17.<P></P><DT><A NAME="blas2">13</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra, J.&nbsp;Du Croz, S.&nbsp;Hammarling, R.&nbsp;J.&nbsp;Hanson,
<I>An extended set of FORTRAN Basic Linear Algebra Subprograms</I>,
ACM Transactions on Mathematical Software, 14, 1988, 1-17.<P></P><DT><A NAME="BLACS">13</A>
ACM Transactions on Mathematical Software, 14, 1988, 1-17.<P></P><DT><A NAME="BLACS">14</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra and R.&nbsp;C.&nbsp;Whaley,
<EM>A User's Guide to the BLACS v.&nbsp;1.1</EM>,
Lapack Working Note 94, Tech. Rep. UT-CS-95-281, University of
Tennessee, March 1995 (updated May 1997).<P></P><DT><A NAME="EFSTATHIOU">14</A>
Tennessee, March 1995 (updated May 1997).<P></P><DT><A NAME="EFSTATHIOU">15</A>
<DD>
E.&nbsp;Efstathiou, J.&nbsp;G.&nbsp;Gander,
<EM>Why Restricted Additive Schwarz Converges Faster than Additive Schwarz</EM>,
BIT Numerical Mathematics, 43, 2003, 945-959.<P></P><DT><A NAME="PSBLASGUIDE">15</A>
BIT Numerical Mathematics, 43, 2003, 945-959.<P></P><DT><A NAME="PSBLASGUIDE">16</A>
<DD>
S.&nbsp;Filippone, A.&nbsp;Buttari,
<EM>PSBLAS-3.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library</EM>, 2012,
available from <TT>http://www.ce.uniroma2.it/psblas/</TT>.
<P>
<P></P><DT><A NAME="PSBLAS3">16</A>
<P></P><DT><A NAME="PSBLAS3">17</A>
<DD>
Salvatore Filippone and Alfredo Buttari.
<EM>Object-Oriented Techniques for Sparse Matrix Computations in Fortran
@ -138,49 +147,49 @@ Salvatore Filippone and Alfredo Buttari.
ACM Trans. on Math Software, 38(4), 2012.
<P>
<P></P><DT><A NAME="psblas_00">17</A>
<P></P><DT><A NAME="psblas_00">18</A>
<DD>
S.&nbsp;Filippone, M.&nbsp;Colajanni,
<EM>PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices</EM>,
ACM Transactions on Mathematical Software, 26, 4, 2000, 527-550.<P></P><DT><A NAME="MPI2">18</A>
ACM Transactions on Mathematical Software, 26, 4, 2000, 527-550.<P></P><DT><A NAME="MPI2">19</A>
<DD>
W.&nbsp;Gropp, S.&nbsp;Huss-Lederman, A.&nbsp;Lumsdaine, E.&nbsp;Lusk, B.&nbsp;Nitzberg, W.&nbsp;Saphir, M.&nbsp;Snir,
<EM>MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions</EM>,
MIT Press, 1998.<P></P><DT><A NAME="blas1">19</A>
MIT Press, 1998.<P></P><DT><A NAME="blas1">20</A>
<DD>
C.&nbsp;L.&nbsp;Lawson, R.&nbsp;J.&nbsp;Hanson, D.&nbsp;Kincaid, F.&nbsp;T.&nbsp;Krogh,
<I>Basic Linear Algebra Subprograms for FORTRAN usage</I>,
ACM Transactions on Mathematical Software, 5, 1979, 308-323.<P></P><DT><A NAME="SUPERLUDIST">20</A>
ACM Transactions on Mathematical Software, 5, 1979, 308-323.<P></P><DT><A NAME="SUPERLUDIST">21</A>
<DD>
X.&nbsp;S.&nbsp;Li, J.&nbsp;W.&nbsp;Demmel, <EM>SuperLU_DIST: A Scalable Distributed-memory
Sparse Direct Solver for Unsymmetric Linear Systems</EM>,
ACM Transactions on Mathematical Software, 29, 2, 2003, 110-140.<P></P><DT><A NAME="Saad_book">21</A>
ACM Transactions on Mathematical Software, 29, 2, 2003, 110-140.<P></P><DT><A NAME="Saad_book">22</A>
<DD>
Y.&nbsp;Saad,
<I>Iterative methods for sparse linear systems</I>, 2nd edition,
SIAM, 2003
<P>
<P></P><DT><A NAME="dd2_96">22</A>
<P></P><DT><A NAME="dd2_96">23</A>
<DD>
B.&nbsp;Smith, P.&nbsp;Bjorstad, W.&nbsp;Gropp,
<EM>Domain Decomposition: Parallel Multilevel Methods for Elliptic
Partial Differential Equations</EM>,
Cambridge University Press, 1996.<P></P><DT><A NAME="MPI1">23</A>
Cambridge University Press, 1996.<P></P><DT><A NAME="MPI1">24</A>
<DD>
M.&nbsp;Snir, S.&nbsp;Otto, S.&nbsp;Huss-Lederman, D.&nbsp;Walker, J.&nbsp;Dongarra,
<EM>MPI: The Complete Reference. Volume 1 - The MPI Core</EM>, second edition,
MIT Press, 1998.<P></P><DT><A NAME="StubenGMD69_99">24</A>
MIT Press, 1998.<P></P><DT><A NAME="StubenGMD69_99">25</A>
<DD>
K.&nbsp;St&#252;ben,
<EM>Algebraic Multigrid (AMG): an Introduction with Applications</EM>,
in A.&nbsp;Sch&#252;ller, U.&nbsp;Trottenberg, C.&nbsp;Oosterlee, editors, Multigrid,
Academic Press, 2000.<P></P><DT><A NAME="TUMINARO_TONG">25</A>
Academic Press, 2000.<P></P><DT><A NAME="TUMINARO_TONG">26</A>
<DD>
R.&nbsp;S.&nbsp;Tuminaro, C.&nbsp;Tong,
<EM>Parallel Smoothed Aggregation Multigrid: Aggregation Strategies on Massively Parallel Machines</EM>,
in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.<P></P><DT><A NAME="VANEK_MANDEL_BREZINA">26</A>
in J. Donnelley, editor, Proceedings of SuperComputing 2000, Dallas, 2000.<P></P><DT><A NAME="VANEK_MANDEL_BREZINA">27</A>
<DD>
P.&nbsp;Vanek, J.&nbsp;Mandel and M.&nbsp;Brezina,
<EM>Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems</EM>,

@ -25,21 +25,21 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<BODY >
<!--Navigation Panel-->
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png">
<A NAME="tex2html372"
<A NAME="tex2html373"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html368"
<A NAME="tex2html369"
HREF="node25.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html374"
<A NAME="tex2html375"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Up:</B> <A NAME="tex2html373"
<B> Up:</B> <A NAME="tex2html374"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html369"
<B> Previous:</B> <A NAME="tex2html370"
HREF="node25.html">Bibliography</A>
&nbsp; <B> <A NAME="tex2html375"
&nbsp; <B> <A NAME="tex2html376"
HREF="node2.html">Contents</A></B>
<BR>
<BR>
@ -63,7 +63,7 @@ Mathematics Department, Macquarie University, Sydney.
The command line arguments were: <BR>
<STRONG>latex2html</STRONG> <TT>-local_icons -noaddress -dir ../../html userhtml.tex</TT>
<P>
The translation was initiated by Salvatore Filippone on 2016-02-29
The translation was initiated by Salvatore Filippone on 2016-05-09
<BR><HR>
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html96"
<!--Navigation Panel-->
<A NAME="tex2html97"
HREF="node4.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html92"
<A NAME="tex2html93"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html86"
<A NAME="tex2html87"
HREF="node2.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html94"
<A NAME="tex2html95"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html97"
<B> Next:</B> <A NAME="tex2html98"
HREF="node4.html">Code Distribution</A>
<B> Up:</B> <A NAME="tex2html93"
<B> Up:</B> <A NAME="tex2html94"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html87"
<B> Previous:</B> <A NAME="tex2html88"
HREF="node2.html">Contents</A>
&nbsp; <B> <A NAME="tex2html95"
&nbsp; <B> <A NAME="tex2html96"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00030000000000000000"></A><A NAME="sec:overview"></A>
@ -59,18 +58,17 @@ General Overview
<P>
The M<SMALL>ULTI-</SMALL>L<SMALL>EVEL </SMALL>D<SMALL>OMAIN </SMALL>D<SMALL>ECOMPOSITION </SMALL>P<SMALL>ARALLEL </SMALL>P<SMALL>RECONDITIONERS </SMALL>P<SMALL>ACKAGE BASED ON
</SMALL>PSBLAS (MLD2P4) provides <SPAN CLASS="textit">multi-level Schwarz preconditioners</SPAN>&nbsp;[<A
HREF="node25.html#dd2_96">22</A>],
</SMALL>PSBLAS (MLD2P4) provides <I>multi-level Schwarz preconditioners</I>&nbsp;[<A
HREF="node25.html#dd2_96">23</A>],
to be used in the iterative solutions of sparse linear systems:
<BR>
<DIV ALIGN="RIGHT" CLASS="mathdisplay">
<DIV ALIGN="RIGHT">
<!-- MATH
\begin{equation}
Ax=b,
\end{equation}
-->
<A NAME="system1"></A>
<TABLE WIDTH="100%" ALIGN="CENTER">
<TR VALIGN="MIDDLE"><TD ALIGN="CENTER" NOWRAP><A NAME="system1"></A><IMG
WIDTH="58" HEIGHT="30" BORDER="0"
@ -78,35 +76,35 @@ Ax=b,
ALT="\begin{displaymath}
Ax=b,
\end{displaymath}"></TD>
<TD CLASS="eqno" WIDTH=10 ALIGN="RIGHT">
(<SPAN CLASS="arabic">1</SPAN>)</TD></TR>
<TD WIDTH=10 ALIGN="RIGHT">
(1)</TD></TR>
</TABLE>
<BR CLEAR="ALL"></DIV><P></P>
where <SPAN CLASS="MATH"><IMG
where <IMG
WIDTH="18" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
SRC="img2.png"
ALT="$A$"></SPAN> is a square, real or complex, sparse matrix with a symmetric
ALT="$A$"> is a square, real or complex, sparse matrix with a symmetric
sparsity pattern. These preconditioners have the following general features:
<UL>
<LI>both <SPAN CLASS="textit">additive and hybrid multilevel</SPAN> variants are implemented,
<LI>both <I>additive and hybrid multilevel</I> variants are implemented,
i.e. variants that are additive among the levels and inside each level, and variants
that are multiplicative among the levels and additive inside each level;
the basic Additive Schwarz (AS) preconditioners are obtained by considering only one level;
</LI>
<LI>a <SPAN CLASS="textit">purely algebraic</SPAN> approach is used to
<LI>a <I>purely algebraic</I> approach is used to
generate a sequence of coarse-level corrections to a basic AS preconditioner, without
explicitly using any information on the geometry of the original problem (e.g. the
discretization of a PDE). The <SPAN CLASS="textit">smoothed aggregation</SPAN> technique is applied
discretization of a PDE). The <I>smoothed aggregation</I> technique is applied
as algebraic coarsening strategy&nbsp;[<A
HREF="node25.html#BREZINA_VANEK">1</A>,<A
HREF="node25.html#VANEK_MANDEL_BREZINA">26</A>].
HREF="node25.html#VANEK_MANDEL_BREZINA">27</A>].
</LI>
</UL>
<P>
Version 2.0 of the package is written in <SPAN CLASS="textit">Fortran&nbsp;2003</SPAN>, following an
<SPAN CLASS="textit">object-oriented design</SPAN> through the exploitation of features
Version 2.0 of the package is written in <I>Fortran&nbsp;2003</I>, following an
<I>object-oriented design</I> through the exploitation of features
such as abstract data type creation, functional overloading and
dynamic memory management. The parallel implementation is based on a Single Program Multiple Data
(SPMD) paradigm for distributed-memory architectures. Single and
@ -116,10 +114,10 @@ interface.
<P>
MLD2P4 has been designed to implement scalable and easy-to-use
multilevel preconditioners in the context of the <SPAN CLASS="textit">PSBLAS
(Parallel Sparse BLAS) computational framework</SPAN>&nbsp;[<A
HREF="node25.html#psblas_00">17</A>,<A
HREF="node25.html#PSBLAS3">16</A>].
multilevel preconditioners in the context of the <I>PSBLAS
(Parallel Sparse BLAS) computational framework</I>&nbsp;[<A
HREF="node25.html#psblas_00">18</A>,<A
HREF="node25.html#PSBLAS3">17</A>].
PSBLAS is a library originally developed to address the parallel implementation of
iterative solvers for sparse linear system, by providing basic linear algebra
operators and data management facilities for distributed sparse matrices; it
@ -132,10 +130,10 @@ portability, modularity ed extensibility in the development of the preconditione
package. On the other hand, the implementation of MLD2P4 has led to some
revisions and extentions of the PSBLAS kernels, leading to the
PSBLAS 2.0 version&nbsp;[<A
HREF="node25.html#PSBLASGUIDE">15</A>]. The inter-process comunication required
HREF="node25.html#PSBLASGUIDE">16</A>]. The inter-process comunication required
by MLD2P4 is encapsulated into the PSBLAS routines, except few cases where
MPI&nbsp;[<A
HREF="node25.html#MPI1">23</A>] is explicitly called. Therefore, MLD2P4 can be run on any parallel
HREF="node25.html#MPI1">24</A>] is explicitly called. Therefore, MLD2P4 can be run on any parallel
machine where PSBLAS and MPI implementations are available.
<P>
@ -172,30 +170,29 @@ in Section&nbsp;<A HREF="node23.html#sec:errors">7</A>. The copyright terms conc
of MLD2P4 are reported in Appendix&nbsp;<A HREF="node24.html#sec:license">A</A>.
<P>
<DIV CLASS="navigation"><HR>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html96"
<A NAME="tex2html97"
HREF="node4.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html92"
<A NAME="tex2html93"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html86"
<A NAME="tex2html87"
HREF="node2.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html94"
<A NAME="tex2html95"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html97"
<B> Next:</B> <A NAME="tex2html98"
HREF="node4.html">Code Distribution</A>
<B> Up:</B> <A NAME="tex2html93"
<B> Up:</B> <A NAME="tex2html94"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html87"
<B> Previous:</B> <A NAME="tex2html88"
HREF="node2.html">Contents</A>
&nbsp; <B> <A NAME="tex2html95"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html96"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html108"
<!--Navigation Panel-->
<A NAME="tex2html109"
HREF="node5.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html104"
<A NAME="tex2html105"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html98"
<A NAME="tex2html99"
HREF="node3.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html106"
<A NAME="tex2html107"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html109"
<B> Next:</B> <A NAME="tex2html110"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Up:</B> <A NAME="tex2html105"
<B> Up:</B> <A NAME="tex2html106"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html99"
<B> Previous:</B> <A NAME="tex2html100"
HREF="node3.html">General Overview</A>
&nbsp; <B> <A NAME="tex2html107"
&nbsp; <B> <A NAME="tex2html108"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00040000000000000000"></A><A NAME="sec:distribution"></A>
@ -76,7 +75,7 @@ account when treating derived works.
The library defines a version string with the
constant
<BR><P></P>
<DIV ALIGN="CENTER" CLASS="mathdisplay">
<DIV ALIGN="CENTER">
<!-- MATH
\begin{displaymath}
\verb|mld_version_string_|

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html120"
<!--Navigation Panel-->
<A NAME="tex2html121"
HREF="node6.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html116"
<A NAME="tex2html117"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html110"
<A NAME="tex2html111"
HREF="node4.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html118"
<A NAME="tex2html119"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html121"
<B> Next:</B> <A NAME="tex2html122"
HREF="node6.html">Prerequisites</A>
<B> Up:</B> <A NAME="tex2html117"
<B> Up:</B> <A NAME="tex2html118"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html111"
<B> Previous:</B> <A NAME="tex2html112"
HREF="node4.html">Code Distribution</A>
&nbsp; <B> <A NAME="tex2html119"
&nbsp; <B> <A NAME="tex2html120"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00050000000000000000"></A><A NAME="sec:building"></A>
@ -80,16 +79,16 @@ real and complex data, in both single and double precision.
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
<LI><A NAME="tex2html122"
HREF="node6.html">Prerequisites</A>
<UL>
<LI><A NAME="tex2html123"
HREF="node7.html">Optional third party libraries</A>
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html124"
HREF="node8.html">Configuration options</A>
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html125"
HREF="node9.html">Bug reporting</A>
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html126"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html127"
HREF="node10.html">Example and test programs</A>
</UL>
<!--End of Table of Child-Links-->

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html137"
<!--Navigation Panel-->
<A NAME="tex2html138"
HREF="node7.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html133"
<A NAME="tex2html134"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html127"
<A NAME="tex2html128"
HREF="node5.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html135"
<A NAME="tex2html136"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html138"
<B> Next:</B> <A NAME="tex2html139"
HREF="node7.html">Optional third party libraries</A>
<B> Up:</B> <A NAME="tex2html134"
<B> Up:</B> <A NAME="tex2html135"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html128"
<B> Previous:</B> <A NAME="tex2html129"
HREF="node5.html">Configuring and Building MLD2P4</A>
&nbsp; <B> <A NAME="tex2html136"
&nbsp; <B> <A NAME="tex2html137"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00051000000000000000">
@ -61,9 +60,9 @@ The following base libraries are needed:
<DL>
<DT><STRONG>BLAS</STRONG></DT>
<DD>[<A
HREF="node25.html#blas3">11</A>,<A
HREF="node25.html#blas2">12</A>,<A
HREF="node25.html#blas1">19</A>] Many vendors provide optimized versions
HREF="node25.html#blas3">12</A>,<A
HREF="node25.html#blas2">13</A>,<A
HREF="node25.html#blas1">20</A>] Many vendors provide optimized versions
of the Basic Linear Algebra Subprograms; if no vendor version is
available for a given platform, the ATLAS software
(<code>http://math-atlas.sourceforge.net/</code>)
@ -78,15 +77,15 @@ The following base libraries are needed:
</DD>
<DT><STRONG>MPI</STRONG></DT>
<DD>[<A
HREF="node25.html#MPI2">18</A>,<A
HREF="node25.html#MPI1">23</A>] A version of MPI is available on most
HREF="node25.html#MPI2">19</A>,<A
HREF="node25.html#MPI1">24</A>] A version of MPI is available on most
high-performance computing systems;
</DD>
<DT><STRONG>PSBLAS</STRONG></DT>
<DD>[<A
HREF="node25.html#PSBLASGUIDE">15</A>,<A
HREF="node25.html#psblas_00">17</A>] Parallel Sparse BLAS is
HREF="node25.html#PSBLASGUIDE">16</A>,<A
HREF="node25.html#psblas_00">18</A>] Parallel Sparse BLAS is
available from
<BR><code>http://www.ce.uniroma2.it/psblas</code>; version
3.3 (or later) is required. Indeed, all the prerequisites
@ -99,31 +98,7 @@ usually this means that they should all be built with the same
compiler as MLD2P4.
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html137"
HREF="node7.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html133"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html127"
HREF="node5.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html135"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html138"
HREF="node7.html">Optional third party libraries</A>
<B> Up:</B> <A NAME="tex2html134"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html128"
HREF="node5.html">Configuring and Building MLD2P4</A>
&nbsp; <B> <A NAME="tex2html136"
HREF="node2.html">Contents</A></B> </DIV>
<!--End of Navigation Panel-->
<BR><HR>
</BODY>
</HTML>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html149"
<!--Navigation Panel-->
<A NAME="tex2html150"
HREF="node8.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html145"
<A NAME="tex2html146"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html139"
<A NAME="tex2html140"
HREF="node6.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html147"
<A NAME="tex2html148"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html150"
<B> Next:</B> <A NAME="tex2html151"
HREF="node8.html">Configuration options</A>
<B> Up:</B> <A NAME="tex2html146"
<B> Up:</B> <A NAME="tex2html147"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html140"
<B> Previous:</B> <A NAME="tex2html141"
HREF="node6.html">Prerequisites</A>
&nbsp; <B> <A NAME="tex2html148"
&nbsp; <B> <A NAME="tex2html149"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00052000000000000000">
@ -74,7 +73,7 @@ for multilevel preconditioners may change to reflect their presence.
</DD>
<DT><STRONG>SuperLU</STRONG></DT>
<DD>[<A
HREF="node25.html#SUPERLU">10</A>]
HREF="node25.html#SUPERLU">11</A>]
A sparse direct factorization package available from
<BR> <code>http://crd.lbl.gov/~xiaoye/SuperLU/</code>; provides serial
factorization and triangular system solution for single and double precision,
@ -83,15 +82,16 @@ for multilevel preconditioners may change to reflect their presence.
</DD>
<DT><STRONG>SuperLU_Dist</STRONG></DT>
<DD>[<A
HREF="node25.html#SUPERLUDIST">20</A>]
HREF="node25.html#SUPERLUDIST">21</A>]
A sparse direct factorization package available
from the same site as SuperLU; provides parallel factorization and
triangular system solution for double precision real and complex data.
We have tested version 3.3 and 4.2.
</DD>
<DT><STRONG>MUMPS</STRONG></DT>
<DD>[]
MUMPS (“Multifrontal Massively Parallel Solver”) is a sparse, direct factorization
<DD>[<A
HREF="node25.html#MUMPS">10</A>]
MUMPS (“MUltifrontal Massively Parallel Solver”) is a sparse, direct factorization
package available from
<BR> <code>http://mumps.enseeiht.fr/</code>.
It implements a direct method based on a multifrontal approach which performs
@ -100,30 +100,29 @@ for multilevel preconditioners may change to reflect their presence.
<P>
</DD>
</DL>
<DIV CLASS="navigation"><HR>
</DL><HR>
<!--Navigation Panel-->
<A NAME="tex2html149"
<A NAME="tex2html150"
HREF="node8.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html145"
<A NAME="tex2html146"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html139"
<A NAME="tex2html140"
HREF="node6.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html147"
<A NAME="tex2html148"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html150"
<B> Next:</B> <A NAME="tex2html151"
HREF="node8.html">Configuration options</A>
<B> Up:</B> <A NAME="tex2html146"
<B> Up:</B> <A NAME="tex2html147"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html140"
<B> Previous:</B> <A NAME="tex2html141"
HREF="node6.html">Prerequisites</A>
&nbsp; <B> <A NAME="tex2html148"
HREF="node2.html">Contents</A></B> </DIV>
&nbsp; <B> <A NAME="tex2html149"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html161"
<!--Navigation Panel-->
<A NAME="tex2html162"
HREF="node9.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html157"
<A NAME="tex2html158"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html151"
<A NAME="tex2html152"
HREF="node7.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html159"
<A NAME="tex2html160"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html162"
<B> Next:</B> <A NAME="tex2html163"
HREF="node9.html">Bug reporting</A>
<B> Up:</B> <A NAME="tex2html158"
<B> Up:</B> <A NAME="tex2html159"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html152"
<B> Previous:</B> <A NAME="tex2html153"
HREF="node7.html">Optional third party libraries</A>
&nbsp; <B> <A NAME="tex2html160"
&nbsp; <B> <A NAME="tex2html161"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00053000000000000000">
@ -208,6 +207,10 @@ generated the file <code>Make.inc</code> which will then be used by all
Makefiles in the directory tree; this file will be copied in the
install directory under the name <code>Make.inc.MLD2P4</code>.
<P>
In order to use the MUMPS solver based on multifrontal factorization, the user has to add MUMPS flags, include directories and libraries in the Make.inc file.
The necessary MUMPS libraries are <code>-ldmumps, -lsmumps -lzmumps -lzmumps -mumps_common -lpord</code>. The flag <code>-DHAVE_MUMPS_</code> is mandatory too. Since MUMPS uses openmp and ScaLAPACK, <code>LINKOPT=-fonemp</code> must be added as well, along with the ScaLAPACK flags, include directories and library (which can be set using the configure script).
<P>
To build the library the user will now enter
<PRE>
@ -216,8 +219,30 @@ make
followed (optionally) by
<PRE>
make install
</PRE>
<BR><HR>
</PRE><HR>
<!--Navigation Panel-->
<A NAME="tex2html162"
HREF="node9.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html158"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html152"
HREF="node7.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html160"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html163"
HREF="node9.html">Bug reporting</A>
<B> Up:</B> <A NAME="tex2html159"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html153"
HREF="node7.html">Optional third party libraries</A>
&nbsp; <B> <A NAME="tex2html161"
HREF="node2.html">Contents</A></B>
<!--End of Navigation Panel-->
</BODY>
</HTML>

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -25,31 +25,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html173"
<!--Navigation Panel-->
<A NAME="tex2html174"
HREF="node10.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html169"
<A NAME="tex2html170"
HREF="node5.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html163"
<A NAME="tex2html164"
HREF="node8.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html171"
<A NAME="tex2html172"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html174"
<B> Next:</B> <A NAME="tex2html175"
HREF="node10.html">Example and test programs</A>
<B> Up:</B> <A NAME="tex2html170"
<B> Up:</B> <A NAME="tex2html171"
HREF="node5.html">Configuring and Building MLD2P4</A>
<B> Previous:</B> <A NAME="tex2html164"
<B> Previous:</B> <A NAME="tex2html165"
HREF="node8.html">Configuration options</A>
&nbsp; <B> <A NAME="tex2html172"
&nbsp; <B> <A NAME="tex2html173"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00054000000000000000">

@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
@ -22,31 +22,30 @@ original version by: Nikos Drakos, CBLU, University of Leeds
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html13"
<!--Navigation Panel-->
<A NAME="tex2html14"
HREF="node1.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up_g.png">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png">
<A NAME="tex2html11"
<A NAME="tex2html12"
HREF="node2.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html14"
<B> Next:</B> <A NAME="tex2html15"
HREF="node1.html">Abstract</A>
&nbsp; <B> <A NAME="tex2html12"
&nbsp; <B> <A NAME="tex2html13"
HREF="node2.html">Contents</A></B>
<BR>
<BR></DIV>
<BR>
<!--End of Navigation Panel-->
<BIG CLASS="XXLARGE"><B>MLD2P4
<FONT SIZE="+2"><B>MLD2P4
<BR>
<BR>
User's and Reference Guide</B></BIG>
<BR><SPAN CLASS="textit"><BIG CLASS="LARGE">A guide for the Multi-Level Domain Decomposition
User's and Reference Guide</B></FONT>
<BR><I><FONT SIZE="+1">A guide for the Multi-Level Domain Decomposition
Parallel Preconditioners Package
based on PSBLAS</BIG></SPAN>
based on PSBLAS</FONT></I>
<BR>
<BR>
<BR>
@ -62,9 +61,9 @@ University of Rome ``Tor Vergata'', Italy
<BR>
<BR>
<BR>
Software version: 2.0
Software version: 2.1
<BR>
Oct. 12, 2015
Mar. 31, 2016
<BR>
@ -77,70 +76,70 @@ Oct. 12, 2015
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"></A>
<UL CLASS="ChildLinks">
<LI><A NAME="tex2html15"
HREF="node1.html">Abstract</A>
<UL>
<LI><A NAME="tex2html16"
HREF="node2.html">Contents</A>
HREF="node1.html">Abstract</A>
<LI><A NAME="tex2html17"
HREF="node3.html">General Overview</A>
HREF="node2.html">Contents</A>
<LI><A NAME="tex2html18"
HREF="node4.html">Code Distribution</A>
HREF="node3.html">General Overview</A>
<LI><A NAME="tex2html19"
HREF="node4.html">Code Distribution</A>
<LI><A NAME="tex2html20"
HREF="node5.html">Configuring and Building MLD2P4</A>
<UL>
<LI><A NAME="tex2html20"
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html21"
HREF="node7.html">Optional third party libraries</A>
HREF="node6.html">Prerequisites</A>
<LI><A NAME="tex2html22"
HREF="node8.html">Configuration options</A>
HREF="node7.html">Optional third party libraries</A>
<LI><A NAME="tex2html23"
HREF="node9.html">Bug reporting</A>
HREF="node8.html">Configuration options</A>
<LI><A NAME="tex2html24"
HREF="node9.html">Bug reporting</A>
<LI><A NAME="tex2html25"
HREF="node10.html">Example and test programs</A>
</UL>
<BR>
<LI><A NAME="tex2html25"
<LI><A NAME="tex2html26"
HREF="node11.html">Multi-level Domain Decomposition Background</A>
<UL>
<LI><A NAME="tex2html26"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html27"
HREF="node12.html">Multi-level Schwarz Preconditioners</A>
<LI><A NAME="tex2html28"
HREF="node13.html">Smoothed Aggregation</A>
</UL>
<BR>
<LI><A NAME="tex2html28"
<LI><A NAME="tex2html29"
HREF="node14.html">Getting Started</A>
<UL>
<LI><A NAME="tex2html29"
<LI><A NAME="tex2html30"
HREF="node15.html">Examples</A>
</UL>
<BR>
<LI><A NAME="tex2html30"
<LI><A NAME="tex2html31"
HREF="node16.html">User Interface</A>
<UL>
<LI><A NAME="tex2html31"
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html32"
HREF="node18.html">Subroutine mld_precset</A>
HREF="node17.html">Subroutine mld_precinit</A>
<LI><A NAME="tex2html33"
HREF="node19.html">Subroutine mld_precbld</A>
HREF="node18.html">Subroutine mld_precset</A>
<LI><A NAME="tex2html34"
HREF="node20.html">Subroutine mld_precaply</A>
HREF="node19.html">Subroutine mld_precbld</A>
<LI><A NAME="tex2html35"
HREF="node21.html">Subroutine mld_precfree</A>
HREF="node20.html">Subroutine mld_precaply</A>
<LI><A NAME="tex2html36"
HREF="node21.html">Subroutine mld_precfree</A>
<LI><A NAME="tex2html37"
HREF="node22.html">Subroutine mld_precdescr</A>
</UL>
<BR>
<LI><A NAME="tex2html37"
HREF="node23.html">Error Handling</A>
<LI><A NAME="tex2html38"
HREF="node24.html">License</A>
HREF="node23.html">Error Handling</A>
<LI><A NAME="tex2html39"
HREF="node25.html">Bibliography</A>
HREF="node24.html">License</A>
<LI><A NAME="tex2html40"
HREF="node25.html">Bibliography</A>
<LI><A NAME="tex2html41"
HREF="node26.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->

File diff suppressed because one or more lines are too long

@ -305,6 +305,14 @@ according to their needs.
& \texttt{'DEC'}
& Aggregation algorithm. Currently, only the
decoupled aggregation is available. \\ \hline
\verb|mld_aggr_ord_| \break \verb|AGGR_ORD| & \verb|character(len=*)|
& \texttt{'NAT'}
& \texttt{'DEGREE'}
& Initial ordering of indices for aggregation
algorithm: natural ordering or sorted by
descending degree of the node in the
matrix graph. Since aggregation is
heuristics, results will be different. \\ \hline
\verb|mld_aggr_kind_| \break \verb|AGGR_KIND| & \verb|character(len=*)|
& \texttt{'SMOOTHED'} \hspace{2.5cm} \texttt{'NONSMOOTHED'}
& \texttt{'SMOOTHED'}

@ -73,6 +73,9 @@ subroutine mld_c_base_onelev_cseti(lv,what,val,info)
case ('AGGR_ALG')
lv%parms%aggr_alg = val
case ('AGGR_ORD')
lv%parms%aggr_ord = val
case ('AGGR_KIND')
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_c_base_onelev_seti(lv,what,val,info)
case (mld_aggr_alg_)
lv%parms%aggr_alg = val
case (mld_aggr_ord_)
lv%parms%aggr_ord = val
case (mld_aggr_kind_)
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_d_base_onelev_cseti(lv,what,val,info)
case ('AGGR_ALG')
lv%parms%aggr_alg = val
case ('AGGR_ORD')
lv%parms%aggr_ord = val
case ('AGGR_KIND')
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_d_base_onelev_seti(lv,what,val,info)
case (mld_aggr_alg_)
lv%parms%aggr_alg = val
case (mld_aggr_ord_)
lv%parms%aggr_ord = val
case (mld_aggr_kind_)
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_s_base_onelev_cseti(lv,what,val,info)
case ('AGGR_ALG')
lv%parms%aggr_alg = val
case ('AGGR_ORD')
lv%parms%aggr_ord = val
case ('AGGR_KIND')
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_s_base_onelev_seti(lv,what,val,info)
case (mld_aggr_alg_)
lv%parms%aggr_alg = val
case (mld_aggr_ord_)
lv%parms%aggr_ord = val
case (mld_aggr_kind_)
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_z_base_onelev_cseti(lv,what,val,info)
case ('AGGR_ALG')
lv%parms%aggr_alg = val
case ('AGGR_ORD')
lv%parms%aggr_ord = val
case ('AGGR_KIND')
lv%parms%aggr_kind = val

@ -73,6 +73,9 @@ subroutine mld_z_base_onelev_seti(lv,what,val,info)
case (mld_aggr_alg_)
lv%parms%aggr_alg = val
case (mld_aggr_ord_)
lv%parms%aggr_ord = val
case (mld_aggr_kind_)
lv%parms%aggr_kind = val

@ -37,7 +37,7 @@
!!$
!!$
subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_c_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod
use mld_c_inner_mod, mld_protect_name => mld_c_dec_map_bld
@ -45,6 +45,7 @@ subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
type(psb_cspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_spk_), intent(in) :: theta
@ -52,9 +53,11 @@ subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
integer(psb_ipk_), intent(out) :: info
! Local variables
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:)
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:),&
& ideg(:), idxs(:)
complex(psb_spk_), allocatable :: val(:), diag(:)
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg, ii
type(psb_c_csr_sparse_mat) :: acsr
real(psb_spk_) :: cpling, tcl
logical :: recovery
integer(psb_ipk_) :: debug_level, debug_unit,err_act
@ -75,7 +78,7 @@ subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
ncol = desc_a%get_local_cols()
nr = a%get_nrows()
allocate(ilaggr(nr),neigh(nr),stat=info)
allocate(ilaggr(nr),neigh(nr),ideg(nr),idxs(nr),stat=info)
if(info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/2*nr,izero,izero,izero,izero/),&
@ -90,11 +93,20 @@ subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
goto 9999
end if
do i=1, nr
ilaggr(i) = -(nr+1)
end do
if (iorder == mld_aggr_ord_nat_) then
do i=1, nr
ilaggr(i) = -(nr+1)
idxs(i) = i
end do
else
call a%cp_to(acsr)
do i=1, nr
ilaggr(i) = -(nr+1)
ideg(i) = acsr%irp(i+1) - acsr%irp(i)
end do
call acsr%free()
call psb_msort(ideg,ix=idxs,dir=psb_sort_down_)
end if
! Note: -(nr+1) Untouched as yet
! -i 1<=i<=nr Adjacent to aggregate i
! i 1<=i<=nr Belonging to aggregate i
@ -106,7 +118,8 @@ subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
nlp = 0
do
icnt = 0
do i=1, nr
do ii=1, nr
i = idxs(ii)
if (ilaggr(i) == -(nr+1)) then
!
! 1. Untouched nodes are marked >0 together
@ -124,14 +137,16 @@ subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
end if
do k=1, nz
j = icol(k)
ilg = ilaggr(j)
if ((ilg<0).and.(1<=j).and.(j<=nr).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
j = icol(k)
if ((1<=j).and.(j<=nr)) then
ilg = ilaggr(j)
if ((ilg<0).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
end if
end if
enddo

@ -79,7 +79,7 @@
! info - integer, output.
! Error code.
!
subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_caggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod
use mld_c_inner_mod, mld_protect_name => mld_caggrmap_bld
@ -87,6 +87,7 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_spk_), intent(in) :: theta
type(psb_cspmat_type), intent(in) :: a
@ -118,7 +119,7 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
select case (aggr_type)
case (mld_dec_aggr_)
call mld_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
call mld_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
case (mld_sym_dec_aggr_)
nr = a%get_nrows()
@ -126,14 +127,14 @@ subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
& rscale=.false.,cscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%transp(atmp)
if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO')
if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free()
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
if (info == psb_success_) call mld_dec_map_bld(theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call mld_dec_map_bld(iorder,theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free()
case default

@ -39,7 +39,7 @@
! File: mld_ccoarse_bld.f90
!
! Subroutine: mld_ccoarse_bld
! Version: complex
! Version: real
!
! This routine builds the matrix associated to the current level of the
! multilevel preconditioner from the matrix associated to the previous level,
@ -95,6 +95,8 @@ subroutine mld_ccoarse_bld(a,desc_a,p,info)
& mld_mult_ml_,is_legal_ml_type)
call mld_check_def(p%parms%aggr_alg,'Aggregation',&
& mld_dec_aggr_,is_legal_ml_aggr_alg)
call mld_check_def(p%parms%aggr_ord,'Ordering',&
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
call mld_check_def(p%parms%aggr_kind,'Smoother',&
& mld_smooth_prol_,is_legal_ml_aggr_kind)
call mld_check_def(p%parms%coarse_mat,'Coarse matrix',&
@ -117,7 +119,7 @@ subroutine mld_ccoarse_bld(a,desc_a,p,info)
! aggregation algorithm. This also defines a tentative prolongator from
! the coarse to the fine level.
!
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_thresh,&
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_ord,p%parms%aggr_thresh,&
& a,desc_a,ilaggr,nlaggr,info)
if (info /= psb_success_) then
@ -136,6 +138,7 @@ subroutine mld_ccoarse_bld(a,desc_a,p,info)
call psb_errpush(psb_err_from_subroutine_,name,a_err='mld_aggrmat_asb')
goto 9999
end if
!
! Fix the base_a and base_desc pointers for handling of residuals.
! This is correct because this routine is only called at levels >=2.

@ -93,6 +93,7 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
use mld_c_mumps_solver
#endif
implicit none
! Arguments
@ -148,9 +149,10 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN')
call p%precv(ilev_)%set(what,val,info)
@ -166,9 +168,10 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN',&
& 'COARSE_MAT')
@ -214,7 +217,7 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
case(mld_mumps_)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info)
call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info)
case(mld_jac_)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),mld_diag_scale_,info)
@ -280,7 +283,7 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case('ML_TYPE','AGGR_ALG','AGGR_KIND',&
case('ML_TYPE','AGGR_ALG','AGGR_ORD','AGGR_KIND',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','AGGR_FILTER')
@ -302,7 +305,6 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
#if defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#elif defined(HAVE_MUMPS_)
call onelev_set_solver(p%precv(nlev_),mld_mumps_,info)
#else
@ -321,7 +323,6 @@ subroutine mld_ccprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info)
case(mld_jac_)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),mld_diag_scale_,info)

@ -2,9 +2,9 @@
!!$
!!$ MLD2P4 version 2.0
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0)
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.3)
!!$
!!$ (C) Copyright 2008,2009,2010,2012,2013
!!$ (C) Copyright 2008, 2010, 2012, 2015
!!$
!!$ Salvatore Filippone University of Rome Tor Vergata
!!$ Alfredo Buttari CNRS-IRIT, Toulouse
@ -61,7 +61,7 @@
!
! 'ML' - Multilevel hybrid preconditioner (additive on the
! same level and multiplicative through the levels),
! with 2 levels and post-smoothing only. RAS with
! with 2 levels, pre and post-smoothing, RAS with
! overlap 1 and ILU(0) on the local blocks is
! applied as post-smoother at each level, but the
! coarsest one; four sweeps of the block-Jacobi solver,
@ -97,9 +97,6 @@ subroutine mld_cprecinit(p,ptype,info,nlev)
use mld_c_id_solver
use mld_c_diag_solver
use mld_c_ilu_solver
#if defined(HAVE_UMF_) && 0
use mld_c_umf_solver
#endif
#if defined(HAVE_SLU_)
use mld_c_slu_solver
#endif
@ -115,7 +112,7 @@ subroutine mld_cprecinit(p,ptype,info,nlev)
! Local variables
integer(psb_ipk_) :: nlev_, ilev_
real(psb_spk_) :: thr
real(psb_spk_) :: thr, scale
character(len=*), parameter :: name='mld_precinit'
info = psb_success_
@ -191,10 +188,8 @@ subroutine mld_cprecinit(p,ptype,info,nlev)
ilev_ = nlev_
allocate(mld_c_jac_smoother_type :: p%precv(ilev_)%sm, stat=info)
if (info /= psb_success_) return
#if defined(HAVE_UMF_) && 0
allocate(mld_c_umf_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#elif defined(HAVE_SLU_)
allocate(mld_c_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#if defined(HAVE_SLU_)
allocate(mld_c_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#else
allocate(mld_c_ilu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#endif
@ -205,10 +200,11 @@ subroutine mld_cprecinit(p,ptype,info,nlev)
call p%precv(ilev_)%set(mld_sub_prol_,psb_none_,info)
call p%precv(ilev_)%set(mld_sub_ovr_,izero,info)
thr = 0.16d0
thr = 0.05
scale = 1.0
do ilev_=1,nlev_
call p%precv(ilev_)%set(mld_aggr_thresh_,thr,info)
thr = thr/2
call p%precv(ilev_)%set(mld_aggr_scale_,scale,info)
end do
case default

@ -92,6 +92,7 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
#if defined(HAVE_MUMPS_)
use mld_c_mumps_solver
#endif
implicit none
! Arguments
@ -148,8 +149,8 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_)
@ -166,8 +167,8 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_,&
@ -207,7 +208,7 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set(mld_coarse_mat_,mld_repl_mat_,info)
case(mld_sludist_, mld_mumps_)
case(mld_sludist_,mld_mumps_)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set(mld_coarse_mat_,mld_distr_mat_,info)
@ -276,7 +277,7 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,mld_aggr_kind_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,&
& mld_aggr_eig_,mld_aggr_filter_)
@ -298,8 +299,8 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
#if defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#elif defined(HAVE_MUMPS_)
call onelev_set_solver(p%precv(nlev_),mld_mumps_,info)
#elif defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#else
call onelev_set_solver(p%precv(nlev_),mld_ilu_n_,info)
#endif
@ -599,7 +600,6 @@ contains
end if
end if
#endif
case default
!
! Do nothing and hope for the best :)
@ -723,13 +723,26 @@ subroutine mld_cprecsetsv(p,val,info,ilev)
do ilev_ = ilmin, ilmax
if (allocated(p%precv(ilev_)%sm)) then
if (allocated(p%precv(ilev_)%sm%sv)) &
& deallocate(p%precv(ilev_)%sm%sv)
if (allocated(p%precv(ilev_)%sm%sv)) then
if (.not.same_type_as(p%precv(ilev_)%sm%sv,val)) then
deallocate(p%precv(ilev_)%sm%sv,stat=info)
if (info /= 0) then
info = 3111
return
end if
end if
if (.not.allocated(p%precv(ilev_)%sm%sv)) then
#ifdef HAVE_MOLD
allocate(p%precv(ilev_)%sm%sv,mold=val)
allocate(p%precv(ilev_)%sm%sv,mold=val,stat=info)
#else
allocate(p%precv(ilev_)%sm%sv,source=val)
allocate(p%precv(ilev_)%sm%sv,source=val,stat=info)
#endif
if (info /= 0) then
info = 3111
return
end if
end if
end if
call p%precv(ilev_)%sm%sv%default()
else
info = 3111

@ -37,7 +37,7 @@
!!$
!!$
subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_d_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod
use mld_d_inner_mod, mld_protect_name => mld_d_dec_map_bld
@ -45,6 +45,7 @@ subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
type(psb_dspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_dpk_), intent(in) :: theta
@ -52,9 +53,11 @@ subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
integer(psb_ipk_), intent(out) :: info
! Local variables
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:)
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:),&
& ideg(:), idxs(:)
real(psb_dpk_), allocatable :: val(:), diag(:)
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg, ii
type(psb_d_csr_sparse_mat) :: acsr
real(psb_dpk_) :: cpling, tcl
logical :: recovery
integer(psb_ipk_) :: debug_level, debug_unit,err_act
@ -75,7 +78,7 @@ subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
ncol = desc_a%get_local_cols()
nr = a%get_nrows()
allocate(ilaggr(nr),neigh(nr),stat=info)
allocate(ilaggr(nr),neigh(nr),ideg(nr),idxs(nr),stat=info)
if(info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/2*nr,izero,izero,izero,izero/),&
@ -90,11 +93,20 @@ subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
goto 9999
end if
do i=1, nr
ilaggr(i) = -(nr+1)
end do
if (iorder == mld_aggr_ord_nat_) then
do i=1, nr
ilaggr(i) = -(nr+1)
idxs(i) = i
end do
else
call a%cp_to(acsr)
do i=1, nr
ilaggr(i) = -(nr+1)
ideg(i) = acsr%irp(i+1) - acsr%irp(i)
end do
call acsr%free()
call psb_msort(ideg,ix=idxs,dir=psb_sort_down_)
end if
! Note: -(nr+1) Untouched as yet
! -i 1<=i<=nr Adjacent to aggregate i
! i 1<=i<=nr Belonging to aggregate i
@ -106,7 +118,8 @@ subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
nlp = 0
do
icnt = 0
do i=1, nr
do ii=1, nr
i = idxs(ii)
if (ilaggr(i) == -(nr+1)) then
!
! 1. Untouched nodes are marked >0 together
@ -124,14 +137,16 @@ subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
end if
do k=1, nz
j = icol(k)
ilg = ilaggr(j)
if ((ilg<0).and.(1<=j).and.(j<=nr).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
j = icol(k)
if ((1<=j).and.(j<=nr)) then
ilg = ilaggr(j)
if ((ilg<0).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
end if
end if
enddo

@ -79,7 +79,7 @@
! info - integer, output.
! Error code.
!
subroutine mld_daggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_daggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod
use mld_d_inner_mod, mld_protect_name => mld_daggrmap_bld
@ -87,6 +87,7 @@ subroutine mld_daggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_dpk_), intent(in) :: theta
type(psb_dspmat_type), intent(in) :: a
@ -118,7 +119,7 @@ subroutine mld_daggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
select case (aggr_type)
case (mld_dec_aggr_)
call mld_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
call mld_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
case (mld_sym_dec_aggr_)
nr = a%get_nrows()
@ -126,14 +127,14 @@ subroutine mld_daggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
& rscale=.false.,cscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%transp(atmp)
if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO')
if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free()
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
if (info == psb_success_) call mld_dec_map_bld(theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call mld_dec_map_bld(iorder,theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free()
case default

@ -95,6 +95,8 @@ subroutine mld_dcoarse_bld(a,desc_a,p,info)
& mld_mult_ml_,is_legal_ml_type)
call mld_check_def(p%parms%aggr_alg,'Aggregation',&
& mld_dec_aggr_,is_legal_ml_aggr_alg)
call mld_check_def(p%parms%aggr_ord,'Ordering',&
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
call mld_check_def(p%parms%aggr_kind,'Smoother',&
& mld_smooth_prol_,is_legal_ml_aggr_kind)
call mld_check_def(p%parms%coarse_mat,'Coarse matrix',&
@ -117,7 +119,7 @@ subroutine mld_dcoarse_bld(a,desc_a,p,info)
! aggregation algorithm. This also defines a tentative prolongator from
! the coarse to the fine level.
!
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_thresh,&
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_ord,p%parms%aggr_thresh,&
& a,desc_a,ilaggr,nlaggr,info)
if (info /= psb_success_) then

@ -99,6 +99,7 @@ subroutine mld_dcprecseti(p,what,val,info,ilev)
use mld_d_mumps_solver
#endif
implicit none
! Arguments
@ -113,6 +114,7 @@ subroutine mld_dcprecseti(p,what,val,info,ilev)
character(len=*), parameter :: name='mld_precseti'
info = psb_success_
if (.not.allocated(p%precv)) then
info = 3111
write(psb_err_unit,*) name,&
@ -153,9 +155,10 @@ subroutine mld_dcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN')
call p%precv(ilev_)%set(what,val,info)
@ -171,9 +174,10 @@ subroutine mld_dcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN',&
& 'COARSE_MAT')
@ -287,7 +291,7 @@ subroutine mld_dcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case('ML_TYPE','AGGR_ALG','AGGR_KIND',&
case('ML_TYPE','AGGR_ALG','AGGR_ORD','AGGR_KIND',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','AGGR_FILTER')
@ -592,6 +596,27 @@ contains
info = -5
end if
#endif
#ifdef HAVE_MUMPS_
case (mld_mumps_)
if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv)
class is (mld_d_mumps_solver_type)
! do nothing
class default
call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_mumps_solver_type ::&
& level%sm%sv, stat=info)
end select
else
allocate(mld_d_mumps_solver_type :: level%sm%sv, stat=info)
endif
if (allocated(level%sm)) then
if (allocated(level%sm%sv)) &
& call level%sm%sv%default()
end if
#endif
#ifdef HAVE_UMF_
case (mld_umf_)
if (allocated(level%sm)) then
@ -642,27 +667,6 @@ contains
info = -5
end if
#endif
#ifdef HAVE_MUMPS_
case (mld_mumps_)
if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv)
class is (mld_d_mumps_solver_type)
! do nothing
class default
call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_mumps_solver_type ::&
& level%sm%sv, stat=info)
end select
else
allocate(mld_d_mumps_solver_type :: level%sm%sv, stat=info)
endif
if (allocated(level%sm)) then
if (allocated(level%sm%sv)) &
& call level%sm%sv%default()
end if
#endif
case default
!
! Do nothing and hope for the best :)

@ -2,9 +2,9 @@
!!$
!!$ MLD2P4 version 2.0
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0)
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.3)
!!$
!!$ (C) Copyright 2008,2009,2010,2012,2013
!!$ (C) Copyright 2008, 2010, 2012, 2015
!!$
!!$ Salvatore Filippone University of Rome Tor Vergata
!!$ Alfredo Buttari CNRS-IRIT, Toulouse
@ -61,7 +61,7 @@
!
! 'ML' - Multilevel hybrid preconditioner (additive on the
! same level and multiplicative through the levels),
! with 2 levels and post-smoothing only. RAS with
! with 2 levels, pre and post-smoothing, RAS with
! overlap 1 and ILU(0) on the local blocks is
! applied as post-smoother at each level, but the
! coarsest one; four sweeps of the block-Jacobi solver,
@ -104,6 +104,7 @@ subroutine mld_dprecinit(p,ptype,info,nlev)
use mld_d_slu_solver
#endif
implicit none
! Arguments
@ -114,7 +115,7 @@ subroutine mld_dprecinit(p,ptype,info,nlev)
! Local variables
integer(psb_ipk_) :: nlev_, ilev_
real(psb_dpk_) :: thr
real(psb_dpk_) :: thr, scale
character(len=*), parameter :: name='mld_precinit'
info = psb_success_
@ -193,7 +194,7 @@ subroutine mld_dprecinit(p,ptype,info,nlev)
#if defined(HAVE_UMF_)
allocate(mld_d_umf_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#elif defined(HAVE_SLU_)
allocate(mld_d_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
allocate(mld_d_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#else
allocate(mld_d_ilu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#endif
@ -204,10 +205,11 @@ subroutine mld_dprecinit(p,ptype,info,nlev)
call p%precv(ilev_)%set(mld_sub_prol_,psb_none_,info)
call p%precv(ilev_)%set(mld_sub_ovr_,izero,info)
thr = 0.16d0
thr = 0.05
scale = 1.0
do ilev_=1,nlev_
call p%precv(ilev_)%set(mld_aggr_thresh_,thr,info)
thr = thr/2
call p%precv(ilev_)%set(mld_aggr_scale_,scale,info)
end do
case default

@ -156,8 +156,8 @@ subroutine mld_dprecseti(p,what,val,info,ilev,pos)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_)
@ -174,8 +174,8 @@ subroutine mld_dprecseti(p,what,val,info,ilev,pos)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_,&
@ -286,7 +286,7 @@ subroutine mld_dprecseti(p,what,val,info,ilev,pos)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,mld_aggr_kind_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,&
& mld_aggr_eig_,mld_aggr_filter_)
@ -310,8 +310,6 @@ subroutine mld_dprecseti(p,what,val,info,ilev,pos)
call onelev_set_solver(p%precv(nlev_),mld_umf_,info)
#elif defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#elif defined(HAVE_MUMPS_)
call onelev_set_solver(p%precv(nlev_),mld_mumps_,info)
#else
call onelev_set_solver(p%precv(nlev_),mld_ilu_n_,info)
#endif
@ -1089,6 +1087,7 @@ subroutine mld_dprecsetr(p,what,val,info,ilev)
case(mld_coarse_iluthrs_)
ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_thresh_)
thr = val
do ilev_ = 2, nlev_

@ -37,7 +37,7 @@
!!$
!!$
subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_s_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod
use mld_s_inner_mod, mld_protect_name => mld_s_dec_map_bld
@ -45,6 +45,7 @@ subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
type(psb_sspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_spk_), intent(in) :: theta
@ -52,9 +53,11 @@ subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
integer(psb_ipk_), intent(out) :: info
! Local variables
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:)
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:),&
& ideg(:), idxs(:)
real(psb_spk_), allocatable :: val(:), diag(:)
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg, ii
type(psb_s_csr_sparse_mat) :: acsr
real(psb_spk_) :: cpling, tcl
logical :: recovery
integer(psb_ipk_) :: debug_level, debug_unit,err_act
@ -75,7 +78,7 @@ subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
ncol = desc_a%get_local_cols()
nr = a%get_nrows()
allocate(ilaggr(nr),neigh(nr),stat=info)
allocate(ilaggr(nr),neigh(nr),ideg(nr),idxs(nr),stat=info)
if(info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/2*nr,izero,izero,izero,izero/),&
@ -90,11 +93,20 @@ subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
goto 9999
end if
do i=1, nr
ilaggr(i) = -(nr+1)
end do
if (iorder == mld_aggr_ord_nat_) then
do i=1, nr
ilaggr(i) = -(nr+1)
idxs(i) = i
end do
else
call a%cp_to(acsr)
do i=1, nr
ilaggr(i) = -(nr+1)
ideg(i) = acsr%irp(i+1) - acsr%irp(i)
end do
call acsr%free()
call psb_msort(ideg,ix=idxs,dir=psb_sort_down_)
end if
! Note: -(nr+1) Untouched as yet
! -i 1<=i<=nr Adjacent to aggregate i
! i 1<=i<=nr Belonging to aggregate i
@ -106,7 +118,8 @@ subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
nlp = 0
do
icnt = 0
do i=1, nr
do ii=1, nr
i = idxs(ii)
if (ilaggr(i) == -(nr+1)) then
!
! 1. Untouched nodes are marked >0 together
@ -124,14 +137,16 @@ subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
end if
do k=1, nz
j = icol(k)
ilg = ilaggr(j)
if ((ilg<0).and.(1<=j).and.(j<=nr).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
j = icol(k)
if ((1<=j).and.(j<=nr)) then
ilg = ilaggr(j)
if ((ilg<0).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
end if
end if
enddo

@ -79,7 +79,7 @@
! info - integer, output.
! Error code.
!
subroutine mld_saggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_saggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod
use mld_s_inner_mod, mld_protect_name => mld_saggrmap_bld
@ -87,6 +87,7 @@ subroutine mld_saggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_spk_), intent(in) :: theta
type(psb_sspmat_type), intent(in) :: a
@ -118,7 +119,7 @@ subroutine mld_saggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
select case (aggr_type)
case (mld_dec_aggr_)
call mld_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
call mld_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
case (mld_sym_dec_aggr_)
nr = a%get_nrows()
@ -126,14 +127,14 @@ subroutine mld_saggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
& rscale=.false.,cscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%transp(atmp)
if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO')
if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free()
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
if (info == psb_success_) call mld_dec_map_bld(theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call mld_dec_map_bld(iorder,theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free()
case default

@ -95,6 +95,8 @@ subroutine mld_scoarse_bld(a,desc_a,p,info)
& mld_mult_ml_,is_legal_ml_type)
call mld_check_def(p%parms%aggr_alg,'Aggregation',&
& mld_dec_aggr_,is_legal_ml_aggr_alg)
call mld_check_def(p%parms%aggr_ord,'Ordering',&
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
call mld_check_def(p%parms%aggr_kind,'Smoother',&
& mld_smooth_prol_,is_legal_ml_aggr_kind)
call mld_check_def(p%parms%coarse_mat,'Coarse matrix',&
@ -117,7 +119,7 @@ subroutine mld_scoarse_bld(a,desc_a,p,info)
! aggregation algorithm. This also defines a tentative prolongator from
! the coarse to the fine level.
!
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_thresh,&
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_ord,p%parms%aggr_thresh,&
& a,desc_a,ilaggr,nlaggr,info)
if (info /= psb_success_) then
@ -136,6 +138,7 @@ subroutine mld_scoarse_bld(a,desc_a,p,info)
call psb_errpush(psb_err_from_subroutine_,name,a_err='mld_aggrmat_asb')
goto 9999
end if
!
! Fix the base_a and base_desc pointers for handling of residuals.
! This is correct because this routine is only called at levels >=2.

@ -93,6 +93,7 @@ subroutine mld_scprecseti(p,what,val,info,ilev)
use mld_s_mumps_solver
#endif
implicit none
! Arguments
@ -148,9 +149,10 @@ subroutine mld_scprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN')
call p%precv(ilev_)%set(what,val,info)
@ -166,9 +168,10 @@ subroutine mld_scprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN',&
& 'COARSE_MAT')
@ -280,7 +283,7 @@ subroutine mld_scprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case('ML_TYPE','AGGR_ALG','AGGR_KIND',&
case('ML_TYPE','AGGR_ALG','AGGR_ORD','AGGR_KIND',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','AGGR_FILTER')
@ -583,7 +586,6 @@ contains
info = -5
end if
#endif
#ifdef HAVE_MUMPS_
case (mld_mumps_)
if (allocated(level%sm%sv)) then

@ -2,9 +2,9 @@
!!$
!!$ MLD2P4 version 2.0
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0)
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.3)
!!$
!!$ (C) Copyright 2008,2009,2010,2012,2013
!!$ (C) Copyright 2008, 2010, 2012, 2015
!!$
!!$ Salvatore Filippone University of Rome Tor Vergata
!!$ Alfredo Buttari CNRS-IRIT, Toulouse
@ -61,7 +61,7 @@
!
! 'ML' - Multilevel hybrid preconditioner (additive on the
! same level and multiplicative through the levels),
! with 2 levels and post-smoothing only. RAS with
! with 2 levels, pre and post-smoothing, RAS with
! overlap 1 and ILU(0) on the local blocks is
! applied as post-smoother at each level, but the
! coarsest one; four sweeps of the block-Jacobi solver,
@ -97,9 +97,6 @@ subroutine mld_sprecinit(p,ptype,info,nlev)
use mld_s_id_solver
use mld_s_diag_solver
use mld_s_ilu_solver
#if defined(HAVE_UMF_) && 0
use mld_s_umf_solver
#endif
#if defined(HAVE_SLU_)
use mld_s_slu_solver
#endif
@ -115,7 +112,7 @@ subroutine mld_sprecinit(p,ptype,info,nlev)
! Local variables
integer(psb_ipk_) :: nlev_, ilev_
real(psb_spk_) :: thr
real(psb_spk_) :: thr, scale
character(len=*), parameter :: name='mld_precinit'
info = psb_success_
@ -191,10 +188,8 @@ subroutine mld_sprecinit(p,ptype,info,nlev)
ilev_ = nlev_
allocate(mld_s_jac_smoother_type :: p%precv(ilev_)%sm, stat=info)
if (info /= psb_success_) return
#if defined(HAVE_UMF_) && 0
allocate(mld_s_umf_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#elif defined(HAVE_SLU_)
allocate(mld_s_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#if defined(HAVE_SLU_)
allocate(mld_s_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#else
allocate(mld_s_ilu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#endif
@ -205,10 +200,11 @@ subroutine mld_sprecinit(p,ptype,info,nlev)
call p%precv(ilev_)%set(mld_sub_prol_,psb_none_,info)
call p%precv(ilev_)%set(mld_sub_ovr_,izero,info)
thr = 0.16d0
thr = 0.05
scale = 1.0
do ilev_=1,nlev_
call p%precv(ilev_)%set(mld_aggr_thresh_,thr,info)
thr = thr/2
call p%precv(ilev_)%set(mld_aggr_scale_,scale,info)
end do
case default

@ -149,8 +149,8 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_)
@ -167,8 +167,8 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_,&
@ -277,7 +277,7 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,mld_aggr_kind_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,&
& mld_aggr_eig_,mld_aggr_filter_)
@ -299,8 +299,8 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
#if defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#elif defined(HAVE_MUMPS_)
call onelev_set_solver(p%precv(nlev_),mld_mumps_,info)
#elif defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#else
call onelev_set_solver(p%precv(nlev_),mld_ilu_n_,info)
#endif
@ -579,7 +579,6 @@ contains
info = -5
end if
#endif
#ifdef HAVE_MUMPS_
case (mld_mumps_)
if (allocated(level%sm%sv)) then
@ -601,8 +600,6 @@ contains
end if
end if
#endif
case default
!
! Do nothing and hope for the best :)
@ -726,13 +723,26 @@ subroutine mld_sprecsetsv(p,val,info,ilev)
do ilev_ = ilmin, ilmax
if (allocated(p%precv(ilev_)%sm)) then
if (allocated(p%precv(ilev_)%sm%sv)) &
& deallocate(p%precv(ilev_)%sm%sv)
if (allocated(p%precv(ilev_)%sm%sv)) then
if (.not.same_type_as(p%precv(ilev_)%sm%sv,val)) then
deallocate(p%precv(ilev_)%sm%sv,stat=info)
if (info /= 0) then
info = 3111
return
end if
end if
if (.not.allocated(p%precv(ilev_)%sm%sv)) then
#ifdef HAVE_MOLD
allocate(p%precv(ilev_)%sm%sv,mold=val)
allocate(p%precv(ilev_)%sm%sv,mold=val,stat=info)
#else
allocate(p%precv(ilev_)%sm%sv,source=val)
allocate(p%precv(ilev_)%sm%sv,source=val,stat=info)
#endif
if (info /= 0) then
info = 3111
return
end if
end if
end if
call p%precv(ilev_)%sm%sv%default()
else
info = 3111

@ -37,7 +37,7 @@
!!$
!!$
subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_z_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod
use mld_z_inner_mod, mld_protect_name => mld_z_dec_map_bld
@ -45,6 +45,7 @@ subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
type(psb_zspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_dpk_), intent(in) :: theta
@ -52,9 +53,11 @@ subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
integer(psb_ipk_), intent(out) :: info
! Local variables
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:)
integer(psb_ipk_), allocatable :: ils(:), neigh(:), irow(:), icol(:),&
& ideg(:), idxs(:)
complex(psb_dpk_), allocatable :: val(:), diag(:)
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg
integer(psb_ipk_) :: icnt,nlp,k,n,ia,isz,nr, naggr,i,j,m, nz, ilg, ii
type(psb_z_csr_sparse_mat) :: acsr
real(psb_dpk_) :: cpling, tcl
logical :: recovery
integer(psb_ipk_) :: debug_level, debug_unit,err_act
@ -75,7 +78,7 @@ subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
ncol = desc_a%get_local_cols()
nr = a%get_nrows()
allocate(ilaggr(nr),neigh(nr),stat=info)
allocate(ilaggr(nr),neigh(nr),ideg(nr),idxs(nr),stat=info)
if(info /= psb_success_) then
info=psb_err_alloc_request_
call psb_errpush(info,name,i_err=(/2*nr,izero,izero,izero,izero/),&
@ -90,11 +93,20 @@ subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
goto 9999
end if
do i=1, nr
ilaggr(i) = -(nr+1)
end do
if (iorder == mld_aggr_ord_nat_) then
do i=1, nr
ilaggr(i) = -(nr+1)
idxs(i) = i
end do
else
call a%cp_to(acsr)
do i=1, nr
ilaggr(i) = -(nr+1)
ideg(i) = acsr%irp(i+1) - acsr%irp(i)
end do
call acsr%free()
call psb_msort(ideg,ix=idxs,dir=psb_sort_down_)
end if
! Note: -(nr+1) Untouched as yet
! -i 1<=i<=nr Adjacent to aggregate i
! i 1<=i<=nr Belonging to aggregate i
@ -106,7 +118,8 @@ subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
nlp = 0
do
icnt = 0
do i=1, nr
do ii=1, nr
i = idxs(ii)
if (ilaggr(i) == -(nr+1)) then
!
! 1. Untouched nodes are marked >0 together
@ -124,14 +137,16 @@ subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
end if
do k=1, nz
j = icol(k)
ilg = ilaggr(j)
if ((ilg<0).and.(1<=j).and.(j<=nr).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
j = icol(k)
if ((1<=j).and.(j<=nr)) then
ilg = ilaggr(j)
if ((ilg<0).and.(i /= j)) then
if (abs(val(k)) > theta*sqrt(abs(diag(i)*diag(j)))) then
ilaggr(j) = naggr
else
ilaggr(j) = -naggr
endif
end if
end if
enddo

@ -79,7 +79,7 @@
! info - integer, output.
! Error code.
!
subroutine mld_zaggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_zaggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod
use mld_z_inner_mod, mld_protect_name => mld_zaggrmap_bld
@ -87,6 +87,7 @@ subroutine mld_zaggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
implicit none
! Arguments
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_dpk_), intent(in) :: theta
type(psb_zspmat_type), intent(in) :: a
@ -118,7 +119,7 @@ subroutine mld_zaggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
select case (aggr_type)
case (mld_dec_aggr_)
call mld_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
call mld_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
case (mld_sym_dec_aggr_)
nr = a%get_nrows()
@ -126,14 +127,14 @@ subroutine mld_zaggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
& rscale=.false.,cscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%transp(atmp)
if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO')
if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.)
call atmp%set_nrows(nr)
call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free()
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
if (info == psb_success_) call mld_dec_map_bld(theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call mld_dec_map_bld(iorder,theta,atmp,desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free()
case default

@ -39,7 +39,7 @@
! File: mld_zcoarse_bld.f90
!
! Subroutine: mld_zcoarse_bld
! Version: complex
! Version: real
!
! This routine builds the matrix associated to the current level of the
! multilevel preconditioner from the matrix associated to the previous level,
@ -95,6 +95,8 @@ subroutine mld_zcoarse_bld(a,desc_a,p,info)
& mld_mult_ml_,is_legal_ml_type)
call mld_check_def(p%parms%aggr_alg,'Aggregation',&
& mld_dec_aggr_,is_legal_ml_aggr_alg)
call mld_check_def(p%parms%aggr_ord,'Ordering',&
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
call mld_check_def(p%parms%aggr_kind,'Smoother',&
& mld_smooth_prol_,is_legal_ml_aggr_kind)
call mld_check_def(p%parms%coarse_mat,'Coarse matrix',&
@ -117,7 +119,7 @@ subroutine mld_zcoarse_bld(a,desc_a,p,info)
! aggregation algorithm. This also defines a tentative prolongator from
! the coarse to the fine level.
!
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_thresh,&
call mld_aggrmap_bld(p%parms%aggr_alg,p%parms%aggr_ord,p%parms%aggr_thresh,&
& a,desc_a,ilaggr,nlaggr,info)
if (info /= psb_success_) then
@ -136,6 +138,7 @@ subroutine mld_zcoarse_bld(a,desc_a,p,info)
call psb_errpush(psb_err_from_subroutine_,name,a_err='mld_aggrmat_asb')
goto 9999
end if
!
! Fix the base_a and base_desc pointers for handling of residuals.
! This is correct because this routine is only called at levels >=2.
@ -147,7 +150,6 @@ subroutine mld_zcoarse_bld(a,desc_a,p,info)
return
9999 call psb_error_handler(err_act)
return
end subroutine mld_zcoarse_bld

@ -99,6 +99,7 @@ subroutine mld_zcprecseti(p,what,val,info,ilev)
use mld_z_mumps_solver
#endif
implicit none
! Arguments
@ -154,9 +155,10 @@ subroutine mld_zcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN')
call p%precv(ilev_)%set(what,val,info)
@ -172,9 +174,10 @@ subroutine mld_zcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case('SUB_SOLVE')
call onelev_set_solver(p%precv(ilev_),val,info)
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_KIND',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG','AGGR_EIG',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
case('SMOOTHER_SWEEPS','ML_TYPE','AGGR_ALG','AGGR_ORD',&
& 'AGGR_KIND','SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','SMOOTHER_SWEEPS_PRE',&
& 'SMOOTHER_SWEEPS_POST',&
& 'SUB_RESTR','SUB_PROL', &
& 'SUB_REN','SUB_OVR','SUB_FILLIN',&
& 'COARSE_MAT')
@ -288,7 +291,7 @@ subroutine mld_zcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case('ML_TYPE','AGGR_ALG','AGGR_KIND',&
case('ML_TYPE','AGGR_ALG','AGGR_ORD','AGGR_KIND',&
& 'SMOOTHER_SWEEPS_PRE','SMOOTHER_SWEEPS_POST',&
& 'SMOOTHER_POS','AGGR_OMEGA_ALG',&
& 'AGGR_EIG','AGGR_FILTER')
@ -330,7 +333,6 @@ subroutine mld_zcprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info)
case(mld_jac_)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),mld_diag_scale_,info)
@ -594,6 +596,27 @@ contains
info = -5
end if
#endif
#ifdef HAVE_MUMPS_
case (mld_mumps_)
if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv)
class is (mld_z_mumps_solver_type)
! do nothing
class default
call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_z_mumps_solver_type ::&
& level%sm%sv, stat=info)
end select
else
allocate(mld_z_mumps_solver_type :: level%sm%sv, stat=info)
endif
if (allocated(level%sm)) then
if (allocated(level%sm%sv)) &
& call level%sm%sv%default()
end if
#endif
#ifdef HAVE_UMF_
case (mld_umf_)
if (allocated(level%sm)) then
@ -644,28 +667,6 @@ contains
info = -5
end if
#endif
#ifdef HAVE_MUMPS_
case (mld_mumps_)
if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv)
class is (mld_z_mumps_solver_type)
! do nothing
class default
call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_z_mumps_solver_type ::&
& level%sm%sv, stat=info)
end select
else
allocate(mld_z_mumps_solver_type :: level%sm%sv, stat=info)
endif
if (allocated(level%sm)) then
if (allocated(level%sm%sv)) &
& call level%sm%sv%default()
end if
#endif
case default
!
! Do nothing and hope for the best :)

@ -2,9 +2,9 @@
!!$
!!$ MLD2P4 version 2.0
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0)
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.3)
!!$
!!$ (C) Copyright 2008,2009,2010,2012,2013
!!$ (C) Copyright 2008, 2010, 2012, 2015
!!$
!!$ Salvatore Filippone University of Rome Tor Vergata
!!$ Alfredo Buttari CNRS-IRIT, Toulouse
@ -61,7 +61,7 @@
!
! 'ML' - Multilevel hybrid preconditioner (additive on the
! same level and multiplicative through the levels),
! with 2 levels and post-smoothing only. RAS with
! with 2 levels, pre and post-smoothing, RAS with
! overlap 1 and ILU(0) on the local blocks is
! applied as post-smoother at each level, but the
! coarsest one; four sweeps of the block-Jacobi solver,
@ -115,7 +115,7 @@ subroutine mld_zprecinit(p,ptype,info,nlev)
! Local variables
integer(psb_ipk_) :: nlev_, ilev_
real(psb_dpk_) :: thr
real(psb_dpk_) :: thr, scale
character(len=*), parameter :: name='mld_precinit'
info = psb_success_
@ -194,7 +194,7 @@ subroutine mld_zprecinit(p,ptype,info,nlev)
#if defined(HAVE_UMF_)
allocate(mld_z_umf_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#elif defined(HAVE_SLU_)
allocate(mld_z_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
allocate(mld_z_slu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#else
allocate(mld_z_ilu_solver_type :: p%precv(ilev_)%sm%sv, stat=info)
#endif
@ -205,10 +205,11 @@ subroutine mld_zprecinit(p,ptype,info,nlev)
call p%precv(ilev_)%set(mld_sub_prol_,psb_none_,info)
call p%precv(ilev_)%set(mld_sub_ovr_,izero,info)
thr = 0.16d0
thr = 0.05
scale = 1.0
do ilev_=1,nlev_
call p%precv(ilev_)%set(mld_aggr_thresh_,thr,info)
thr = thr/2
call p%precv(ilev_)%set(mld_aggr_scale_,scale,info)
end do
case default

@ -98,6 +98,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
#if defined(HAVE_MUMPS_)
use mld_z_mumps_solver
#endif
implicit none
! Arguments
@ -154,8 +155,8 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_)
@ -172,8 +173,8 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
case(mld_sub_solve_)
call onelev_set_solver(p%precv(ilev_),val,info)
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
case(mld_smoother_sweeps_,mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,&
& mld_aggr_kind_,mld_smoother_pos_,mld_aggr_omega_alg_,mld_aggr_eig_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_sub_restr_,mld_sub_prol_, &
& mld_sub_ren_,mld_sub_ovr_,mld_sub_fillin_,&
@ -215,7 +216,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set(mld_coarse_mat_,mld_repl_mat_,info)
case(mld_sludist_, mld_mumps_)
case(mld_sludist_,mld_mumps_)
call onelev_set_smoother(p%precv(nlev_),mld_bjac_,info)
call onelev_set_solver(p%precv(nlev_),val,info)
call p%precv(nlev_)%set(mld_coarse_mat_,mld_distr_mat_,info)
@ -284,7 +285,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call onelev_set_smoother(p%precv(ilev_),val,info)
end do
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_kind_,&
case(mld_ml_type_,mld_aggr_alg_,mld_aggr_ord_,mld_aggr_kind_,&
& mld_smoother_sweeps_pre_,mld_smoother_sweeps_post_,&
& mld_smoother_pos_,mld_aggr_omega_alg_,&
& mld_aggr_eig_,mld_aggr_filter_)
@ -308,8 +309,6 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call onelev_set_solver(p%precv(nlev_),mld_umf_,info)
#elif defined(HAVE_SLU_)
call onelev_set_solver(p%precv(nlev_),mld_slu_,info)
#elif defined(HAVE_MUMPS_)
call onelev_set_solver(p%precv(nlev_),mld_mumps_,info)
#else
call onelev_set_solver(p%precv(nlev_),mld_ilu_n_,info)
#endif
@ -782,13 +781,26 @@ subroutine mld_zprecsetsv(p,val,info,ilev)
do ilev_ = ilmin, ilmax
if (allocated(p%precv(ilev_)%sm)) then
if (allocated(p%precv(ilev_)%sm%sv)) &
& deallocate(p%precv(ilev_)%sm%sv)
if (allocated(p%precv(ilev_)%sm%sv)) then
if (.not.same_type_as(p%precv(ilev_)%sm%sv,val)) then
deallocate(p%precv(ilev_)%sm%sv,stat=info)
if (info /= 0) then
info = 3111
return
end if
end if
if (.not.allocated(p%precv(ilev_)%sm%sv)) then
#ifdef HAVE_MOLD
allocate(p%precv(ilev_)%sm%sv,mold=val)
allocate(p%precv(ilev_)%sm%sv,mold=val,stat=info)
#else
allocate(p%precv(ilev_)%sm%sv,source=val)
allocate(p%precv(ilev_)%sm%sv,source=val,stat=info)
#endif
if (info /= 0) then
info = 3111
return
end if
end if
end if
call p%precv(ilev_)%sm%sv%default()
else
info = 3111

@ -98,7 +98,7 @@ module mld_base_prec_type
type mld_ml_parms
integer(psb_ipk_) :: sweeps, sweeps_pre, sweeps_post
integer(psb_ipk_) :: ml_type, smoother_pos
integer(psb_ipk_) :: aggr_alg, aggr_kind
integer(psb_ipk_) :: aggr_alg, aggr_ord, aggr_kind
integer(psb_ipk_) :: aggr_omega_alg, aggr_eig, aggr_filter
integer(psb_ipk_) :: coarse_mat, coarse_solve
logical :: clean_zeros=.true.
@ -151,18 +151,19 @@ module mld_base_prec_type
integer(psb_ipk_), parameter :: mld_smoother_pos_ = 23
integer(psb_ipk_), parameter :: mld_aggr_kind_ = 24
integer(psb_ipk_), parameter :: mld_aggr_alg_ = 25
integer(psb_ipk_), parameter :: mld_aggr_omega_alg_ = 26
integer(psb_ipk_), parameter :: mld_aggr_eig_ = 27
integer(psb_ipk_), parameter :: mld_aggr_filter_ = 28
integer(psb_ipk_), parameter :: mld_coarse_mat_ = 29
integer(psb_ipk_), parameter :: mld_coarse_solve_ = 30
integer(psb_ipk_), parameter :: mld_coarse_sweeps_ = 31
integer(psb_ipk_), parameter :: mld_coarse_fillin_ = 32
integer(psb_ipk_), parameter :: mld_coarse_subsolve_ = 33
integer(psb_ipk_), parameter :: mld_smoother_sweeps_ = 34
integer(psb_ipk_), parameter :: mld_coarse_aggr_size_ = 35
integer(psb_ipk_), parameter :: mld_solver_sweeps_ = 36
integer(psb_ipk_), parameter :: mld_ifpsz_ = 37
integer(psb_ipk_), parameter :: mld_aggr_ord_ = 26
integer(psb_ipk_), parameter :: mld_aggr_omega_alg_ = 27
integer(psb_ipk_), parameter :: mld_aggr_eig_ = 28
integer(psb_ipk_), parameter :: mld_aggr_filter_ = 29
integer(psb_ipk_), parameter :: mld_coarse_mat_ = 30
integer(psb_ipk_), parameter :: mld_coarse_solve_ = 31
integer(psb_ipk_), parameter :: mld_coarse_sweeps_ = 32
integer(psb_ipk_), parameter :: mld_coarse_fillin_ = 33
integer(psb_ipk_), parameter :: mld_coarse_subsolve_ = 34
integer(psb_ipk_), parameter :: mld_smoother_sweeps_ = 35
integer(psb_ipk_), parameter :: mld_coarse_aggr_size_ = 36
integer(psb_ipk_), parameter :: mld_solver_sweeps_ = 37
integer(psb_ipk_), parameter :: mld_ifpsz_ = 38
!
! Legal values for entry: mld_smoother_type_
@ -249,8 +250,13 @@ module mld_base_prec_type
integer(psb_ipk_), parameter :: mld_glb_aggr_=2
integer(psb_ipk_), parameter :: mld_new_dec_aggr_=3
integer(psb_ipk_), parameter :: mld_new_glb_aggr_=4
integer(psb_ipk_), parameter :: mld_max_aggr_alg_=mld_dec_aggr_
integer(psb_ipk_), parameter :: mld_max_aggr_alg_=mld_sym_dec_aggr_
!
! Legal values for entry: mld_aggr_ord_
!
integer(psb_ipk_), parameter :: mld_aggr_ord_nat_ = 0
integer(psb_ipk_), parameter :: mld_aggr_ord_desc_deg_ = 1
integer(psb_ipk_), parameter :: mld_max_aggr_ord_ = mld_aggr_ord_desc_deg_
!
! Legal values for entry: mld_aggr_omega_alg_
!
@ -320,6 +326,8 @@ module mld_base_prec_type
character(len=18), parameter, private :: &
& aggr_names(0:4)=(/'local aggregation ','sym. local aggr. ',&
& 'global aggregation', 'new local aggr. ','new global aggr. '/)
character(len=18), parameter, private :: &
& ord_names(0:1)=(/'Natural ordering ','Desc. degree ord. '/)
character(len=6), parameter, private :: &
& restrict_names(0:4)=(/'none ','halo ',' ',' ',' '/)
character(len=12), parameter, private :: &
@ -411,6 +419,10 @@ contains
val = mld_dec_aggr_
case('SYMDEC')
val = mld_sym_dec_aggr_
case('NAT','NATURAL')
val = mld_aggr_ord_nat_
case('DESC','RDEGREE','DEGREE')
val = mld_aggr_ord_desc_deg_
case('GLB')
val = mld_glb_aggr_
case('REPL')
@ -467,7 +479,7 @@ contains
write(iout,*) 'Sweeps: ',pm%sweeps,pm%sweeps_pre,pm%sweeps_post
write(iout,*) 'ML : ',pm%ml_type,pm%smoother_pos
write(iout,*) 'AGGR : ',pm%aggr_alg,pm%aggr_kind
write(iout,*) 'AGGR : ',pm%aggr_alg,pm%aggr_kind, pm%aggr_ord
write(iout,*) ' : ',pm%aggr_omega_alg,pm%aggr_eig,pm%aggr_filter
write(iout,*) 'COARSE: ',pm%coarse_mat,pm%coarse_solve
end subroutine ml_parms_printout
@ -533,6 +545,8 @@ contains
end if
write(iout,*) ' Aggregation: ', &
& aggr_names(pm%aggr_alg)
write(iout,*) ' with initial ordering: ',&
& ord_names(pm%aggr_ord)
write(iout,*) ' Aggregation type: ', &
& aggr_kinds(pm%aggr_kind)
if (pm%aggr_kind /= mld_no_smooth_) then
@ -720,6 +734,14 @@ contains
is_legal_ml_aggr_alg = ((ip>=mld_dec_aggr_).and.(ip<=mld_max_aggr_alg_))
return
end function is_legal_ml_aggr_alg
function is_legal_ml_aggr_ord(ip)
implicit none
integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_aggr_ord
is_legal_ml_aggr_ord = ((mld_aggr_ord_nat_<=ip).and.(ip<=mld_max_aggr_ord_))
return
end function is_legal_ml_aggr_ord
function is_legal_ml_aggr_omega_alg(ip)
implicit none
integer(psb_ipk_), intent(in) :: ip

@ -109,9 +109,10 @@ module mld_c_inner_mod
end interface mld_coarse_bld
interface mld_aggrmap_bld
subroutine mld_caggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_caggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod, only : psb_cspmat_type, psb_desc_type, psb_spk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_spk_), intent(in) :: theta
type(psb_cspmat_type), intent(in) :: a
@ -123,9 +124,10 @@ module mld_c_inner_mod
interface mld_dec_map_bld
subroutine mld_c_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_c_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod, only : psb_cspmat_type, psb_desc_type, psb_spk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
type(psb_cspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_spk_), intent(in) :: theta

@ -379,6 +379,7 @@ contains
lv%parms%sweeps_post = 1
lv%parms%ml_type = mld_mult_ml_
lv%parms%aggr_alg = mld_dec_aggr_
lv%parms%aggr_ord = mld_aggr_ord_nat_
lv%parms%aggr_kind = mld_smooth_prol_
lv%parms%coarse_mat = mld_distr_mat_
lv%parms%smoother_pos = mld_twoside_smooth_

@ -360,6 +360,7 @@ contains
integer(psb_long_int_k_) :: val
integer(psb_ipk_) :: i
val = 0
return
end function d_base_solver_sizeof

@ -109,9 +109,10 @@ module mld_d_inner_mod
end interface mld_coarse_bld
interface mld_aggrmap_bld
subroutine mld_daggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_daggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod, only : psb_dspmat_type, psb_desc_type, psb_dpk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_dpk_), intent(in) :: theta
type(psb_dspmat_type), intent(in) :: a
@ -123,9 +124,10 @@ module mld_d_inner_mod
interface mld_dec_map_bld
subroutine mld_d_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_d_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod, only : psb_dspmat_type, psb_desc_type, psb_dpk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
type(psb_dspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_dpk_), intent(in) :: theta

@ -341,6 +341,7 @@ contains
class(mld_d_onelev_type), intent(in) :: lv
integer(psb_long_int_k_) :: val
integer(psb_ipk_) :: i
val = 0
val = val + lv%desc_ac%sizeof()
val = val + lv%ac%sizeof()
@ -382,6 +383,7 @@ contains
lv%parms%sweeps_post = 1
lv%parms%ml_type = mld_mult_ml_
lv%parms%aggr_alg = mld_dec_aggr_
lv%parms%aggr_ord = mld_aggr_ord_nat_
lv%parms%aggr_kind = mld_smooth_prol_
lv%parms%coarse_mat = mld_distr_mat_
lv%parms%smoother_pos = mld_twoside_smooth_
@ -390,7 +392,7 @@ contains
lv%parms%aggr_filter = mld_no_filter_mat_
lv%parms%aggr_omega_val = dzero
lv%parms%aggr_thresh = dzero
if (allocated(lv%sm)) call lv%sm%default()
if (allocated(lv%sm2a)) then
call lv%sm2a%default()
@ -412,8 +414,8 @@ contains
! Arguments
class(mld_d_onelev_type), target, intent(inout) :: lv
class(mld_d_onelev_type), target, intent(inout) :: lvout
integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(out) :: info
info = psb_success_
if (allocated(lv%sm)) then
call lv%sm%clone(lvout%sm,info)
@ -450,7 +452,7 @@ contains
implicit none
type(mld_d_onelev_type), target, intent(inout) :: a, b
integer(psb_ipk_), intent(out) :: info
call b%free(info)
b%parms = a%parms
if (associated(a%sm2,a%sm2a)) then

@ -270,7 +270,7 @@ contains
integer(psb_ipk_), optional :: ilev
class(mld_d_base_smoother_type), pointer :: val
integer(psb_ipk_) :: ilev_
val => null()
if (present(ilev)) then
ilev_ = ilev
@ -335,7 +335,6 @@ contains
class(mld_dprec_type), intent(in) :: prec
integer(psb_long_int_k_) :: val
integer(psb_ipk_) :: i
val = 0
val = val + psb_sizeof_int
if (allocated(prec%precv)) then
@ -550,6 +549,7 @@ contains
! Local variables
integer(psb_ipk_) :: me,err_act,i
character(len=20) :: name
if(psb_get_errstatus().ne.0) return
info=psb_success_
name = 'mld_dprecfree'
@ -819,7 +819,7 @@ contains
type(mld_dprec_type), intent(inout), target :: b
integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_) :: i
if (allocated(b%precv)) then
! This might not be required if FINAL procedures are available.
call mld_precfree(b,info)

@ -133,6 +133,7 @@ contains
integer :: ictxt,np,me,i, err_act
character :: trans_
character(len=20) :: name='d_umf_solver_apply'
call psb_erractionsave(err_act)
info = psb_success_
@ -216,7 +217,6 @@ contains
integer :: err_act
character(len=20) :: name='d_umf_solver_apply_vect'
call psb_erractionsave(err_act)
call psb_erractionsave(err_act)
info = psb_success_
@ -257,8 +257,6 @@ contains
integer :: n_row,n_col, nrow_a, nztota
integer :: ictxt,np,me,i, err_act, debug_unit, debug_level
character(len=20) :: name='d_umf_solver_bld', ch_err
call psb_erractionsave(err_act)
info=psb_success_
call psb_erractionsave(err_act)

@ -109,9 +109,10 @@ module mld_s_inner_mod
end interface mld_coarse_bld
interface mld_aggrmap_bld
subroutine mld_saggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_saggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod, only : psb_sspmat_type, psb_desc_type, psb_spk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_spk_), intent(in) :: theta
type(psb_sspmat_type), intent(in) :: a
@ -123,9 +124,10 @@ module mld_s_inner_mod
interface mld_dec_map_bld
subroutine mld_s_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_s_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod, only : psb_sspmat_type, psb_desc_type, psb_spk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
type(psb_sspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_spk_), intent(in) :: theta

@ -379,6 +379,7 @@ contains
lv%parms%sweeps_post = 1
lv%parms%ml_type = mld_mult_ml_
lv%parms%aggr_alg = mld_dec_aggr_
lv%parms%aggr_ord = mld_aggr_ord_nat_
lv%parms%aggr_kind = mld_smooth_prol_
lv%parms%coarse_mat = mld_distr_mat_
lv%parms%smoother_pos = mld_twoside_smooth_

@ -109,9 +109,10 @@ module mld_z_inner_mod
end interface mld_coarse_bld
interface mld_aggrmap_bld
subroutine mld_zaggrmap_bld(aggr_type,theta,a,desc_a,ilaggr,nlaggr,info)
subroutine mld_zaggrmap_bld(aggr_type,iorder,theta,a,desc_a,ilaggr,nlaggr,info)
use psb_base_mod, only : psb_zspmat_type, psb_desc_type, psb_dpk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
integer(psb_ipk_), intent(in) :: aggr_type
real(psb_dpk_), intent(in) :: theta
type(psb_zspmat_type), intent(in) :: a
@ -123,9 +124,10 @@ module mld_z_inner_mod
interface mld_dec_map_bld
subroutine mld_z_dec_map_bld(theta,a,desc_a,nlaggr,ilaggr,info)
subroutine mld_z_dec_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
use psb_base_mod, only : psb_zspmat_type, psb_desc_type, psb_dpk_, psb_ipk_
implicit none
integer(psb_ipk_), intent(in) :: iorder
type(psb_zspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_a
real(psb_dpk_), intent(in) :: theta

@ -379,6 +379,7 @@ contains
lv%parms%sweeps_post = 1
lv%parms%ml_type = mld_mult_ml_
lv%parms%aggr_alg = mld_dec_aggr_
lv%parms%aggr_ord = mld_aggr_ord_nat_
lv%parms%aggr_kind = mld_smooth_prol_
lv%parms%coarse_mat = mld_distr_mat_
lv%parms%smoother_pos = mld_twoside_smooth_

@ -159,6 +159,7 @@ program ppde2d
integer(psb_ipk_) :: nlev ! Number of levels in multilevel prec.
character(len=16) :: aggrkind ! smoothed/raw aggregatin
character(len=16) :: aggr_alg ! local or global aggregation
character(len=16) :: aggr_ord ! Ordering for aggregation
character(len=16) :: mltype ! additive or multiplicative 2nd level prec
character(len=16) :: smthpos ! side: pre, post, both smoothing
integer(psb_ipk_) :: csize ! aggregation size at which to stop.
@ -241,6 +242,7 @@ program ppde2d
call mld_precset(prec,'sub_iluthrs', prectype%thr1, info)
call mld_precset(prec,'aggr_kind', prectype%aggrkind,info)
call mld_precset(prec,'aggr_alg', prectype%aggr_alg,info)
call mld_precset(prec,'aggr_ord', prectype%aggr_ord,info)
call mld_precset(prec,'ml_type', prectype%mltype, info)
call mld_precset(prec,'smoother_pos', prectype%smthpos, info)
if (prectype%athres >= dzero) &
@ -383,6 +385,7 @@ contains
call read_data(prectype%nlev,psb_inp_unit) ! Number of levels in multilevel prec.
call read_data(prectype%aggrkind,psb_inp_unit) ! smoothed/raw aggregatin
call read_data(prectype%aggr_alg,psb_inp_unit) ! local or global aggregation
call read_data(prectype%aggr_ord,psb_inp_unit) ! aggregation ordering
call read_data(prectype%mltype,psb_inp_unit) ! additive or multiplicative 2nd level prec
call read_data(prectype%smthpos,psb_inp_unit) ! side: pre, post, both smoothing
call read_data(prectype%cmat,psb_inp_unit) ! coarse mat
@ -422,6 +425,7 @@ contains
call psb_bcast(ictxt,prectype%nlev) ! Number of levels in multilevel prec.
call psb_bcast(ictxt,prectype%aggrkind) ! smoothed/raw aggregatin
call psb_bcast(ictxt,prectype%aggr_alg) ! local or global aggregation
call psb_bcast(ictxt,prectype%aggr_ord) ! aggregation ordering
call psb_bcast(ictxt,prectype%mltype) ! additive or multiplicative 2nd level prec
call psb_bcast(ictxt,prectype%smthpos) ! side: pre, post, both smoothing
call psb_bcast(ictxt,prectype%cmat) ! coarse mat

@ -171,6 +171,7 @@ program ppde3d
integer(psb_ipk_) :: nlev ! Number of levels in multilevel prec.
character(len=16) :: aggrkind ! smoothed/raw aggregatin
character(len=16) :: aggr_alg ! local or global aggregation
character(len=16) :: aggr_ord ! Ordering for aggregation
character(len=16) :: mltype ! additive or multiplicative 2nd level prec
character(len=16) :: smthpos ! side: pre, post, both smoothing
integer(psb_ipk_) :: csize ! aggregation size at which to stop.
@ -253,6 +254,7 @@ program ppde3d
call mld_precset(prec,'sub_iluthrs', prectype%thr1, info)
call mld_precset(prec,'aggr_kind', prectype%aggrkind,info)
call mld_precset(prec,'aggr_alg', prectype%aggr_alg,info)
call mld_precset(prec,'aggr_ord', prectype%aggr_ord,info)
call mld_precset(prec,'ml_type', prectype%mltype, info)
call mld_precset(prec,'smoother_pos', prectype%smthpos, info)
if (prectype%athres >= dzero) &
@ -396,6 +398,7 @@ contains
call read_data(prectype%nlev,psb_inp_unit) ! Number of levels in multilevel prec.
call read_data(prectype%aggrkind,psb_inp_unit) ! smoothed/raw aggregatin
call read_data(prectype%aggr_alg,psb_inp_unit) ! local or global aggregation
call read_data(prectype%aggr_ord,psb_inp_unit) ! aggregation ordering
call read_data(prectype%mltype,psb_inp_unit) ! additive or multiplicative 2nd level prec
call read_data(prectype%smthpos,psb_inp_unit) ! side: pre, post, both smoothing
call read_data(prectype%cmat,psb_inp_unit) ! coarse mat
@ -435,6 +438,7 @@ contains
call psb_bcast(ictxt,prectype%nlev) ! Number of levels in multilevel prec.
call psb_bcast(ictxt,prectype%aggrkind) ! smoothed/raw aggregatin
call psb_bcast(ictxt,prectype%aggr_alg) ! local or global aggregation
call psb_bcast(ictxt,prectype%aggr_ord) ! aggregation ordering
call psb_bcast(ictxt,prectype%mltype) ! additive or multiplicative 2nd level prec
call psb_bcast(ictxt,prectype%smthpos) ! side: pre, post, both smoothing
call psb_bcast(ictxt,prectype%cmat) ! coarse mat
@ -482,4 +486,3 @@ contains
end subroutine pr_usage
end program ppde3d

@ -7,11 +7,11 @@ CSR ! Storage format CSR COO JAD
30 ! IRST (restart for RGMRES and BiCGSTABL)
1.d-6 ! EPS
3L-MUL-RAS-BJAC4-ILU ! Descriptive name for preconditioner (up to 40 chars)
ML ! Preconditioner NONE JACOBI BJAC AS ML
ML ! Preconditioner NONE JACOBI BJAC AS ML
1 ! Number of overlap layers for AS preconditioner at finest level
HALO ! Restriction operator NONE HALO
NONE ! Prolongation operator NONE SUM AVG
GS ! Subdomain solver DSCALE ILU MILU ILUT UMF SLU
GS ! Subdomain solver DSCALE ILU MILU ILUT UMF SLU
2 ! sweeps for GS
0 ! Level-set N for ILU(N), and P for ILUT
1.d-4 ! Threshold T for ILU(T,P)
@ -20,6 +20,7 @@ BJAC ! Smoother type JACOBI BJAC AS; ignored for non-ML
2 ! Number of levels in a multilevel preconditioner
SMOOTHED ! Kind of aggregation: SMOOTHED, NONSMOOTHED, MINENERGY
DEC ! Type of aggregation DEC SYMDEC GLB
DEGREE ! Ordering of aggregation NATURAL DEGREE
MULT ! Type of multilevel correction: ADD MULT
TWOSIDE ! Side of correction PRE POST TWOSIDE (ignored for ADD)
DIST ! Coarse level: matrix distribution DIST REPL

@ -159,6 +159,7 @@ program spde2d
integer(psb_ipk_) :: nlev ! Number of levels in multilevel prec.
character(len=16) :: aggrkind ! smoothed/raw aggregatin
character(len=16) :: aggr_alg ! local or global aggregation
character(len=16) :: aggr_ord ! Ordering for aggregation
character(len=16) :: mltype ! additive or multiplicative 2nd level prec
character(len=16) :: smthpos ! side: pre, post, both smoothing
integer(psb_ipk_) :: csize ! aggregation size at which to stop.
@ -241,6 +242,7 @@ program spde2d
call mld_precset(prec,'sub_iluthrs', prectype%thr1, info)
call mld_precset(prec,'aggr_kind', prectype%aggrkind,info)
call mld_precset(prec,'aggr_alg', prectype%aggr_alg,info)
call mld_precset(prec,'aggr_ord', prectype%aggr_ord,info)
call mld_precset(prec,'ml_type', prectype%mltype, info)
call mld_precset(prec,'smoother_pos', prectype%smthpos, info)
if (prectype%athres >= dzero) &
@ -384,6 +386,7 @@ contains
call read_data(prectype%nlev,psb_inp_unit) ! Number of levels in multilevel prec.
call read_data(prectype%aggrkind,psb_inp_unit) ! smoothed/raw aggregatin
call read_data(prectype%aggr_alg,psb_inp_unit) ! local or global aggregation
call read_data(prectype%aggr_ord,psb_inp_unit) ! aggregation ordering
call read_data(prectype%mltype,psb_inp_unit) ! additive or multiplicative 2nd level prec
call read_data(prectype%smthpos,psb_inp_unit) ! side: pre, post, both smoothing
call read_data(prectype%cmat,psb_inp_unit) ! coarse mat
@ -423,6 +426,7 @@ contains
call psb_bcast(ictxt,prectype%nlev) ! Number of levels in multilevel prec.
call psb_bcast(ictxt,prectype%aggrkind) ! smoothed/raw aggregatin
call psb_bcast(ictxt,prectype%aggr_alg) ! local or global aggregation
call psb_bcast(ictxt,prectype%aggr_ord) ! aggregation ordering
call psb_bcast(ictxt,prectype%mltype) ! additive or multiplicative 2nd level prec
call psb_bcast(ictxt,prectype%smthpos) ! side: pre, post, both smoothing
call psb_bcast(ictxt,prectype%cmat) ! coarse mat

@ -171,6 +171,7 @@ program spde3d
integer(psb_ipk_) :: nlev ! Number of levels in multilevel prec.
character(len=16) :: aggrkind ! smoothed/raw aggregatin
character(len=16) :: aggr_alg ! local or global aggregation
character(len=16) :: aggr_ord ! Ordering for aggregation
character(len=16) :: mltype ! additive or multiplicative 2nd level prec
character(len=16) :: smthpos ! side: pre, post, both smoothing
integer(psb_ipk_) :: csize ! aggregation size at which to stop.
@ -254,6 +255,7 @@ program spde3d
call mld_precset(prec,'sub_iluthrs', prectype%thr1, info)
call mld_precset(prec,'aggr_kind', prectype%aggrkind,info)
call mld_precset(prec,'aggr_alg', prectype%aggr_alg,info)
call mld_precset(prec,'aggr_ord', prectype%aggr_ord,info)
call mld_precset(prec,'ml_type', prectype%mltype, info)
call mld_precset(prec,'smoother_pos', prectype%smthpos, info)
if (prectype%athres >= dzero) &
@ -397,6 +399,7 @@ contains
call read_data(prectype%nlev,psb_inp_unit) ! Number of levels in multilevel prec.
call read_data(prectype%aggrkind,psb_inp_unit) ! smoothed/raw aggregatin
call read_data(prectype%aggr_alg,psb_inp_unit) ! local or global aggregation
call read_data(prectype%aggr_ord,psb_inp_unit) ! aggregation ordering
call read_data(prectype%mltype,psb_inp_unit) ! additive or multiplicative 2nd level prec
call read_data(prectype%smthpos,psb_inp_unit) ! side: pre, post, both smoothing
call read_data(prectype%cmat,psb_inp_unit) ! coarse mat
@ -436,6 +439,7 @@ contains
call psb_bcast(ictxt,prectype%nlev) ! Number of levels in multilevel prec.
call psb_bcast(ictxt,prectype%aggrkind) ! smoothed/raw aggregatin
call psb_bcast(ictxt,prectype%aggr_alg) ! local or global aggregation
call psb_bcast(ictxt,prectype%aggr_ord) ! aggregation ordering
call psb_bcast(ictxt,prectype%mltype) ! additive or multiplicative 2nd level prec
call psb_bcast(ictxt,prectype%smthpos) ! side: pre, post, both smoothing
call psb_bcast(ictxt,prectype%cmat) ! coarse mat

Loading…
Cancel
Save