Implemented changes to AMG4PSBLAS

documentation
Cirdans-Home 4 years ago
parent 6541e3a95c
commit ea6a260253

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

@ -71,7 +71,7 @@ class="cmr-12">Contributors</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">3 </span><a
href="userhtmlse3.html#x7-60003" id="QQ2-7-7"><span
class="cmr-12">Configuring and Building MLD2P4</span></a></span>
class="cmr-12">Configuring and Building AMG4PSBLAS</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a
@ -179,7 +179,7 @@ class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a
href="userhtmlse7.html#x29-330007" id="QQ2-29-47"><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></a></span>
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">8 </span><a
href="userhtmlse8.html#x30-340008" id="QQ2-30-48"><span

@ -26,6 +26,7 @@
.cmsy-8{font-size:72%;}
.cmex-10x-x-120{font-size:109%;}
.msbm-10x-x-120{font-size:109%;}
.cmbxti-10x-x-120{font-size:109%; font-weight: bold; font-style: italic;}
.cmmi-10x-x-109{font-style: italic;}
.cmsy-10x-x-109{}
.cmex-10x-x-109{}

@ -71,7 +71,7 @@ class="cmr-12">Contributors</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">3 </span><a
href="userhtmlse3.html#x7-60003" id="QQ2-7-7"><span
class="cmr-12">Configuring and Building MLD2P4</span></a></span>
class="cmr-12">Configuring and Building AMG4PSBLAS</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a
@ -179,7 +179,7 @@ class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a
href="userhtmlse7.html#x29-330007" id="QQ2-29-47"><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></a></span>
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">8 </span><a
href="userhtmlse8.html#x30-340008" id="QQ2-30-48"><span

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 800 B

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1023 B

After

Width:  |  Height:  |  Size: 1011 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -30,39 +30,22 @@ class="cmr-12">Abstract</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmcsc-10x-x-120">MLD2P4 (M<span
class="small-caps">u</span><span
class="cmcsc-10x-x-120">AMG4PSBLAS (A<span
class="small-caps">l</span><span
class="small-caps">t</span><span
class="small-caps">i</span>L<span
class="small-caps">e</span><span
class="small-caps">v</span><span
class="small-caps">g</span><span
class="small-caps">e</span><span
class="small-caps">l</span> D<span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">b</span><span
class="small-caps">r</span><span
class="small-caps">a</span><span
class="small-caps">i</span><span
class="small-caps">n</span> D<span
class="small-caps">e</span><span
class="small-caps">c</span><span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">p</span><span
class="small-caps">o</span><span
class="small-caps">s</span><span
class="small-caps">i</span><span
class="small-caps">c</span> M<span
class="small-caps">u</span><span
class="small-caps">l</span><span
class="small-caps">t</span><span
class="small-caps">i</span><span
class="small-caps">o</span><span
class="small-caps">n</span> P<span
class="small-caps">a</span><span
class="small-caps">i</span>G<span
class="small-caps">r</span><span
class="small-caps">a</span><span
class="small-caps">l</span><span
class="small-caps">l</span><span
class="small-caps">e</span><span
class="small-caps">l</span> P<span
class="small-caps">i</span><span
class="small-caps">d</span> P<span
class="small-caps">r</span><span
class="small-caps">e</span><span
class="small-caps">c</span><span
@ -76,9 +59,7 @@ class="small-caps">o</span><span
class="small-caps">n</span><span
class="small-caps">e</span><span
class="small-caps">r</span><span
class="small-caps">s</span></span>
<span
class="cmcsc-10x-x-120">P<span
class="small-caps">s</span> P<span
class="small-caps">a</span><span
class="small-caps">c</span><span
class="small-caps">k</span><span
@ -91,34 +72,54 @@ class="small-caps">s</span><span
class="small-caps">e</span><span
class="small-caps">d</span> <span
class="small-caps">o</span><span
class="small-caps">n</span> PSBLAS</span><span
class="cmr-12">) is a package of parallel algebraic multilevel</span>
class="small-caps">n</span></span>
<span
class="cmcsc-10x-x-120">PSBLAS</span><span
class="cmr-12">) is a package of parallel algebraic multilevel preconditioners included in the</span>
<span
class="cmr-12">PSCToolkit (Parallel Sparse Computation Toolkit) software framework. It is a progress</span>
<span
class="cmr-12">of a software development project started in 2007, named MLD2P4, which</span>
<span
class="cmr-12">implemented a multilevel version of some domain decomposition preconditioners of</span>
<span
class="cmr-12">additive-Schwarz type and was based on a parallel decoupled version of the well known</span>
<span
class="cmr-12">smoothed aggregation method to generate the multilevel hierarchy of coarser</span>
<span
class="cmr-12">matrices. In the last years, within the context of the EU-H2020 EoCoE project</span>
<span
class="cmr-12">(Energy Oriented Center of Excellence), the package was extended including</span>
<span
class="cmr-12">new algorithms and functionalities for setup and application of new AMG</span>
<span
class="cmr-12">preconditioners with the final aims of improving efficiency and scalability when tens of</span>
<span
class="cmr-12">preconditioners. The first release of MLD2P4 made available multilevel additive and</span>
class="cmr-12">thousands cores are used and of boosting reliability in dealing with general</span>
<span
class="cmr-12">hybrid Schwarz preconditioners, as well as one-level additive Schwarz preconditioners.</span>
class="cmr-12">symmetric positive definite linear systems. Due to the significant number</span>
<span
class="cmr-12">The package has been extended to include further multilevel cycles and smoothers</span>
class="cmr-12">of changes and the increase in scope, we decided to rename the package as</span>
<span
class="cmr-12">widely used in multigrid methods. In the multilevel case, a purely algebraic approach is</span>
class="cmr-12">AMG4PSBLAS.</span>
<!--l. 10--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS has been designed to provide scalable and easy-to-use</span>
<span
class="cmr-12">applied to generate coarse-level corrections, so that no geometric background is needed</span>
class="cmr-12">preconditioners in the context of the PSBLAS (Parallel Sparse Basic Linear Algebra</span>
<span
class="cmr-12">concerning the matrix to be preconditioned. The matrix is assumed to be square, real</span>
class="cmr-12">Subprograms) computational framework and can be used in conjuction with the Krylov</span>
<span
class="cmr-12">or complex.</span>
<!--l. 14--><p class="indent" > <span
class="cmr-12">MLD2P4 has been designed to provide scalable and easy-to-use preconditioners in</span>
class="cmr-12">solvers available in this framework. Our package is based on a completely algebraic</span>
<span
class="cmr-12">the context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)</span>
class="cmr-12">approach and users level interfaces assume that the system matrix and preconditioners</span>
<span
class="cmr-12">computational framework and can be used in conjuction with the Krylov solvers</span>
class="cmr-12">are represented as PSBLAS distributed sparse matrices. AMG4PSBLAS enables the</span>
<span
class="cmr-12">available in this framework. MLD2P4 enables the user to easily specify different</span>
class="cmr-12">user to easily specify different features of an algebraic multilevel preconditioner, thus</span>
<span
class="cmr-12">features of an algebraic multilevel preconditioner, thus allowing to search for the &#8220;best&#8221;</span>
class="cmr-12">allowing to experiment with different preconditioners for the problem and parallel</span>
<span
class="cmr-12">preconditioner for the problem at hand.</span>
class="cmr-12">computers at hand.</span>
<!--l. 21--><p class="indent" > <span
class="cmr-12">The package employs object-oriented design techniques in Fortran</span><span
class="cmr-12">&#x00A0;2003, with</span>
@ -136,7 +137,7 @@ class="cmr-12">through PSBLAS.</span>
<!--l. 29--><p class="indent" > <span
class="cmr-12">This guide provides a brief description of the functionalities and the user interface</span>
<span
class="cmr-12">of MLD2P4.</span>
class="cmr-12">of AMG4PSBLAS.</span>

@ -45,7 +45,7 @@ class="cmr-12">Code Distribution</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">3 </span><a
href="userhtmlse3.html#x7-60003"><span
class="cmr-12">Configuring and Building MLD2P4</span></a></span>
class="cmr-12">Configuring and Building AMG4PSBLAS</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a
@ -185,7 +185,7 @@ class="cmr-12">_wrk</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a
href="userhtmlse7.html#x29-330007"><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></a></span>
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">8 </span><a
href="userhtmlse8.html#x30-340008"><span

@ -21,37 +21,15 @@ class="cmr-12">] </span></p></div>
<h4 class="likesubsectionHead"><a
id="x6-50002"></a><span
class="cmr-12">Contributors</span></h4>
<!--l. 24--><p class="noindent" ><span
class="cmr-12">Contributors to version 2:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">Salvatore Filippone, Cranfield University, UK;</span>
class="cmr-12">Pasqua D&#8217;Ambra, IAC-CNR, IT;</span>
</li>
<li class="itemize"><span
class="cmr-12">Pasqua D&#8217;Ambra, IAC-CNR, Naples, IT;</span>
</li>
<li class="itemize"><span
class="cmr-12">Daniela di Serafino, University of Campania &#8220;L. Vanvitelli&#8221;, Caserta, IT;</span>
</li>
<li class="itemize"><span
class="cmr-12">Ambra Abdullahi Hassan, University of Rome &#8220;Tor Vergata&#8221;, IT.</span></li></ul>
<!--l. 31--><p class="noindent" ><span
class="cmr-12">Contributors to version 1:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">Salvatore Filippone;</span>
</li>
<li class="itemize"><span
class="cmr-12">Pasqua D&#8217;Ambra;</span>
</li>
<li class="itemize"><span
class="cmr-12">Daniela di Serafino;</span>
class="cmr-12">Fabio Durastante, University of Pisa and IAC-CNR, IT;</span>
</li>
<li class="itemize"><span
class="cmr-12">Alfredo Buttari, CNRS-IRIT, Toulouse, F.</span></li></ul>
class="cmr-12">Salvatore Filippone, University of Rome Tor-Vergata and IAC-CNR, IT;</span></li></ul>

File diff suppressed because it is too large Load Diff

@ -33,39 +33,22 @@ class="cmr-12">1 </span></span> <a
class="cmr-12">General Overview</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">The </span><span
class="cmcsc-10x-x-120">M<span
class="small-caps">u</span><span
class="cmcsc-10x-x-120">A<span
class="small-caps">l</span><span
class="small-caps">t</span><span
class="small-caps">i</span>L<span
class="small-caps">e</span><span
class="small-caps">v</span><span
class="small-caps">g</span><span
class="small-caps">e</span><span
class="small-caps">l</span> D<span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">b</span><span
class="small-caps">r</span><span
class="small-caps">a</span><span
class="small-caps">i</span><span
class="small-caps">n</span> D<span
class="small-caps">e</span><span
class="small-caps">c</span><span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">p</span><span
class="small-caps">o</span><span
class="small-caps">s</span><span
class="small-caps">i</span><span
class="small-caps">c</span> M<span
class="small-caps">u</span><span
class="small-caps">l</span><span
class="small-caps">t</span><span
class="small-caps">i</span><span
class="small-caps">o</span><span
class="small-caps">n</span> P<span
class="small-caps">a</span><span
class="small-caps">i</span>G<span
class="small-caps">r</span><span
class="small-caps">a</span><span
class="small-caps">l</span><span
class="small-caps">l</span><span
class="small-caps">e</span><span
class="small-caps">l</span> P<span
class="small-caps">i</span><span
class="small-caps">d</span> P<span
class="small-caps">r</span><span
class="small-caps">e</span><span
class="small-caps">c</span><span
@ -79,9 +62,7 @@ class="small-caps">o</span><span
class="small-caps">n</span><span
class="small-caps">e</span><span
class="small-caps">r</span><span
class="small-caps">s</span></span>
<span
class="cmcsc-10x-x-120">P<span
class="small-caps">s</span> P<span
class="small-caps">a</span><span
class="small-caps">c</span><span
class="small-caps">k</span><span
@ -94,25 +75,21 @@ class="small-caps">s</span><span
class="small-caps">e</span><span
class="small-caps">d</span> <span
class="small-caps">o</span><span
class="small-caps">n</span> PSBLAS (MLD2P4</span><span
class="cmr-12">) provides parallel Algebraic MultiGrid</span>
class="small-caps">n</span> PSBLAS</span>
<span
class="cmr-12">(AMG) and Domain Decomposition preconditioners (see, e.g., </span><span class="cite"><span
class="cmcsc-10x-x-120">(AMG4PSBLAS) </span><span
class="cmr-12">provides parallel Algebraic MultiGrid (AMG) preconditioners (see,</span>
<span
class="cmr-12">e.g., </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span
class="cmr-12">3</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XStuben_01"><span
class="cmr-12">24</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xdd2_96"><span
class="cmr-12">22</span></a><span
class="cmr-12">26</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">), to be used</span>
<span
class="cmr-12">in the iterative solution of linear systems,</span>
class="cmr-12">), to be used in the iterative solution of linear systems,</span>
<table
class="equation"><tr><td>
<center class="math-display" >
@ -121,25 +98,19 @@ src="userhtml0x.png" alt="Ax = b,
" class="math-display" ><a
id="x4-3001r1"></a></center></td><td class="equation-label"><span
class="cmr-12">(1)</span></td></tr></table>
<!--l. 12--><p class="nopar" >
<!--l. 11--><p class="nopar" >
<span
class="cmr-12">where </span><span
class="cmmi-12">A </span><span
class="cmr-12">is a square, real or complex, sparse matrix. The name of the package comes</span>
<span
class="cmr-12">from its original implementation, containing multilevel additive and hybrid Schwarz</span>
class="cmr-12">is a square, real or complex, sparse symmetric positive definite (s.p.d)</span>
<span
class="cmr-12">preconditioners, as well as one-level additive Schwarz preconditioners. The current</span>
class="cmr-12">matrix.</span>
<!--l. 19--><p class="indent" > <span
class="cmr-12">The preconditioners implemented in AMG4PSBLAS are obtained by combining 3</span>
<span
class="cmr-12">version extends the original plan by including multilevel cycles and smoothers widely</span>
class="cmr-12">different types of AMG cycles with smoothers and coarsest-level solvers. The V-, W-,</span>
<span
class="cmr-12">used in multigrid methods.</span>
<!--l. 24--><p class="indent" > <span
class="cmr-12">The multilevel preconditioners implemented in MLD2P4 are obtained by</span>
<span
class="cmr-12">combining AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and</span>
<span
class="cmr-12">K-cycles</span><span
class="cmr-12">and a version of a Krylov-type cycle (K-cycle)</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span
@ -147,23 +118,26 @@ class="cmr-12">3</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XNotay2008"><span
class="cmr-12">20</span></a><span
class="cmr-12">22</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">are available, which allow to define almost all the preconditioners in</span>
class="cmr-12">are available, which can be</span>
<span
class="cmr-12">the package, including the multilevel hybrid Schwarz ones; a specific cycle is</span>
class="cmr-12">combined with weighted versions of Jacobi, hybrid forward/backward Gauss-Seidel,</span>
<span
class="cmr-12">implemented to obtain multilevel additive Schwarz preconditioners. The Jacobi,</span>
class="cmr-12">block-Jacobi, and additive Schwarz smoothers. An algebraic approach is used to</span>
<span
class="cmr-12">hybrid forward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz</span>
class="cmr-12">generate a hierarchy of coarse-level matrices and operators, without explicitly using</span>
<span
class="cmr-12">methods are available as smoothers. An algebraic approach is used to generate a</span>
class="cmr-12">any information on the geometry of the original problem, e.g., the discretization of a</span>
<span
class="cmr-12">hierarchy of coarse-level matrices and operators, without explicitly using any</span>
class="cmr-12">PDE. To this end, two different coarsening strategies, based on aggregation, are</span>
<span
class="cmr-12">information on the geometry of the original problem, e.g., the discretization of a</span>
<span
class="cmr-12">PDE. To this end, the smoothed aggregation technique</span><span
class="cmr-12">available:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">a decoupled version of the well known smoothed aggregation procedure</span>
<span
class="cmr-12">proposed in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span
@ -171,39 +145,74 @@ class="cmr-12">2</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">26</span></a><span
class="cmr-12">28</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">, and already included in the previous versions of the</span>
<span
class="cmr-12">package</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XBDDF2007"><span
class="cmr-12">9</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XMLD2P4_TOMS"><span
class="cmr-12">8</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">;</span>
</li>
<li class="itemize"><span
class="cmr-12">the first parallel implementation of a coupled version of Coarsening based</span>
<span
class="cmr-12">on Compatible Weighted Matching introduced in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XDV2013"><span
class="cmr-12">29</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XDFV2018"><span
class="cmr-12">30</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">is applied.</span>
<span
class="cmr-12">Either exact or approximate solvers can be used on the coarsest-level system.</span>
<span
class="cmr-12">Specifically, different sparse LU factorizations from external packages, and</span>
<span
class="cmr-12">native incomplete LU factorizations and Jacobi, hybrid Gauss-Seidel, and</span>
class="cmr-12">and described in</span>
<span
class="cmr-12">details in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XDDF2020"><span
class="cmr-12">10</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">;</span></li></ul>
<!--l. 31--><p class="indent" > <span
class="cmr-12">Either exact or approximate solvers can be used on the coarsest-level system.</span>
<span
class="cmr-12">Specifically, different sparse LU factorizations from external packages, native</span>
<span
class="cmr-12">block-Jacobi solvers are available. All smoothers can be also exploited as one-level</span>
class="cmr-12">incomplete LU factorizations, weighted Jacobi, hybrid Gauss-Seidel, and block-Jacobi</span>
<span
class="cmr-12">solvers are available. All the smoothers can be also exploited as one-level</span>
<span
class="cmr-12">preconditioners.</span>
<!--l. 42--><p class="indent" > <span
class="cmr-12">MLD2P4 is written in Fortran</span><span
<!--l. 36--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS is written in Fortran</span><span
class="cmr-12">&#x00A0;2003, following an object-oriented design</span>
<span
class="cmr-12">through the exploitation of features such as abstract data type creation, type</span>
<span
class="cmr-12">extension, functional overloading, and dynamic memory management. The</span>
class="cmr-12">extension, functional overloading, and dynamic memory management. The parallel</span>
<span
class="cmr-12">parallel implementation is based on a Single Program Multiple Data (SPMD)</span>
class="cmr-12">implementation is based on a Single Program Multiple Data (SPMD) paradigm.</span>
<span
class="cmr-12">paradigm. Single and double precision implementations of MLD2P4 are available</span>
class="cmr-12">Single and double precision implementations of AMG4PSBLAS are available</span>
<span
class="cmr-12">for both the real and the complex case, which can be used through a single</span>
<span
class="cmr-12">interface.</span>
<!--l. 53--><p class="indent" > <span
class="cmr-12">MLD2P4 has been designed to implement scalable and easy-to-use multilevel</span>
<!--l. 46--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS has been designed to implement scalable and easy-to-use multilevel</span>
<span
class="cmr-12">preconditioners in the context of the PSBLAS (Parallel Sparse BLAS) computational</span>
<span
@ -211,39 +220,43 @@ class="cmr-12">framework</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#Xpsblas_00"><span
class="cmr-12">15</span></a><span
class="cmr-12">17</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XPSBLAS3"><span
class="cmr-12">14</span></a><span
class="cmr-12">16</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. PSBLAS provides basic linear algebra operators and data</span>
<span
class="cmr-12">management facilities for distributed sparse matrices, as well as parallel Krylov solvers</span>
<span
class="cmr-12">which can be used with the MLD2P4 preconditioners. The choice of PSBLAS has been</span>
class="cmr-12">which can be used with the AMG4PSBLAS preconditioners. The choice of PSBLAS</span>
<span
class="cmr-12">has been mainly motivated by the need of having a portable and efficient</span>
<span
class="cmr-12">software infrastructure implementing &#8220;de facto&#8221; standard parallel sparse linear</span>
<span
class="cmr-12">mainly motivated by the need of having a portable and efficient software infrastructure</span>
class="cmr-12">algebra kernels, to pursue goals such as performance, portability, modularity</span>
<span
class="cmr-12">implementing &#8220;de facto&#8221; standard parallel sparse linear algebra kernels, to pursue goals</span>
class="cmr-12">ed extensibility in the development of the preconditioner package. On the</span>
<span
class="cmr-12">such as performance, portability, modularity ed extensibility in the development of the</span>
class="cmr-12">other hand, the implementation of AMG4PSBLAS, which was driven by the</span>
<span
class="cmr-12">preconditioner package. On the other hand, the implementation of MLD2P4 has led to</span>
class="cmr-12">need to face the exascale challenge, has led to some important revisions and</span>
<span
class="cmr-12">some revisions and extentions of the original PSBLAS kernels. The inter-process</span>
class="cmr-12">extentions of the PSBLAS infrastructure. The inter-process comunication</span>
<span
class="cmr-12">comunication required by MLD2P4 is encapsulated in the PSBLAS routines; therefore,</span>
class="cmr-12">required by AMG4PSBLAS is encapsulated in the PSBLAS routines; therefore,</span>
<span
class="cmr-12">MLD2P4 can be run on any parallel machine where PSBLAS implementations are</span>
class="cmr-12">AMG4PSBLAS can be run on any parallel machine where PSBLAS implementations</span>
<span
class="cmr-12">available.</span>
<!--l. 70--><p class="indent" > <span
class="cmr-12">MLD2P4 has a layered and modular software architecture where three main layers</span>
class="cmr-12">are available.</span>
<!--l. 61--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS has a layered and modular software architecture where three main</span>
<span
class="cmr-12">can be identified. The lower layer consists of the PSBLAS kernels, the middle one</span>
class="cmr-12">layers can be identified. The lower layer consists of the PSBLAS kernels, the middle</span>
<span
class="cmr-12">implements the construction and application phases of the preconditioners, and the</span>
class="cmr-12">one implements the construction and application phases of the preconditioners, and the</span>
<span
class="cmr-12">upper one provides a uniform interface to all the preconditioners. This architecture</span>
<span
@ -251,7 +264,7 @@ class="cmr-12">allows for different levels of use of the package: few black-box
<span
class="cmr-12">layer allow all users to easily build and apply any preconditioner available in</span>
<span
class="cmr-12">MLD2P4; facilities are also available allowing expert users to extend the set of</span>
class="cmr-12">AMG4PSBLAS; facilities are also available allowing expert users to extend the set of</span>
<span
class="cmr-12">smoothers and solvers for building new versions of the preconditioners (see</span>
<span
@ -260,28 +273,7 @@ class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x29-330007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:adding --></a><span
class="cmr-12">).</span>
<!--l. 81--><p class="indent" > <span
class="cmr-12">We note that the user interface of MLD2P4 2.1 has been extended with respect to</span>
<span
class="cmr-12">the previous versions in order to separate the construction of the multilevel</span>
<span
class="cmr-12">hierarchy from the construction of the smoothers and solvers, and to allow for</span>
<span
class="cmr-12">more flexibility at each level. The software architecture described in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XMLD2P4_TOMS"><span
class="cmr-12">8</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">has</span>
<span
class="cmr-12">significantly evolved too, in order to fully exploit the Fortran</span><span
class="cmr-12">&#x00A0;2003 features</span>
<span
class="cmr-12">implemented in PSBLAS 3. However, compatibility with previous versions has been</span>
<span
class="cmr-12">preserved.</span>
<!--l. 88--><p class="indent" > <span
<!--l. 72--><p class="indent" > <span
class="cmr-12">This guide is organized as follows. General information on the distribution of the</span>
<span
class="cmr-12">source code is reported in Section</span><span
@ -294,47 +286,41 @@ class="cmr-12">of the package are given in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse3.html#x7-60003"><span
class="cmr-12">3</span><!--tex4ht:ref: sec:building --></a><span
class="cmr-12">. A short description of the preconditioners</span>
<span
class="cmr-12">implemented in MLD2P4 is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse4.html#x13-120004"><span
class="cmr-12">4</span><!--tex4ht:ref: sec:background --></a><span
class="cmr-12">, to help the users in choosing among</span>
class="cmr-12">. The basics for building and applying the</span>
<span
class="cmr-12">them. The basics for building and applying the preconditioners with the Krylov solvers</span>
class="cmr-12">preconditioners with the Krylov solvers implemented in PSBLAS are reported</span>
<span
class="cmr-12">implemented in PSBLAS are reported in</span><span
class="cmr-12">in</span><span
class="cmr-12">&#x00A0;Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x17-160005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:started --></a><span
class="cmr-12">, where the Fortran codes of a few</span>
<span
class="cmr-12">sample programs are also shown. A reference guide for the user interface routines is</span>
class="cmr-12">, where the Fortran codes of a few sample programs are also shown.</span>
<span
class="cmr-12">provided in Section</span><span
class="cmr-12">A reference guide for the user interface routines is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">. Information on the extension of the package through the</span>
class="cmr-12">.</span>
<span
class="cmr-12">Information on the extension of the package through the addition of new</span>
<span
class="cmr-12">addition of new smoothers and solvers is reported in Section</span><span
class="cmr-12">smoothers and solvers is reported in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x29-330007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:adding --></a><span
class="cmr-12">. The error handling</span>
class="cmr-12">. The error handling mechanism</span>
<span
class="cmr-12">mechanism used by the package is briefly described in Section</span><span
class="cmr-12">used by the package is briefly described in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a><span
class="cmr-12">. The copyright</span>
class="cmr-12">. The copyright terms</span>
<span
class="cmr-12">terms concerning the distribution and modification of MLD2P4 are reported in</span>
class="cmr-12">concerning the distribution and modification of AMG4PSBLAS are reported in</span>
<span
class="cmr-12">Appendix</span><span
class="cmr-12">&#x00A0;</span><a

@ -32,10 +32,10 @@ class="cmr-12">2 </span></span> <a
id="x5-40002"></a><span
class="cmr-12">Code Distribution</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">MLD2P4 is available from the web site</span>
class="cmr-12">AMG4PSBLAS is available from the web site</span>
<div class="quotation">
<!--l. 8--><p class="indent" > <span
class="cmtt-12">https://github.com/sfilippone/mld2p4-2</span></div>
class="cmtt-12">https://github.com/psctoolkit/amg4psblas</span></div>
<!--l. 10--><p class="noindent" ><span
class="cmr-12">where contact points for further information can be also found.</span>
<!--l. 12--><p class="indent" > <span
@ -54,11 +54,11 @@ class="cmr-12">into account when treating derived works.</span>
class="cmr-12">The library defines a version string with the constant</span>
<center class="math-display" >
<img
src="userhtml1x.png" alt="mld_version_string_
src="userhtml1x.png" alt="amg_version_string_
" class="math-display" ></center>
<!--l. 20--><p class="nopar" > <span
class="cmr-12">whose current value is </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">2.1.0</span></span></span><span
class="cmtt-12">1.0</span></span></span><span
class="cmr-12">.</span>
<!--l. 23--><p class="noindent" >
<div class="likesubsectionTOCS">

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html >
<head><title>Configuring and Building MLD2P4</title>
<head><title>Configuring and Building AMG4PSBLAS</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)">
@ -30,9 +30,9 @@ class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">3 </span></span> <a
id="x7-60003"></a><span
class="cmr-12">Configuring and Building MLD2P4</span></h3>
class="cmr-12">Configuring and Building AMG4PSBLAS</span></h3>
<!--l. 4--><p class="noindent" ><span
class="cmr-12">In order to build MLD2P4 it is necessary to set up a Makefile with appropriate</span>
class="cmr-12">In order to build AMG4PSBLAS it is necessary to set up a Makefile with appropriate</span>
<span
class="cmr-12">system-dependent variables; this is done by means of the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">configure</span></span></span> <span
@ -42,47 +42,49 @@ class="cmr-12">distribution also includes the autoconf and automake sources empl
<span
class="cmr-12">script, but usually this is not needed to build the software.</span>
<!--l. 10--><p class="indent" > <span
class="cmr-12">MLD2P4 is implemented almost entirely in Fortran</span><span
class="cmr-12">&#x00A0;2003, with some interfaces to</span>
class="cmr-12">AMG4PSBLAS is implemented almost entirely in Fortran</span><span
class="cmr-12">&#x00A0;2003, with some</span>
<span
class="cmr-12">external libraries in C; the Fortran compiler must support the Fortran</span><span
class="cmr-12">&#x00A0;2003 standard</span>
class="cmr-12">interfaces to external libraries in C; the Fortran compiler must support the</span>
<span
class="cmr-12">plus the extension </span><span class="obeylines-h"><span class="verb"><span
class="cmr-12">Fortran</span><span
class="cmr-12">&#x00A0;2003 standard plus the extension </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">MOLD=</span></span></span> <span
class="cmr-12">feature, which enhances the usability of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">ALLOCATE</span></span></span><span
class="cmr-12">. Many</span>
class="cmr-12">feature, which enhances the usability</span>
<span
class="cmr-12">compilers do this; in particular, this is supported by the GNU Fortran compiler, for</span>
class="cmr-12">of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">ALLOCATE</span></span></span><span
class="cmr-12">. Many compilers do this; in particular, this is supported by the GNU</span>
<span
class="cmr-12">which we recommend to use at least version 4.8. The software defines data</span>
class="cmr-12">Fortran compiler, for which we recommend to use at least version 4.8. The software</span>
<span
class="cmr-12">types and interfaces for real and complex data, in both single and double</span>
class="cmr-12">defines data types and interfaces for real and complex data, in both single and double</span>
<span
class="cmr-12">precision.</span>
<!--l. 20--><p class="indent" > <span
class="cmr-12">Building MLD2P4 requires some base libraries (see Section</span><span
class="cmr-12">Building AMG4PSBLAS requires some base libraries (see Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu1.html#x8-70003.1"><span
class="cmr-12">3.1</span><!--tex4ht:ref: sec:prerequisites --></a><span
class="cmr-12">); interfaces to</span>
<span
class="cmr-12">optional third-party libraries, which extend the functionalities of MLD2P4 (see</span>
class="cmr-12">optional third-party libraries, which extend the functionalities of AMG4PSBLAS</span>
<span
class="cmr-12">Section</span><span
class="cmr-12">(see Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu2.html#x9-80003.2"><span
class="cmr-12">3.2</span><!--tex4ht:ref: sec:third-party --></a><span
class="cmr-12">), are also available. Many Linux distributions (e.g., Ubuntu, Fedora,</span>
class="cmr-12">), are also available. Many Linux distributions (e.g., Ubuntu,</span>
<span
class="cmr-12">CentOS) provide precompiled packages for the prerequisite and optional software. In</span>
class="cmr-12">Fedora, CentOS) provide precompiled packages for the prerequisite and optional</span>
<span
class="cmr-12">many cases these packages are split between a runtime part and a &#8220;developer&#8221; part; in</span>
class="cmr-12">software. In many cases these packages are split between a runtime part and a</span>
<span
class="cmr-12">order to build MLD2P4 you need both. A description of the base and optional software</span>
class="cmr-12">&#8220;developer&#8221; part; in order to build AMG4PSBLAS you need both. A description of</span>
<span
class="cmr-12">used by MLD2P4 is given in the next sections.</span>
class="cmr-12">the base and optional software used by AMG4PSBLAS is given in the next</span>
<span
class="cmr-12">sections.</span>
<!--l. 28--><p class="noindent" >
<div class="subsectionTOCS">
<span
@ -115,22 +117,22 @@ class="cmr-12">Example and test programs</span></a></span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse4.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse2.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse2.html#tailuserhtmlse2.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse3.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlse3.html"></a>
</body></html>

@ -11,188 +11,199 @@
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse5.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#tailuserhtmlse3.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlse4.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse4.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">4 </span></span> <a
class="cmbx-12">4 </span></span> <a
id="x13-120004"></a><span
class="cmr-12">Multigrid Background</span></h3>
class="cmbx-12">Multigrid Background</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the</span>
class="cmbx-12">Multigrid preconditioners, coupled with Krylov iterative solvers, are widely</span>
<span
class="cmr-12">parallel solution of large and sparse linear systems, because of their optimality in the</span>
class="cmbx-12">used in the parallel solution of large and sparse linear systems, because of</span>
<span
class="cmr-12">solution of linear systems arising from the discretization of scalar elliptic Partial</span>
class="cmbx-12">their optimality in the solution of linear systems arising from the</span>
<span
class="cmr-12">Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic</span>
class="cmbx-12">discretization of scalar elliptic Partial Differential Equations (PDEs) on</span>
<span
class="cmr-12">scalability, is the property of having a computational cost per iteration that depends</span>
class="cmbx-12">regular grids. Optimality, also known as algorithmic scalability, is the</span>
<span
class="cmr-12">linearly on the problem size, and a convergence rate that is independent of the problem</span>
class="cmbx-12">property of having a computational cost per iteration that depends linearly</span>
<span
class="cmr-12">size.</span>
class="cmbx-12">on the problem size, and a convergence rate that is independent of the</span>
<span
class="cmbx-12">problem size.</span>
<!--l. 13--><p class="indent" > <span
class="cmr-12">Multigrid preconditioners are based on a recursive application of a two-grid process</span>
class="cmbx-12">Multigrid preconditioners are based on a recursive application of a</span>
<span
class="cmbx-12">two-grid process consisting of smoother iterations and a coarse-space (or</span>
<span
class="cmbx-12">coarse-level) correction. The smoothers may be either basic iterative</span>
<span
class="cmr-12">consisting of smoother iterations and a coarse-space (or coarse-level) correction. The</span>
class="cmbx-12">methods, such as the Jacobi and Gauss-Seidel ones, or more complex</span>
<span
class="cmr-12">smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel</span>
class="cmbx-12">subspace-correction methods, such as the Schwarz ones. The coarse-space</span>
<span
class="cmr-12">ones, or more complex subspace-correction methods, such as the Schwarz ones. The</span>
class="cmbx-12">correction consists of solving, in an appropriately chosen coarse space, the</span>
<span
class="cmr-12">coarse-space correction consists of solving, in an appropriately chosen coarse space, the</span>
class="cmbx-12">residual equation associated with the approximate solution computed by</span>
<span
class="cmr-12">residual equation associated with the approximate solution computed by the</span>
class="cmbx-12">the smoother, and of using the solution of this equation to correct the</span>
<span
class="cmr-12">smoother, and of using the solution of this equation to correct the previous</span>
class="cmbx-12">previous approximation. The transfer of information between the original</span>
<span
class="cmr-12">approximation. The transfer of information between the original (fine) space and</span>
class="cmbx-12">(fine) space and the coarse one is performed by using suitable restriction</span>
<span
class="cmr-12">the coarse one is performed by using suitable restriction and prolongation</span>
class="cmbx-12">and prolongation operators. The construction of the coarse space and the</span>
<span
class="cmr-12">operators. The construction of the coarse space and the corresponding transfer</span>
class="cmbx-12">corresponding transfer operators is carried out by applying a so-called</span>
<span
class="cmr-12">operators is carried out by applying a so-called coarsening algorithm to the</span>
class="cmbx-12">coarsening algorithm to the system matrix. Two main approaches</span>
<span
class="cmr-12">system matrix. Two main approaches can be used to perform coarsening:</span>
class="cmbx-12">can be used to perform coarsening: the geometric approach, which</span>
<span
class="cmr-12">the geometric approach, which exploits the knowledge of some physical grid</span>
class="cmbx-12">exploits the knowledge of some physical grid associated with the</span>
<span
class="cmr-12">associated with the matrix and requires the user to define transfer operators</span>
class="cmbx-12">matrix and requires the user to define transfer operators from the</span>
<span
class="cmr-12">from the fine to the coarse level and vice versa, and the algebraic approach,</span>
class="cmbx-12">fine to the coarse level and vice versa, and the algebraic approach,</span>
<span
class="cmr-12">which builds the coarse-space correction and the associate transfer operators</span>
class="cmbx-12">which builds the coarse-space correction and the associate transfer</span>
<span
class="cmr-12">using only matrix information. The first approach may be difficult when the</span>
class="cmbx-12">operators using only matrix information. The first approach may be</span>
<span
class="cmr-12">system comes from discretizations on complex geometries; furthermore, ad hoc</span>
class="cmbx-12">difficult when the system comes from discretizations on complex</span>
<span
class="cmr-12">one-level smoothers may be required to get an efficient interplay between</span>
class="cmbx-12">geometries; furthermore, ad hoc one-level smoothers may be required to</span>
<span
class="cmr-12">fine and coarse levels, e.g., when matrices with highly varying coefficients are</span>
class="cmbx-12">get an efficient interplay between fine and coarse levels, e.g., when</span>
<span
class="cmr-12">considered. The second approach performs a fully automatic coarsening and</span>
class="cmbx-12">matrices with highly varying coefficients are considered. The second</span>
<span
class="cmr-12">enforces the interplay between fine and coarse level by suitably choosing the</span>
class="cmbx-12">approach performs a fully automatic coarsening and enforces the</span>
<span
class="cmr-12">coarse space and the coarse-to-fine interpolation (see, e.g., </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">interplay between fine and coarse level by suitably choosing the coarse</span>
<span
class="cmbx-12">space and the coarse-to-fine interpolation (see, e.g., </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span
class="cmr-12">3</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">3</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#XStuben_01"><span
class="cmr-12">24</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">26</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#Xdd2_96"><span
class="cmr-12">22</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">for</span>
class="cmbx-12">24</span></a><span
class="cmbx-12">]</span></span> <span
class="cmbx-12">for</span>
<span
class="cmr-12">details.)</span>
class="cmbx-12">details.)</span>
<!--l. 37--><p class="indent" > <span
class="cmr-12">MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation</span>
class="cmbx-12">MLD2P4 uses a pure algebraic approach, based on the smoothed</span>
<span
class="cmr-12">algorithm </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">aggregation algorithm </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span
class="cmr-12">2</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">2</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">26</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">, for building the sequence of coarse matrices and transfer</span>
class="cmbx-12">28</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">, for building the sequence of coarse matrices</span>
<span
class="cmr-12">operators, starting from the original one. A decoupled version of this algorithm</span>
class="cmbx-12">and transfer operators, starting from the original one. A decoupled version</span>
<span
class="cmr-12">is implemented, where the smoothed aggregation is applied locally to each</span>
class="cmbx-12">of this algorithm is implemented, where the smoothed aggregation is</span>
<span
class="cmr-12">submatrix </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">applied locally to each submatrix </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XTUMINARO_TONG"><span
class="cmr-12">25</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. A brief description of the AMG preconditioners implemented in</span>
class="cmbx-12">27</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">. A brief description of the AMG</span>
<span
class="cmr-12">MLD2P4 is given in Sections</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">preconditioners implemented in MLD2P4 is given in Sections</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu6.html#x14-130004.1"><span
class="cmr-12">4.1</span><!--tex4ht:ref: sec:multilevel --></a><span
class="cmr-12">-</span><a
class="cmbx-12">4.1</span><!--tex4ht:ref: sec:multilevel --></a><span
class="cmbx-12">-</span><a
href="userhtmlsu8.html#x16-150004.3"><span
class="cmr-12">4.3</span><!--tex4ht:ref: sec:smoothers --></a><span
class="cmr-12">. For further details the reader is referred to</span>
<span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">4.3</span><!--tex4ht:ref: sec:smoothers --></a><span
class="cmbx-12">. For</span>
<span
class="cmbx-12">further details the reader is referred to </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#Xpara_04"><span
class="cmr-12">4</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">4</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#Xaaecc_07"><span
class="cmr-12">5</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">5</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#Xapnum_07"><span
class="cmr-12">7</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">7</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#XMLD2P4_TOMS"><span
class="cmr-12">8</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
class="cmbx-12">8</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span>
<!--l. 47--><p class="indent" > <span
class="cmr-12">We note that optimal multigrid preconditioners do not necessarily correspond to</span>
class="cmbx-12">We note that optimal multigrid preconditioners do not necessarily</span>
<span
class="cmbx-12">correspond to minimum execution times in a parallel setting. Indeed, to</span>
<span
class="cmr-12">minimum execution times in a parallel setting. Indeed, to obtain effective parallel</span>
class="cmbx-12">obtain effective parallel multigrid preconditioners, a tradeoff between the</span>
<span
class="cmr-12">multigrid preconditioners, a tradeoff between the optimality and the cost of</span>
class="cmbx-12">optimality and the cost of building and applying the smoothers and</span>
<span
class="cmr-12">building and applying the smoothers and the coarse-space corrections must be</span>
class="cmbx-12">the coarse-space corrections must be achieved. Effective parallel</span>
<span
class="cmr-12">achieved. Effective parallel preconditioners require algorithmic scalability to</span>
class="cmbx-12">preconditioners require algorithmic scalability to be coupled with</span>
<span
class="cmr-12">be coupled with implementation scalability, i.e., a computational cost per</span>
class="cmbx-12">implementation scalability, i.e., a computational cost per iteration</span>
<span
class="cmr-12">iteration which remains (almost) constant as the number of parallel processors</span>
class="cmbx-12">which remains (almost) constant as the number of parallel processors</span>
<span
class="cmr-12">increases.</span>
class="cmbx-12">increases.</span>
<!--l. 56--><p class="noindent" >
<div class="subsectionTOCS">
<span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">4.1 </span><a
href="userhtmlsu6.html#x14-130004.1"><span
class="cmr-12">AMG preconditioners</span></a></span>
class="cmbx-12">AMG preconditioners</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">4.2 </span><a
href="userhtmlsu7.html#x15-140004.2"><span
class="cmr-12">Smoothed Aggregation</span></a></span>
class="cmbx-12">Smoothed Aggregation</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.3 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">4.3 </span><a
href="userhtmlsu8.html#x16-150004.3"><span
class="cmr-12">Smoothers and coarsest-level solvers</span></a></span>
class="cmbx-12">Smoothers and coarsest-level solvers</span></a></span>
</div>
@ -200,22 +211,22 @@ class="cmr-12">Smoothers and coarsest-level solvers</span></a></span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse5.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#tailuserhtmlse3.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse4.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlse4.html"></a>
</body></html>

@ -11,215 +11,227 @@
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse6.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#tailuserhtmlse4.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlse5.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse5.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">5 </span></span> <a
class="cmbx-12">5 </span></span> <a
id="x17-160005"></a><span
class="cmr-12">Getting Started</span></h3>
class="cmbx-12">Getting Started</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">We describe the basics for building and applying MLD2P4 one-level and multilevel</span>
class="cmbx-12">We describe the basics for building and applying AMG4PSBLAS one-level</span>
<span
class="cmr-12">(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. The</span>
class="cmbx-12">and multilevel (i.e., AMG) preconditioners with the Krylov solvers included</span>
<span
class="cmr-12">following steps are required:</span>
class="cmbx-12">in PSBLAS </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">. The following steps are required:</span>
<ol class="enumerate1" >
<li
class="enumerate" id="x17-16002x1"><span
class="cmti-12">Declare the preconditioner data structure</span><span
class="cmr-12">. It is a derived data type,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">Declare the preconditioner data structure</span><span
class="cmbx-12">. It is a derived data</span>
<span
class="cmbx-12">type, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_</span></span></span><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">prec_</span></span></span> <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type</span></span></span><span
class="cmr-12">, where </span><span
class="cmti-12">x </span><span
class="cmr-12">may be </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, where </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">may be </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">or </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">or </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span><span
class="cmr-12">, according to the basic</span>
class="cmbx-12">, according to the</span>
<span
class="cmr-12">data type of the sparse matrix (</span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">basic data type of the sparse matrix (</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span> <span
class="cmr-12">= real single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">= real single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span> <span
class="cmr-12">= real double</span>
class="cmbx-12">=</span>
<span
class="cmr-12">precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">real double precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">= complex single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">= complex single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmr-12">= complex double precision). This</span>
class="cmbx-12">= complex</span>
<span
class="cmr-12">data structure is accessed by the user only through the MLD2P4 routines,</span>
class="cmbx-12">double precision). This data structure is accessed by the user only</span>
<span
class="cmr-12">following an object-oriented approach.</span>
class="cmbx-12">through the AMG4PSBLAS routines, following an object-oriented</span>
<span
class="cmbx-12">approach.</span>
</li>
<li
class="enumerate" id="x17-16004x2"><span
class="cmti-12">Allocate and initialize the preconditioner data structure, according to a</span>
class="cmbxti-10x-x-120">Allocate and initialize the preconditioner data structure,</span>
<span
class="cmbxti-10x-x-120">according to a preconditioner type chosen by the user</span><span
class="cmbx-12">. This is</span>
<span
class="cmti-12">preconditioner type chosen by the user</span><span
class="cmr-12">. This is performed by the routine</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span><span
class="cmr-12">, which also sets defaults for each preconditioner type selected by</span>
class="cmbx-12">, which also sets defaults for each</span>
<span
class="cmr-12">the user. The preconditioner types and the defaults associated with them</span>
class="cmbx-12">preconditioner type selected by the user. The preconditioner types</span>
<span
class="cmr-12">are given in Table</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">and the defaults associated with them are given in Table</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x17-160151"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">, where the strings used by </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmbx-12">, where</span>
<span
class="cmbx-12">the strings used by </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span> <span
class="cmr-12">to identify the</span>
class="cmbx-12">to identify the preconditioner types are</span>
<span
class="cmr-12">preconditioner types are also given. Note that these strings are valid also if</span>
class="cmbx-12">also given. Note that these strings are valid also if uppercase letters</span>
<span
class="cmr-12">uppercase letters are substituted by corresponding lowercase ones.</span>
class="cmbx-12">are substituted by corresponding lowercase ones.</span>
</li>
<li
class="enumerate" id="x17-16006x3"><span
class="cmti-12">Modify the selected preconditioner type, by properly setting preconditioner</span>
class="cmbxti-10x-x-120">Modify the selected preconditioner type, by properly setting</span>
<span
class="cmti-12">parameters. </span><span
class="cmr-12">This is performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">preconditioner parameters. </span><span
class="cmbx-12">This is performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">. This routine must be</span>
class="cmbx-12">.</span>
<span
class="cmr-12">called only if the user wants to modify the default values of the parameters</span>
class="cmbx-12">This routine must be called only if the user wants to modify</span>
<span
class="cmr-12">associated with the selected preconditioner type, to obtain a variant of that</span>
class="cmbx-12">the default values of the parameters associated with the selected</span>
<span
class="cmr-12">preconditioner. Examples of use of </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">preconditioner type, to obtain a variant of that preconditioner.</span>
<span
class="cmbx-12">Examples of use of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">are given in Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">are given in Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu9.html#x18-170005.1"><span
class="cmr-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">; a complete</span>
class="cmbx-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmbx-12">; a complete list</span>
<span
class="cmr-12">list of all the preconditioner parameters and their allowed and default values</span>
class="cmbx-12">of all the preconditioner parameters and their allowed and default</span>
<span
class="cmr-12">is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">values is provided in Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">, Tables</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmbx-12">, Tables</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200092"><span
class="cmr-12">2</span><!--tex4ht:ref: tab:p_cycle --></a><span
class="cmr-12">-</span><a
class="cmbx-12">2</span><!--tex4ht:ref: tab:p_cycle --></a><span
class="cmbx-12">-</span><a
href="userhtmlsu11.html#x21-200158"><span
class="cmr-12">8</span><!--tex4ht:ref: tab:p_smoother_1 --></a><span
class="cmr-12">.</span>
class="cmbx-12">8</span><!--tex4ht:ref: tab:p_smoother_1 --></a><span
class="cmbx-12">.</span>
</li>
<li
class="enumerate" id="x17-16008x4"><span
class="cmti-12">Build the preconditioner for a given matrix</span><span
class="cmr-12">. If the selected preconditioner is</span>
class="cmbxti-10x-x-120">Build the preconditioner for a given matrix</span><span
class="cmbx-12">. If the selected</span>
<span
class="cmbx-12">preconditioner is multilevel, then two steps must be performed, as</span>
<span
class="cmr-12">multilevel, then two steps must be performed, as specified next.</span>
class="cmbx-12">specified next.</span>
<ol class="enumerate2" >
<li
class="enumerate" id="x17-16009x0"><span
class="cmti-12">Build the aggregation hierarchy for a given matrix. </span><span
class="cmr-12">This is performed</span>
class="cmbxti-10x-x-120">Build the aggregation hierarchy for a given matrix. </span><span
class="cmbx-12">This is</span>
<span
class="cmr-12">by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span><span
class="cmr-12">.</span>
class="cmbx-12">.</span>
</li>
<li
class="enumerate" id="x17-16010x0"><span
class="cmti-12">Build the preconditioner for a given matrix. </span><span
class="cmr-12">This is performed by the</span>
class="cmbxti-10x-x-120">Build the preconditioner for a given matrix. </span><span
class="cmbx-12">This is</span>
<span
class="cmr-12">routine </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span><span
class="cmr-12">.</span></li></ol>
<!--l. 48--><p class="noindent" ><span
class="cmr-12">If the selected preconditioner is one-level, it is built in a single step, performed by</span>
class="cmbx-12">.</span></li></ol>
<!--l. 41--><p class="noindent" ><span
class="cmbx-12">If the selected preconditioner is one-level, it is built in a single step,</span>
<span
class="cmr-12">the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">bld</span></span></span><span
class="cmr-12">.</span>
class="cmbx-12">.</span>
</li>
<li
class="enumerate" id="x17-16012x5"><span
class="cmti-12">Apply the preconditioner at each iteration of a Krylov solver. </span><span
class="cmr-12">This is performed by</span>
class="cmbxti-10x-x-120">Apply the preconditioner at each iteration of a Krylov solver. </span><span
class="cmbx-12">This is</span>
<span
class="cmr-12">the method </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">performed by the method </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span><span
class="cmr-12">. When using the PSBLAS Krylov solvers, this step is</span>
class="cmbx-12">. When using the PSBLAS Krylov</span>
<span
class="cmr-12">completely transparent to the user, since </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">solvers, this step is completely transparent to the user, since </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span> <span
class="cmr-12">is called by the PSBLAS routine</span>
class="cmbx-12">is</span>
<span
class="cmbx-12">called by the PSBLAS routine implementing the Krylov solver</span>
<span
class="cmr-12">implementing the Krylov solver (</span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">(</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov</span></span></span><span
class="cmr-12">).</span>
class="cmbx-12">).</span>
</li>
<li
class="enumerate" id="x17-16014x6"><span
class="cmti-12">Free the preconditioner data structure</span><span
class="cmr-12">. This is performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">free</span></span></span><span
class="cmr-12">.</span>
class="cmbxti-10x-x-120">Free the preconditioner data structure</span><span
class="cmbx-12">. This is performed by the</span>
<span
class="cmr-12">This step is complementary to step 1 and should be performed when the</span>
class="cmbx-12">routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">free</span></span></span><span
class="cmbx-12">. This step is complementary to step 1 and should be</span>
<span
class="cmr-12">preconditioner is no more used.</span></li></ol>
<!--l. 59--><p class="indent" > <span
class="cmr-12">All the previous routines are available as methods of the preconditioner object. A</span>
class="cmbx-12">performed when the preconditioner is no more used.</span></li></ol>
<!--l. 52--><p class="indent" > <span
class="cmbx-12">All the previous routines are available as methods of the preconditioner</span>
<span
class="cmr-12">detailed description of them is given in Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">object. A detailed description of them is given in Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">. Examples showing the basic use of</span>
class="cmbx-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmbx-12">. Examples</span>
<span
class="cmr-12">MLD2P4 are reported in Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">showing the basic use of AMG4PSBLAS are reported in Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu9.html#x18-170005.1"><span
class="cmr-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">.</span>
class="cmbx-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmbx-12">.</span>
<div class="table">
<!--l. 63--><p class="indent" > <a
<!--l. 56--><p class="indent" > <a
id="x17-160151"></a><hr class="float"><div class="float"
>
@ -227,7 +239,7 @@ class="cmr-12">.</span>
<div class="center"
>
<!--l. 64--><p class="noindent" >
<!--l. 57--><p class="noindent" >
<div class="tabular"> <table id="TBL-1" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-1-1g"><col
@ -242,7 +254,7 @@ class="small-caps">t</span><span
class="small-caps">y</span><span
class="small-caps">p</span><span
class="small-caps">e</span> </span></td><td style="white-space:wrap; text-align:left;" id="TBL-1-1-2"
class="td11"><!--l. 68--><p class="noindent" ><span
class="td11"><!--l. 61--><p class="noindent" ><span
class="cmcsc-10x-x-109"><span
class="small-caps">s</span><span
class="small-caps">t</span><span
@ -250,7 +262,7 @@ class="small-caps">r</span><span
class="small-caps">i</span><span
class="small-caps">n</span><span
class="small-caps">g</span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-1-3"
class="td11"><!--l. 68--><p class="noindent" ><span
class="td11"><!--l. 61--><p class="noindent" ><span
class="cmcsc-10x-x-109"><span
class="small-caps">d</span><span
class="small-caps">e</span><span
@ -276,19 +288,19 @@ class="small-caps">r</span></span> </td></tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-2-1"
class="td11">No preconditioner </td><td style="white-space:wrap; text-align:left;" id="TBL-1-2-2"
class="td11"><!--l. 69--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 62--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;NONE&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-2-3"
class="td11"><!--l. 69--><p class="noindent" >Considered to use the PSBLAS Krylov solvers
class="td11"><!--l. 62--><p class="noindent" >Considered to use the PSBLAS Krylov solvers
with no preconditioner. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-3-1"
class="td11">Diagonal </td><td style="white-space:wrap; text-align:left;" id="TBL-1-3-2"
class="td11"><!--l. 71--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 64--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;DIAG&#8217;</span></span></span> or
<span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;JACOBI&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-3-3"
class="td11"><!--l. 71--><p class="noindent" >Diagonal preconditioner. For any zero diagonal
class="td11"><!--l. 64--><p class="noindent" >Diagonal preconditioner. For any zero diagonal
entry of the matrix to be preconditioned, the
corresponding entry of the preconditioner is set
to&#x00A0;1. </td>
@ -296,41 +308,41 @@ to&#x00A0;1. </td>
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-4-1"
class="td11">Gauss-Seidel </td><td style="white-space:wrap; text-align:left;" id="TBL-1-4-2"
class="td11"><!--l. 74--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 67--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;GS&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-4-3"
class="td11"><!--l. 74--><p class="noindent" >Hybrid Gauss-Seidel (forward), that is, global
class="td11"><!--l. 67--><p class="noindent" >Hybrid Gauss-Seidel (forward), that is, global
block Jacobi with Gauss-Seidel as local solver. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-5-1"
class="td11">Symmetrized Gauss-Seidel</td><td style="white-space:wrap; text-align:left;" id="TBL-1-5-2"
class="td11"><!--l. 77--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 70--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;FBGS&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-5-3"
class="td11"><!--l. 77--><p class="noindent" >Symmetrized
class="td11"><!--l. 70--><p class="noindent" >Symmetrized
hybrid Gauss-Seidel,that is, forward Gauss-Seidel
followed by backward Gauss-Seidel. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-6-1"
class="td11">Block Jacobi </td><td style="white-space:wrap; text-align:left;" id="TBL-1-6-2"
class="td11"><!--l. 80--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 73--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;BJAC&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-6-3"
class="td11"><!--l. 80--><p class="noindent" >Block-Jacobi with ILU(0) on the local blocks. </td>
class="td11"><!--l. 73--><p class="noindent" >Block-Jacobi with ILU(0) on the local blocks. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-7-1"
class="td11">Additive Schwarz </td><td style="white-space:wrap; text-align:left;" id="TBL-1-7-2"
class="td11"><!--l. 81--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 74--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;AS&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-7-3"
class="td11"><!--l. 81--><p class="noindent" >Additive Schwarz (AS), with overlap&#x00A0;1 and
class="td11"><!--l. 74--><p class="noindent" >Additive Schwarz (AS), with overlap&#x00A0;1 and
ILU(0) on the local blocks. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-8-1"
class="td11">Multilevel </td><td style="white-space:wrap; text-align:left;" id="TBL-1-8-2"
class="td11"><!--l. 83--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 76--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;ML&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-8-3"
class="td11"><!--l. 83--><p class="noindent" >V-cycle with one hybrid forward Gauss-Seidel
class="td11"><!--l. 76--><p class="noindent" >V-cycle with one hybrid forward Gauss-Seidel
(GS) sweep as pre-smoother and one hybrid
backward GS sweep as post-smoother, basic
smoothed aggregation as coarsening algorithm,
@ -352,68 +364,73 @@ class="content">Preconditioner types, corresponding strings and default choices.
</div><hr class="endfloat" />
</div>
<!--l. 98--><p class="indent" > <span
class="cmr-12">Note that the module </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_prec_mod</span></span></span><span
class="cmr-12">, containing the definition of the preconditioner</span>
<!--l. 91--><p class="indent" > <span
class="cmbx-12">Note that the module </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_prec_mod</span></span></span><span
class="cmbx-12">, containing the definition of</span>
<span
class="cmbx-12">the preconditioner data type and the interfaces to the routines of</span>
<span
class="cmr-12">data type and the interfaces to the routines of MLD2P4, must be used in any program</span>
class="cmbx-12">AMG4PSBLAS, must be used in any program calling such routines. The</span>
<span
class="cmr-12">calling such routines. The modules </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">modules </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_base_mod</span></span></span><span
class="cmr-12">, for the sparse matrix and</span>
class="cmbx-12">, for the sparse matrix and communication descriptor</span>
<span
class="cmr-12">communication descriptor data types, and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">data types, and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov_mod</span></span></span><span
class="cmr-12">, for interfacing with the</span>
class="cmbx-12">, for interfacing with the Krylov solvers,</span>
<span
class="cmr-12">Krylov solvers, must be also used (see Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">must be also used (see Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu9.html#x18-170005.1"><span
class="cmr-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">). </span><br
class="cmbx-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmbx-12">). </span><br
class="newline" />
<!--l. 105--><p class="indent" > <span
class="cmbx-12">Remark 1. </span><span
class="cmr-12">Coarsest-level solvers based on the LU factorization, such as those</span>
<!--l. 98--><p class="indent" > <span
class="cmbx-12">Remark 1. Coarsest-level solvers based on the LU factorization, such as</span>
<span
class="cmbx-12">those implemented in UMFPACK, MUMPS, SuperLU, and SuperLU</span><span
class="cmbx-12">_Dist,</span>
<span
class="cmr-12">implemented in UMFPACK, MUMPS, SuperLU, and SuperLU</span><span
class="cmr-12">_Dist, usually lead to</span>
class="cmbx-12">usually lead to smaller numbers of preconditioned Krylov iterations</span>
<span
class="cmr-12">smaller numbers of preconditioned Krylov iterations than inexact solvers, when the</span>
class="cmbx-12">than inexact solvers, when the linear system comes from a standard</span>
<span
class="cmr-12">linear system comes from a standard discretization of basic scalar elliptic PDE</span>
class="cmbx-12">discretization of basic scalar elliptic PDE problems. However, this does not</span>
<span
class="cmr-12">problems. However, this does not necessarily correspond to the smallest execution time</span>
class="cmbx-12">necessarily correspond to the smallest execution time on parallel</span>
<span
class="cmr-12">on parallel computers.</span>
class="cmbx-12">computers.</span>
<!--l. 107--><p class="indent" > <span
class="cmbxti-10x-x-120">DA MODIFICARE PER INSERIRE TIPO DI AGGREGAZIONE</span>
<div class="subsectionTOCS">
<span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">5.1 </span><a
href="userhtmlsu9.html#x18-170005.1"><span
class="cmr-12">Examples</span></a></span>
class="cmbx-12">Examples</span></a></span>
</div>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse6.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#tailuserhtmlse4.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse5.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlse5.html"></a>
</body></html>

@ -11,234 +11,239 @@
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse7.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html#tailuserhtmlse5.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlse6.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse6.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">6 </span></span> <a
class="cmbx-12">6 </span></span> <a
id="x19-180006"></a><span
class="cmr-12">User Interface</span></h3>
class="cmbx-12">User Interface</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">The basic user interface of MLD2P4 consists of eight methods. The six methods </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">The basic user interface of AMG4PBLAS consists of eight methods. The six</span>
<span
class="cmbx-12">methods </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span><span
class="cmr-12">,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">build</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span> <span
class="cmr-12">encapsulate all the</span>
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span>
<span
class="cmbx-12">encapsulate all the functionalities for the setup and the application of any</span>
<span
class="cmr-12">functionalities for the setup and the application of any multilevel and one-level</span>
class="cmbx-12">multilevel and one-level preconditioner implemented in the package. The</span>
<span
class="cmr-12">preconditioner implemented in the package. The method </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">method </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">free</span></span></span> <span
class="cmr-12">deallocates the</span>
class="cmbx-12">deallocates the preconditioner data structure, while </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">descr</span></span></span>
<span
class="cmr-12">preconditioner data structure, while </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">descr</span></span></span> <span
class="cmr-12">prints a description of the preconditioner</span>
class="cmbx-12">prints a description of the preconditioner setup by the user. For</span>
<span
class="cmr-12">setup by the user. For backward compatibility, methods are also accessible as</span>
class="cmbx-12">backward compatibility, methods are also accessible as stand-alone</span>
<span
class="cmr-12">stand-alone subroutines.</span>
class="cmbx-12">subroutines.</span>
<!--l. 16--><p class="indent" > <span
class="cmr-12">For each method, the same user interface is overloaded with respect to the real/</span>
class="cmbx-12">For each method, the same user interface is overloaded with respect to</span>
<span
class="cmr-12">complex case and the single/double precision; arguments with appropriate data types</span>
class="cmbx-12">the real/ complex case and the single/double precision; arguments with</span>
<span
class="cmr-12">must be passed to the method, i.e.,</span>
class="cmbx-12">appropriate data types must be passed to the method, i.e.,</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">the sparse matrix data structure, containing the matrix to be preconditioned,</span>
class="cmbx-12">the sparse matrix data structure, containing the matrix to be</span>
<span
class="cmr-12">must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">preconditioned, must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">spmat_type</span></span></span> <span
class="cmr-12">with </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">with </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span> <span
class="cmr-12">for real single precision, </span><span
class="cmti-12">x</span>
class="cmbx-12">for</span>
<span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">real single precision, </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span> <span
class="cmr-12">for real double precision, </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">for real double precision, </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">for complex single precision, </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmr-12">for</span>
class="cmbx-12">for</span>
<span
class="cmr-12">complex double precision;</span>
class="cmbx-12">complex single precision, </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmbx-12">for complex double precision;</span>
</li>
<li class="itemize"><span
class="cmr-12">the preconditioner data structure must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">the preconditioner data structure must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_</span></span></span><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">prec_type</span></span></span><span
class="cmr-12">, with </span><span
class="cmti-12">x</span>
class="cmbx-12">,</span>
<span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">with </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span><span
class="cmr-12">, according to the sparse matrix data structure;</span>
class="cmbx-12">, according to the sparse matrix data structure;</span>
</li>
<li class="itemize"><span
class="cmr-12">the arrays containing the vectors </span><span
class="cmmi-12">v </span><span
class="cmr-12">and </span><span
class="cmmi-12">w </span><span
class="cmr-12">involved in the preconditioner</span>
class="cmbx-12">the arrays containing the vectors </span><span
class="cmmi-12">v </span><span
class="cmbx-12">and </span><span
class="cmmi-12">w </span><span
class="cmbx-12">involved in</span>
<span
class="cmr-12">application </span><span
class="cmmi-12">w </span><span
class="cmr-12">= </span><span
class="cmbx-12">the preconditioner application </span><span
class="cmmi-12">w </span><span
class="cmr-12">= </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmmi-12">v </span><span
class="cmr-12">must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmmi-12">v </span><span
class="cmbx-12">must be of type</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vect_type</span></span></span> <span
class="cmr-12">with </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">with </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span><span
class="cmr-12">,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span><span
class="cmr-12">, in a manner completely analogous to the sparse matrix type;</span>
class="cmbx-12">, in a manner completely</span>
<span
class="cmbx-12">analogous to the sparse matrix type;</span>
</li>
<li class="itemize"><span
class="cmr-12">real parameters defining the preconditioner must be declared according to</span>
class="cmbx-12">real parameters defining the preconditioner must be declared</span>
<span
class="cmr-12">the precision of the sparse matrix and preconditioner data structures (see</span>
class="cmbx-12">according to the precision of the sparse matrix and preconditioner</span>
<span
class="cmr-12">Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">data structures (see Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200006.2"><span
class="cmr-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">).</span></li></ul>
class="cmbx-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmbx-12">).</span></li></ul>
<!--l. 39--><p class="noindent" ><span
class="cmr-12">A description of each method is given in the remainder of this section.</span>
class="cmbx-12">A description of each method is given in the remainder of this section.</span>
<div class="subsectionTOCS">
<span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.1 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.1 </span><a
href="userhtmlsu10.html#x20-190006.1"><span
class="cmr-12">Method init</span></a></span>
class="cmbx-12">Method init</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.2 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.2 </span><a
href="userhtmlsu11.html#x21-200006.2"><span
class="cmr-12">Method set</span></a></span>
class="cmbx-12">Method set</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.3 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.3 </span><a
href="userhtmlsu12.html#x22-210006.3"><span
class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span>
class="cmbx-12">Method hierarchy</span><span
class="cmbx-12">_build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.4 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.4 </span><a
href="userhtmlsu13.html#x23-220006.4"><span
class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span>
class="cmbx-12">Method smoothers</span><span
class="cmbx-12">_build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.5 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.5 </span><a
href="userhtmlsu14.html#x24-230006.5"><span
class="cmr-12">Method build</span></a></span>
class="cmbx-12">Method build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.6 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.6 </span><a
href="userhtmlsu15.html#x25-240006.6"><span
class="cmr-12">Method apply</span></a></span>
class="cmbx-12">Method apply</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.7 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.7 </span><a
href="userhtmlsu16.html#x26-250006.7"><span
class="cmr-12">Method free</span></a></span>
class="cmbx-12">Method free</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.8 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.8 </span><a
href="userhtmlsu17.html#x27-260006.8"><span
class="cmr-12">Method descr</span></a></span>
class="cmbx-12">Method descr</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.9 </span><a
class="cmbx-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmbx-12">6.9 </span><a
href="userhtmlsu18.html#x28-270006.9"><span
class="cmr-12">Auxiliary Methods</span></a></span>
class="cmbx-12">Auxiliary Methods</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.1 </span><a
class="cmbx-12">&#x00A0;</span><span
class="cmbx-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmbx-12">6.9.1 </span><a
href="userhtmlsu18.html#x28-280006.9.1"><span
class="cmr-12">Method: dump</span></a></span>
class="cmbx-12">Method: dump</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.2 </span><a
class="cmbx-12">&#x00A0;</span><span
class="cmbx-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmbx-12">6.9.2 </span><a
href="userhtmlsu18.html#x28-290006.9.2"><span
class="cmr-12">Method: clone</span></a></span>
class="cmbx-12">Method: clone</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.3 </span><a
class="cmbx-12">&#x00A0;</span><span
class="cmbx-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmbx-12">6.9.3 </span><a
href="userhtmlsu18.html#x28-300006.9.3"><span
class="cmr-12">Method: sizeof</span></a></span>
class="cmbx-12">Method: sizeof</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.4 </span><a
class="cmbx-12">&#x00A0;</span><span
class="cmbx-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmbx-12">6.9.4 </span><a
href="userhtmlsu18.html#x28-310006.9.4"><span
class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></a></span>
class="cmbx-12">Method: allocate</span><span
class="cmbx-12">_wrk</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.5 </span><a
class="cmbx-12">&#x00A0;</span><span
class="cmbx-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmbx-12">6.9.5 </span><a
href="userhtmlsu18.html#x28-320006.9.5"><span
class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></a></span>
class="cmbx-12">Method: free</span><span
class="cmbx-12">_wrk</span></a></span>
</div>
@ -252,22 +257,22 @@ class="cmr-12">_wrk</span></a></span>
<!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse7.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html#tailuserhtmlse5.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse6.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 4--><p class="indent" > <a
id="tailuserhtmlse6.html"></a>
</body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html >
<head><title>Adding new smoother and solver objects to MLD2P4</title>
<head><title>Adding new smoother and solver objects to AMG4PSBLAS</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)">
@ -11,65 +11,71 @@
</head><body
>
<!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse8.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#tailuserhtmlse6.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlse7.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse7.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">7 </span></span> <a
class="cmbx-12">7 </span></span> <a
id="x29-330007"></a><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></h3>
class="cmbx-12">Adding new smoother and solver objects to AMG4PSBLAS</span></h3>
<!--l. 6--><p class="noindent" ><span
class="cmr-12">Developers can add completely new smoother and/or solver classes derived from the</span>
class="cmbx-12">Developers can add completely new smoother and/or solver classes derived</span>
<span
class="cmr-12">base objects in the library (see Remark</span><span
class="cmr-12">&#x00A0;2 in Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">from the base objects in the library (see Remark</span><span
class="cmbx-12">&#x00A0;2 in Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200006.2"><span
class="cmr-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">), without recompiling the</span>
class="cmbx-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmbx-12">), without</span>
<span
class="cmr-12">library itself.</span>
class="cmbx-12">recompiling the library itself.</span>
<!--l. 10--><p class="indent" > <span
class="cmr-12">To do so, it is necessary first to select the base type to be extended. In our</span>
class="cmbx-12">To do so, it is necessary first to select the base type to be extended. In</span>
<span
class="cmr-12">experience, it is quite likely that the new application needs only the definition of a</span>
class="cmbx-12">our experience, it is quite likely that the new application needs only the</span>
<span
class="cmr-12">&#8220;solver&#8221; object, which is almost always acting only on the local part of the distributed</span>
class="cmbx-12">definition of a &#8220;solver&#8221; object, which is almost always acting only on the</span>
<span
class="cmr-12">matrix. The parallel actions required to connect the various solver objects are most</span>
class="cmbx-12">local part of the distributed matrix. The parallel actions required to</span>
<span
class="cmr-12">often already provided by the block-Jacobi or the additive Schwarz smoothers. To</span>
class="cmbx-12">connect the various solver objects are most often already provided by the</span>
<span
class="cmr-12">define a new solver, the developer will then have to define its components and</span>
class="cmbx-12">block-Jacobi or the additive Schwarz smoothers. To define a new solver, the</span>
<span
class="cmr-12">methods, perhaps taking one of the predefined solvers as a starting point, if</span>
class="cmbx-12">developer will then have to define its components and methods,</span>
<span
class="cmr-12">possible.</span>
class="cmbx-12">perhaps taking one of the predefined solvers as a starting point, if</span>
<span
class="cmbx-12">possible.</span>
<!--l. 20--><p class="indent" > <span
class="cmr-12">Once the new smoother/solver class has been developed, to use it in the context of</span>
class="cmbx-12">Once the new smoother/solver class has been developed, to use</span>
<span
class="cmbx-12">it in the context of the multilevel preconditioners it is necessary</span>
<span
class="cmr-12">the multilevel preconditioners it is necessary to:</span>
class="cmbx-12">to:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">declare in the application program a variable of the new type;</span>
class="cmbx-12">declare in the application program a variable of the new type;</span>
</li>
<li class="itemize"><span
class="cmr-12">pass that variable as the argument to the </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">pass that variable as the argument to the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">routine as in the following:</span>
class="cmbx-12">routine as in the</span>
<span
class="cmbx-12">following:</span>
<div class="center"
>
<!--l. 26--><p class="noindent" >
@ -83,55 +89,60 @@ class="cmtt-12">&#x00A0;p%set(solver,info</span><span
class="cmtt-12">&#x00A0;[,ilev,ilmax,pos])</span></span></span></div>
</li>
<li class="itemize"><span
class="cmr-12">link the code implementing the various methods into the application</span>
class="cmbx-12">link the code implementing the various methods into the application</span>
<span
class="cmr-12">executable.</span></li></ul>
class="cmbx-12">executable.</span></li></ul>
<!--l. 32--><p class="noindent" ><span
class="cmr-12">The new solver object is then dynamically included in the preconditioner structure, and</span>
class="cmbx-12">The new solver object is then dynamically included in the preconditioner</span>
<span
class="cmr-12">acts as a </span><span
class="cmti-12">mold </span><span
class="cmr-12">to which the preconditioner will conform, even though the MLD2P4</span>
class="cmbx-12">structure, and acts as a </span><span
class="cmbxti-10x-x-120">mold </span><span
class="cmbx-12">to which the preconditioner will conform,</span>
<span
class="cmr-12">library has not been modified to account for this new development.</span>
<!--l. 37--><p class="indent" > <span
class="cmr-12">It is possible to define new values for the keyword </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">WHAT</span></span></span> <span
class="cmr-12">in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">routine; if the</span>
<span
class="cmr-12">library code does not recognize a keyword, it passes it down the composition hierarchy</span>
class="cmbx-12">even though the AMG4PSBLAS library has not been modified to account</span>
<span
class="cmr-12">(levels containing smoothers containing in turn solvers), so that it can be eventually</span>
class="cmbx-12">for this new development.</span>
<!--l. 37--><p class="indent" > <span
class="cmbx-12">It is possible to define new values for the keyword </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">WHAT</span></span></span> <span
class="cmbx-12">in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span>
<span
class="cmr-12">caught by the new solver. By the same token, any keyword/value pair that does not</span>
class="cmbx-12">routine; if the library code does not recognize a keyword, it passes it down</span>
<span
class="cmr-12">pertain to a given smoother should be passed down to the contained solver, and</span>
class="cmbx-12">the composition hierarchy (levels containing smoothers containing in turn</span>
<span
class="cmr-12">any keyword/value pair that does not pertain to a given solver is by default</span>
class="cmbx-12">solvers), so that it can be eventually caught by the new solver. By the</span>
<span
class="cmr-12">ignored.</span>
class="cmbx-12">same token, any keyword/value pair that does not pertain to a given</span>
<span
class="cmbx-12">smoother should be passed down to the contained solver, and any</span>
<span
class="cmbx-12">keyword/value pair that does not pertain to a given solver is by default</span>
<span
class="cmbx-12">ignored.</span>
<!--l. 46--><p class="indent" > <span
class="cmr-12">An example is provided in the source code distribution under the folder</span>
class="cmbx-12">An example is provided in the source code distribution under the folder</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests/newslv</span></span></span><span
class="cmr-12">. In this example we are implementing a new incomplete factorization</span>
class="cmbx-12">. In this example we are implementing a new incomplete</span>
<span
class="cmr-12">variant (which is simply the ILU(0) factorization under a new name). Because of the</span>
class="cmbx-12">factorization variant (which is simply the ILU(0) factorization under a new</span>
<span
class="cmr-12">specifics of this case, it is possible to reuse the basic structure of the ILU solver, with</span>
class="cmbx-12">name). Because of the specifics of this case, it is possible to reuse the basic</span>
<span
class="cmr-12">its L/D/U components and the methods needed to apply the solver; only a few</span>
class="cmbx-12">structure of the ILU solver, with its L/D/U components and the</span>
<span
class="cmr-12">methods, such as the description and most importantly the build, need to be</span>
class="cmbx-12">methods needed to apply the solver; only a few methods, such as the</span>
<span
class="cmr-12">ovverridden (rewritten).</span>
class="cmbx-12">description and most importantly the build, need to be ovverridden</span>
<span
class="cmbx-12">(rewritten).</span>
<!--l. 55--><p class="indent" > <span
class="cmr-12">The interfaces for the calls shown above are defined using</span>
class="cmbx-12">The interfaces for the calls shown above are defined using</span>
<div class="center"
>
<!--l. 56--><p class="noindent" >
@ -144,46 +155,49 @@ id="TBL-21-2"></colgroup><tr
class="td11"><!--l. 58--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoother</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-21-1-2"
class="td11"><!--l. 58--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(mld_x_base_smoother_type)</span></span></span> </td>
class="cmtt-12">class(amg_x_base_smoother_type)</span></span></span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-2-"><td style="white-space:wrap; text-align:left;" id="TBL-21-2-1"
class="td11"><!--l. 59--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-21-2-2"
class="td11"><!--l. 59--><p class="noindent" ><span
class="cmr-12">The user-defined new smoother to be employed in the</span>
class="cmbx-12">The user-defined new smoother to be employed in the</span>
<span
class="cmr-12">preconditioner.</span> </td>
class="cmbx-12">preconditioner.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-3-"><td style="white-space:wrap; text-align:left;" id="TBL-21-3-1"
class="td11"><!--l. 61--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">solver</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-21-3-2"
class="td11"><!--l. 61--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(mld_x_base_solver_type)</span></span></span> </td>
class="cmtt-12">class(amg_x_base_solver_type)</span></span></span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-4-"><td style="white-space:wrap; text-align:left;" id="TBL-21-4-1"
class="td11"><!--l. 62--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-21-4-2"
class="td11"><!--l. 62--><p class="noindent" ><span
class="cmr-12">The user-defined new solver to be employed in the preconditioner.</span></td></tr></table></div></div>
class="cmbx-12">The user-defined new solver to be employed in the</span>
<span
class="cmbx-12">preconditioner.</span> </td>
</tr></table></div></div>
<!--l. 66--><p class="noindent" ><span
class="cmr-12">The other arguments are defined in the way described in Sec.</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">The other arguments are defined in the way described in Sec.</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200006.2"><span
class="cmr-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">. As an example, in the</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests/newslv</span></span></span> <span
class="cmr-12">code we define a new object of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_d_tlu_solver_type</span></span></span><span
class="cmr-12">, and we</span>
class="cmbx-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmbx-12">. As an</span>
<span
class="cmr-12">pass it as follows:</span>
class="cmbx-12">example, in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests/newslv</span></span></span> <span
class="cmbx-12">code we define a new object of type</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_d_tlu_solver_type</span></span></span><span
class="cmbx-12">, and we pass it as follows:</span>
<div class="verbatim" id="verbatim-10">
&#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner
&#x00A0;<br />&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;type(mld_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec
&#x00A0;<br />&#x00A0;&#x00A0;type(mld_d_tlu_solver_type)&#x00A0;::&#x00A0;tlusv
&#x00A0;<br />&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec
&#x00A0;<br />&#x00A0;&#x00A0;type(amg_d_tlu_solver_type)&#x00A0;::&#x00A0;tlusv
&#x00A0;<br />
&#x00A0;<br />......
&#x00A0;<br />&#x00A0;&#x00A0;!
@ -208,22 +222,22 @@ class="cmr-12">pass it as follows:</span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse8.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#tailuserhtmlse6.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse7.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse7.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlse7.html"></a>
</body></html>

@ -11,50 +11,52 @@
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse9.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse7.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse7.html#tailuserhtmlse7.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlse8.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse8.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">8 </span></span> <a
class="cmbx-12">8 </span></span> <a
id="x30-340008"></a><span
class="cmr-12">Error Handling</span></h3>
class="cmbx-12">Error Handling</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">The error handling in MLD2P4 is based on the PSBLAS error handling. Error</span>
class="cmbx-12">The error handling in AMG4PSBLAS is based on the PSBLAS error</span>
<span
class="cmr-12">conditions are signaled via an integer argument </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">handling. Error conditions are signaled via an integer argument </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span><span
class="cmr-12">; whenever an error condition is</span>
class="cmbx-12">;</span>
<span
class="cmr-12">detected, an error trace stack is built by the library up to the top-level, user-callable</span>
class="cmbx-12">whenever an error condition is detected, an error trace stack is built by the</span>
<span
class="cmr-12">routine. This routine will then decide, according to the user preferences, whether</span>
class="cmbx-12">library up to the top-level, user-callable routine. This routine will then</span>
<span
class="cmr-12">the error should be handled by terminating the program or by returning the</span>
class="cmbx-12">decide, according to the user preferences, whether the error should be</span>
<span
class="cmr-12">error condition to the user code, which will then take action, and whether</span>
class="cmbx-12">handled by terminating the program or by returning the error condition to</span>
<span
class="cmr-12">an error message should be printed. These options may be set by using the</span>
class="cmbx-12">the user code, which will then take action, and whether an error message</span>
<span
class="cmr-12">PSBLAS error handling routines; for further details see the PSBLAS User&#8217;s Guide</span>
class="cmbx-12">should be printed. These options may be set by using the PSBLAS error</span>
<span
class="cmbx-12">handling routines; for further details see the PSBLAS User&#8217;s Guide</span>
<span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span>
@ -68,22 +70,22 @@ class="cmr-12">.</span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlse9.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse7.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse7.html#tailuserhtmlse7.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse8.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse8.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlse8.html"></a>
</body></html>

@ -11,41 +11,47 @@
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlli4.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse8.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse8.html#tailuserhtmlse8.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlse9.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse9.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">A </span></span> <a
class="cmbx-12">A </span></span> <a
id="x31-35000A"></a><span
class="cmr-12">License</span></h3>
class="cmbx-12">License</span></h3>
<!--l. 5--><p class="noindent" ><span
class="cmr-12">The MLD2P4 is freely distributable under the following copyright terms:</span>
class="cmbx-12">DA CONTROLLARE E MODIFICARE INCLUDENDO I CREDITS A</span>
<span
class="cmbx-12">MLD2P4</span>
<!--l. 7--><p class="indent" > <span
class="cmbx-12">The AMG4PSBLAS is freely distributable under the following copyright</span>
<span
class="cmbx-12">terms:</span>
<div class="verbatim" id="verbatim-11">
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MLD2P4&#x00A0;&#x00A0;version&#x00A0;2.1
&#x00A0;<br />&#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;AMG4PSBLAS&#x00A0;&#x00A0;version&#x00A0;1.0
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Algebraic&#x00A0;MultiGrid&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.5)
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2008,&#x00A0;2010,&#x00A0;2012,&#x00A0;2015,&#x00A0;2017
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone&#x00A0;&#x00A0;&#x00A0;&#x00A0;Cranfield&#x00A0;University,&#x00A0;Cranfield,&#x00A0;UK
&#x00A0;<br />&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;IAC-CNR,&#x00A0;Naples,&#x00A0;IT
&#x00A0;<br />&#x00A0;&#x00A0;Daniela&#x00A0;di&#x00A0;Serafino&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Campania&#x00A0;L.&#x00A0;Vanvitelli,&#x00A0;Caserta,&#x00A0;IT
&#x00A0;<br />&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;<br />&#x00A0;&#x00A0;Fabio&#x00A0;Durastante&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Pisa&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;<br />&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Rome&#x00A0;Tor-Vergata&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;<br />
&#x00A0;<br />&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without
&#x00A0;<br />&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions
@ -72,7 +78,7 @@ class="cmr-12">The MLD2P4 is freely distributable under the following copyright
&#x00A0;<br />&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE.
&#x00A0;<br />
</div>
<!--l. 43--><p class="nopar" >
<!--l. 45--><p class="nopar" >
@ -90,22 +96,22 @@ class="cmr-12">The MLD2P4 is freely distributable under the following copyright
<!--l. 2--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlli4.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse8.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse8.html#tailuserhtmlse8.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse9.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtml.html#userhtmlse9.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 2--><p class="indent" > <a
id="tailuserhtmlse9.html"></a>
</body></html>

@ -36,15 +36,15 @@ class="cmbx-12">BLAS</span> </dt><dd
class="description"><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#Xblas3"><span
class="cmr-12">11</span></a><span
class="cmr-12">13</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xblas2"><span
class="cmr-12">12</span></a><span
class="cmr-12">14</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xblas1"><span
class="cmr-12">18</span></a><span
class="cmr-12">20</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">Many vendors provide optimized versions of BLAS; if no</span>
<span
@ -60,11 +60,11 @@ href="www.netlib.org/blas" class="url" ><span
class="cmtt-12">www.netlib.org/blas</span></a><span
class="cmr-12">) are meant to define the standard</span>
<span
class="cmr-12">behaviour of the BLAS interface, so they are not optimized for any</span>
class="cmr-12">behaviour of the BLAS interface, so they are not optimized for any particular</span>
<span
class="cmr-12">particular plaftorm, and should only be used as a last resort. Note that</span>
class="cmr-12">platform, and should only be used as a last resort. Note that BLAS</span>
<span
class="cmr-12">BLAS computations form a relatively small part of the MLD2P4/PSBLAS</span>
class="cmr-12">computations form a relatively small part of the AMG4PSBLAS/PSBLAS</span>
<span
class="cmr-12">computations; they are however critical when using preconditioners based</span>
<span
@ -89,11 +89,11 @@ class="cmbx-12">MPI</span> </dt><dd
class="description"><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XMPI2"><span
class="cmr-12">17</span></a><span
class="cmr-12">19</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XMPI1"><span
class="cmr-12">23</span></a><span
class="cmr-12">25</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">A version of MPI is available on most high-performance computing</span>
<span
@ -104,25 +104,29 @@ class="cmbx-12">PSBLAS</span> </dt><dd
class="description"><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">15</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xpsblas_00"><span
class="cmr-12">15</span></a><span
class="cmr-12">17</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">Parallel Sparse BLAS (PSBLAS) is available from</span>
<a
href="github.com/sfilippone/psblas3" class="url" ><span
class="cmtt-12">github.com/sfilippone/psblas3</span></a><span
class="cmr-12">; version 3.5.0 (or later) is required.</span>
class="cmtt-12">github.com/sfilippone/psblas3</span></a> <span
class="cmr-12">?? </span><span
class="cmbx-12">Mettere tutto sotto psctoolkit</span><span
class="cmr-12">;</span>
<span
class="cmr-12">version 3.5.0 (or later) is required. Indeed, all the prerequisites listed so far</span>
<span
class="cmr-12">Indeed, all the prerequisites listed so far are also prerequisites of PSBLAS.</span></dd></dl>
class="cmr-12">are also prerequisites of PSBLAS.</span></dd></dl>
<!--l. 56--><p class="noindent" ><span
class="cmr-12">Please note that the four previous libraries must have Fortran interfaces compatible with</span>
<span
class="cmr-12">MLD2P4; usually this means that they should all be built with the same compiler as</span>
class="cmr-12">AMG4PSBLAS; usually this means that they should all be built with the same</span>
<span
class="cmr-12">MLD2P4.</span>
class="cmr-12">compiler as AMG4PSBLAS.</span>

@ -11,20 +11,20 @@
</head><body
>
<!--l. 43--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu11.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu10.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu10.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.1 </span></span> <a
class="cmbx-12">6.1 </span></span> <a
id="x20-190006.1"></a><span
class="cmr-12">Method init</span></h4>
class="cmbx-12">Method init</span></h4>
<div class="center"
>
<!--l. 45--><p class="noindent" >
@ -32,11 +32,11 @@ class="cmr-12">Method init</span></h4>
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%init(icontx,ptype,info)</span></span></span></div>
<!--l. 49--><p class="noindent" ><span
class="cmr-12">This method allocates and initializes the preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">This method allocates and initializes the preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span
class="cmr-12">, according to the</span>
class="cmbx-12">, according to the</span>
<span
class="cmr-12">preconditioner type chosen by the user.</span>
class="cmbx-12">preconditioner type chosen by the user.</span>
<!--l. 53--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-2" class="tabular"
@ -45,88 +45,92 @@ cellspacing="0" cellpadding="0"
id="TBL-2-1"><col
id="TBL-2-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:wrap; text-align:left;" id="TBL-2-1-1"
class="td11"><!--l. 60--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 57--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">icontxt</span></span></span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-2-1-2"
class="td11"><!--l. 60--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 57--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:wrap; text-align:left;" id="TBL-2-2-1"
class="td11"><!--l. 61--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-2-2"
class="td11"><!--l. 61--><p class="noindent" ><span
class="cmr-12">The communication context.</span> </td></tr><tr
class="td11"><!--l. 58--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-2-2"
class="td11"><!--l. 58--><p class="noindent" ><span
class="cmbx-12">The communication context.</span> </td></tr><tr
style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:wrap; text-align:left;" id="TBL-2-3-1"
class="td11"><!--l. 62--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 59--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">ptype</span></span></span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-2-3-2"
class="td11"><!--l. 62--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 59--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">character(len=*),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span></td>
class="cmbx-12">.</span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:wrap; text-align:left;" id="TBL-2-4-1"
class="td11"><!--l. 63--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-4-2"
class="td11"><!--l. 63--><p class="noindent" ><span
class="cmr-12">The type of preconditioner. Its values are specified in Table</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 60--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-4-2"
class="td11"><!--l. 60--><p class="noindent" ><span
class="cmbx-12">The type of preconditioner. Its values are specified in</span>
<span
class="cmbx-12">Table</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse5.html#x17-160151"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">.</span> </td>
class="cmbx-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:wrap; text-align:left;" id="TBL-2-5-1"
class="td11"><!--l. 65--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-5-2"
class="td11"><!--l. 65--><p class="noindent" ><span
class="cmr-12">Note that the strings are case insensitive.</span> </td>
class="td11"><!--l. 62--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-5-2"
class="td11"><!--l. 62--><p class="noindent" ><span
class="cmbx-12">Note that the strings are case insensitive.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:wrap; text-align:left;" id="TBL-2-6-1"
class="td11"><!--l. 66--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 63--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-2-6-2"
class="td11"><!--l. 66--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 63--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:wrap; text-align:left;" id="TBL-2-7-1"
class="td11"><!--l. 67--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-7-2"
class="td11"><!--l. 67--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 64--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-7-2"
class="td11"><!--l. 64--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:wrap; text-align:left;" id="TBL-2-8-1"
class="td11"> </td> </tr></table></div>
<!--l. 77--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<!--l. 69--><p class="indent" > <span
class="cmbx-12">For compatibility with the previous versions of MLD2P4, this method</span>
<span
class="cmr-12">invoked as follows:</span>
class="cmbx-12">can be also invoked as follows:</span>
<div class="center"
>
<!--l. 80--><p class="noindent" >
<!--l. 81--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 72--><p class="noindent" >
<!--l. 73--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precinit(p,ptype,info)</span></span></span></div>
class="cmtt-12">&#x00A0;amg_precinit(p,ptype,info)</span></span></span></div>
<!--l. 87--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 79--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu11.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu10.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu10.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 87--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 79--><p class="indent" > <a
id="tailuserhtmlsu10.html"></a>
</body></html>

File diff suppressed because it is too large Load Diff

@ -10,48 +10,48 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 662--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 567--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu13.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu11.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu11.html#tailuserhtmlsu11.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu12.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu12.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.3 </span></span> <a
class="cmbx-12">6.3 </span></span> <a
id="x22-210006.3"></a><span
class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></h4>
class="cmbx-12">Method hierarchy</span><span
class="cmbx-12">_build</span></h4>
<div class="center"
>
<!--l. 664--><p class="noindent" >
<!--l. 665--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 569--><p class="noindent" >
<!--l. 570--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%hierarchy_build(a,desc_a,info)</span></span></span><br />
</div>
<!--l. 668--><p class="noindent" ><span
class="cmr-12">This method builds the hierarchy of matrices and restriction/prolongation operators for</span>
<!--l. 573--><p class="noindent" ><span
class="cmbx-12">This method builds the hierarchy of matrices and restriction/prolongation</span>
<span
class="cmr-12">the multilevel preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">operators for the multilevel preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span
class="cmr-12">, according to the requirements made by the user</span>
class="cmbx-12">, according to the requirements</span>
<span
class="cmr-12">through the methods </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">made by the user through the methods </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">.</span>
<!--l. 673--><p class="noindent" ><span
class="cmbx-12">.</span>
<!--l. 578--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-11" class="tabular"
cellspacing="0" cellpadding="0"
@ -59,71 +59,75 @@ cellspacing="0" cellpadding="0"
id="TBL-11-1"><col
id="TBL-11-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-11-1-"><td style="white-space:wrap; text-align:left;" id="TBL-11-1-1"
class="td11"><!--l. 676--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 581--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-11-1-2"
class="td11"><!--l. 676--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 581--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">spmat_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:wrap; text-align:left;" id="TBL-11-2-1"
class="td11"><!--l. 677--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-2-2"
class="td11"><!--l. 677--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
class="td11"><!--l. 582--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-2-2"
class="td11"><!--l. 582--><p class="noindent" ><span
class="cmbx-12">The sparse matrix structure containing the local part</span>
<span
class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to</span>
class="cmbx-12">of the matrix to be preconditioned. Note that </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">must</span>
<span
class="cmr-12">the real/complex, single/double precision version of MLD2P4 under</span>
class="cmbx-12">be chosen according to the real/complex, single/double</span>
<span
class="cmr-12">use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">precision version of MLD2P4 under use. See the PSBLAS</span>
<span
class="cmbx-12">User&#8217;s Guide for details </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:wrap; text-align:left;" id="TBL-11-3-1"
class="td11"><!--l. 682--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 587--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-11-3-2"
class="td11"><!--l. 682--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 587--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:wrap; text-align:left;" id="TBL-11-4-1"
class="td11"><!--l. 683--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-4-2"
class="td11"><!--l. 683--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 588--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-4-2"
class="td11"><!--l. 588--><p class="noindent" ><span
class="cmbx-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
class="cmbx-12">. See the PSBLAS</span>
<span
class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">User&#8217;s Guide for details </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:wrap; text-align:left;" id="TBL-11-5-1"
class="td11"><!--l. 688--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 591--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-11-5-2"
class="td11"><!--l. 688--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 591--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:wrap; text-align:left;" id="TBL-11-6-1"
class="td11"><!--l. 689--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-6-2"
class="td11"><!--l. 689--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 592--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-6-2"
class="td11"><!--l. 592--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-7-"><td style="white-space:wrap; text-align:left;" id="TBL-11-7-1"
class="td11"> </td> </tr></table></div>
@ -133,23 +137,23 @@ class="td11"> </td> </tr></table></div>
<!--l. 695--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 598--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu13.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu11.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu11.html#tailuserhtmlsu11.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu12.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu12.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 695--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 598--><p class="indent" > <a
id="tailuserhtmlsu12.html"></a>
</body></html>

@ -10,54 +10,58 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 695--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 598--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu14.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu12.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu12.html#tailuserhtmlsu12.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu13.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu13.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.4 </span></span> <a
class="cmbx-12">6.4 </span></span> <a
id="x23-220006.4"></a><span
class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></h4>
class="cmbx-12">Method smoothers</span><span
class="cmbx-12">_build</span></h4>
<div class="center"
>
<!--l. 698--><p class="noindent" >
<!--l. 699--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 601--><p class="noindent" >
<!--l. 602--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%smoothers_build(a,desc_a,p,info[,amold,vmold,imold])</span></span></span><br />
</div>
<!--l. 702--><p class="noindent" ><span
class="cmr-12">This method builds the smoothers and the coarsest-level solvers for the multilevel</span>
<!--l. 605--><p class="noindent" ><span
class="cmbx-12">This method builds the smoothers and the coarsest-level solvers for the</span>
<span
class="cmr-12">preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">multilevel preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span
class="cmr-12">, according to the requirements made by the user through the methods</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, according to the requirements made</span>
<span
class="cmbx-12">by the user through the methods </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">, and based on the aggregation hierarchy produced by a previous call to</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">, and based on the</span>
<span
class="cmbx-12">aggregation hierarchy produced by a previous call to </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span> <span
class="cmr-12">(see Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">(see</span>
<span
class="cmbx-12">Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu12.html#x22-210006.3"><span
class="cmr-12">6.3</span><!--tex4ht:ref: sec:hier_bld --></a><span
class="cmr-12">).</span>
<!--l. 709--><p class="noindent" ><span
class="cmbx-12">6.3</span><!--tex4ht:ref: sec:hier_bld --></a><span
class="cmbx-12">).</span>
<!--l. 612--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-12" class="tabular"
cellspacing="0" cellpadding="0"
@ -65,130 +69,135 @@ cellspacing="0" cellpadding="0"
id="TBL-12-1"><col
id="TBL-12-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-12-1-"><td style="white-space:wrap; text-align:left;" id="TBL-12-1-1"
class="td11"><!--l. 712--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 615--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-1-2"
class="td11"><!--l. 712--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 615--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">spmat_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-2-"><td style="white-space:wrap; text-align:left;" id="TBL-12-2-1"
class="td11"><!--l. 713--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-2-2"
class="td11"><!--l. 713--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
class="td11"><!--l. 616--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-2-2"
class="td11"><!--l. 616--><p class="noindent" ><span
class="cmbx-12">The sparse matrix structure containing the local part</span>
<span
class="cmbx-12">of the matrix to be preconditioned. Note that </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">must</span>
<span
class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to</span>
class="cmbx-12">be chosen according to the real/complex, single/double</span>
<span
class="cmr-12">the real/complex, single/double precision version of MLD2P4 under</span>
class="cmbx-12">precision version of MLD2P4 under use. See the PSBLAS</span>
<span
class="cmr-12">use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">User&#8217;s Guide for details </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-3-"><td style="white-space:wrap; text-align:left;" id="TBL-12-3-1"
class="td11"><!--l. 717--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 620--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-12-3-2"
class="td11"><!--l. 717--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 620--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-4-"><td style="white-space:wrap; text-align:left;" id="TBL-12-4-1"
class="td11"><!--l. 718--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-4-2"
class="td11"><!--l. 718--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 621--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-4-2"
class="td11"><!--l. 621--><p class="noindent" ><span
class="cmbx-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
class="cmbx-12">. See the PSBLAS</span>
<span
class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">User&#8217;s Guide for details </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-5-"><td style="white-space:wrap; text-align:left;" id="TBL-12-5-1"
class="td11"><!--l. 723--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 623--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-5-2"
class="td11"><!--l. 723--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 623--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-6-"><td style="white-space:wrap; text-align:left;" id="TBL-12-6-1"
class="td11"><!--l. 724--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-6-2"
class="td11"><!--l. 724--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 624--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-6-2"
class="td11"><!--l. 624--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-7-"><td style="white-space:wrap; text-align:left;" id="TBL-12-7-1"
class="td11"><!--l. 725--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 625--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-7-2"
class="td11"><!--l. 725--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 625--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_sparse_mat),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-8-"><td style="white-space:wrap; text-align:left;" id="TBL-12-8-1"
class="td11"><!--l. 726--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-8-2"
class="td11"><!--l. 726--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
class="td11"><!--l. 626--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-8-2"
class="td11"><!--l. 626--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal matrix components;</span>
<span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
class="cmbx-12">this allows e.g. running on GPUs; it needs not be the same</span>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">on all processes. See the PSBLAS User&#8217;s Guide for details</span>
<span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-9-"><td style="white-space:wrap; text-align:left;" id="TBL-12-9-1"
class="td11"><!--l. 730--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 630--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vmold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-9-2"
class="td11"><!--l. 730--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 630--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-10-"><td style="white-space:wrap; text-align:left;" id="TBL-12-10-1"
class="td11"><!--l. 731--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-10-2"
class="td11"><!--l. 731--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
class="td11"><!--l. 631--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-10-2"
class="td11"><!--l. 631--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal vector components;</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
class="cmbx-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-11-"><td style="white-space:wrap; text-align:left;" id="TBL-12-11-1"
class="td11"><!--l. 733--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 633--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">imold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-11-2"
class="td11"><!--l. 733--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 633--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_i_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-12-"><td style="white-space:wrap; text-align:left;" id="TBL-12-12-1"
class="td11"><!--l. 734--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-12-2"
class="td11"><!--l. 734--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal integer vector components;</span>
class="td11"><!--l. 634--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-12-2"
class="td11"><!--l. 634--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal integer vector</span>
<span
class="cmr-12">this allows e.g. running on GPUs.</span> </td>
class="cmbx-12">components; this allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-13-"><td style="white-space:wrap; text-align:left;" id="TBL-12-13-1"
class="td11"> </td> </tr></table></div>
@ -198,23 +207,26 @@ class="td11"> </td> </tr></table></div>
<!--l. 740--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 640--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu14.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu12.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu12.html#tailuserhtmlsu12.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu13.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu13.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 740--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 640--><p class="indent" > <a
id="tailuserhtmlsu13.html"></a>
</body></html>

@ -10,236 +10,243 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 740--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 640--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu15.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu13.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu13.html#tailuserhtmlsu13.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu14.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu14.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.5 </span></span> <a
class="cmbx-12">6.5 </span></span> <a
id="x24-230006.5"></a><span
class="cmr-12">Method build</span></h4>
class="cmbx-12">Method build</span></h4>
<div class="center"
>
<!--l. 742--><p class="noindent" >
<!--l. 743--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 642--><p class="noindent" >
<!--l. 643--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%build(a,desc_a,info[,amold,vmold,imold])</span></span></span><br />
</div>
<!--l. 746--><p class="noindent" ><span
class="cmr-12">This method builds the preconditioner </span><span class="obeylines-h"><span class="verb"><span
<!--l. 646--><p class="noindent" ><span
class="cmbx-12">This method builds the preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span> <span
class="cmr-12">according to the requirements made by the</span>
class="cmbx-12">according to the requirements</span>
<span
class="cmr-12">user through the methods </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">made by the user through the methods </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">(see Sections</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">(see Sections</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu12.html#x22-210006.3"><span
class="cmr-12">6.3</span><!--tex4ht:ref: sec:hier_bld --></a> <span
class="cmr-12">and</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">6.3</span><!--tex4ht:ref: sec:hier_bld --></a>
<span
class="cmbx-12">and</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu13.html#x23-220006.4"><span
class="cmr-12">6.4</span><!--tex4ht:ref: sec:smooth_bld --></a> <span
class="cmr-12">for multilevel</span>
class="cmbx-12">6.4</span><!--tex4ht:ref: sec:smooth_bld --></a> <span
class="cmbx-12">for multilevel preconditioners). It is mostly provided for backward</span>
<span
class="cmr-12">preconditioners). It is mostly provided for backward compatibility; indeed, it is</span>
class="cmbx-12">compatibility; indeed, it is internally implemented by invoking the</span>
<span
class="cmr-12">internally implemented by invoking the two previous methods </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">two previous methods </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span> <span
class="cmr-12">and</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span><span
class="cmr-12">, whose nomenclature would however be somewhat unnatural when</span>
class="cmbx-12">, whose</span>
<span
class="cmbx-12">nomenclature would however be somewhat unnatural when dealing with</span>
<span
class="cmr-12">dealing with simple one-level preconditioners.</span>
<!--l. 756--><p class="noindent" ><span
class="cmbx-12">simple one-level preconditioners.</span>
<!--l. 656--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-13" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-13-1g"><col
id="TBL-13-1"><col
id="TBL-13-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-13-1-"><td style="white-space:wrap; text-align:left;" id="TBL-13-1-1"
class="td11"><!--l. 759--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 659--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-1-2"
class="td11"><!--l. 759--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 659--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">spmat_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-2-"><td style="white-space:wrap; text-align:left;" id="TBL-13-2-1"
class="td11"><!--l. 760--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-2-2"
class="td11"><!--l. 760--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
class="td11"><!--l. 660--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-2-2"
class="td11"><!--l. 660--><p class="noindent" ><span
class="cmbx-12">The sparse matrix structure containing the local part</span>
<span
class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to</span>
class="cmbx-12">of the matrix to be preconditioned. Note that </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">must</span>
<span
class="cmr-12">the real/complex, single/double precision version of MLD2P4 under</span>
class="cmbx-12">be chosen according to the real/complex, single/double</span>
<span
class="cmr-12">use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">precision version of MLD2P4 under use. See the PSBLAS</span>
<span
class="cmbx-12">User&#8217;s Guide for details </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-3-"><td style="white-space:wrap; text-align:left;" id="TBL-13-3-1"
class="td11"><!--l. 764--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 664--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-13-3-2"
class="td11"><!--l. 764--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 664--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-4-"><td style="white-space:wrap; text-align:left;" id="TBL-13-4-1"
class="td11"><!--l. 765--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 765--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 665--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 665--><p class="noindent" ><span
class="cmbx-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
class="cmbx-12">. See the PSBLAS</span>
<span
class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">User&#8217;s Guide for details </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-5-"><td style="white-space:wrap; text-align:left;" id="TBL-13-5-1"
class="td11"><!--l. 770--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 667--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-5-2"
class="td11"><!--l. 770--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 667--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-6-"><td style="white-space:wrap; text-align:left;" id="TBL-13-6-1"
class="td11"><!--l. 771--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 771--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 668--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 668--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-7-"><td style="white-space:wrap; text-align:left;" id="TBL-13-7-1"
class="td11"><!--l. 772--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 669--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-7-2"
class="td11"><!--l. 772--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 669--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_sparse_mat),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-8-"><td style="white-space:wrap; text-align:left;" id="TBL-13-8-1"
class="td11"><!--l. 773--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-8-2"
class="td11"><!--l. 773--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
class="td11"><!--l. 670--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-8-2"
class="td11"><!--l. 670--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal matrix components;</span>
<span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
class="cmbx-12">this allows e.g. running on GPUs; it needs not be the same</span>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">on all processes. See the PSBLAS User&#8217;s Guide for details</span>
<span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-9-"><td style="white-space:wrap; text-align:left;" id="TBL-13-9-1"
class="td11"><!--l. 777--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 674--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vmold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-9-2"
class="td11"><!--l. 777--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 674--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-10-"><td style="white-space:wrap; text-align:left;" id="TBL-13-10-1"
class="td11"><!--l. 778--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-10-2"
class="td11"><!--l. 778--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
class="td11"><!--l. 675--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-10-2"
class="td11"><!--l. 675--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal vector components;</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
class="cmbx-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-11-"><td style="white-space:wrap; text-align:left;" id="TBL-13-11-1"
class="td11"><!--l. 780--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 677--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">imold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-11-2"
class="td11"><!--l. 780--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 677--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_i_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:wrap; text-align:left;" id="TBL-13-12-1"
class="td11"><!--l. 781--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 781--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal integer vector components;</span>
class="td11"><!--l. 678--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 678--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal integer vector</span>
<span
class="cmr-12">this allows e.g. running on GPUs.</span> </td>
class="cmbx-12">components; this allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:wrap; text-align:left;" id="TBL-13-13-1"
class="td11"> </td> </tr></table></div>
<!--l. 786--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<!--l. 683--><p class="indent" > <span
class="cmbx-12">For compatibility with the previous versions of MLD2P4, this method</span>
<span
class="cmr-12">invoked as follows:</span>
class="cmbx-12">can be also invoked as follows:</span>
<div class="center"
>
<!--l. 789--><p class="noindent" >
<!--l. 790--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 686--><p class="noindent" >
<!--l. 687--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precbld(p,what,val,info[,amold,vmold,imold])</span></span></span></div>
<!--l. 793--><p class="noindent" ><span
class="cmr-12">The method can be used to build multilevel preconditioners too.</span>
class="cmtt-12">&#x00A0;amg_precbld(p,what,val,info[,amold,vmold,imold])</span></span></span></div>
<!--l. 690--><p class="noindent" ><span
class="cmbx-12">The method can be used to build multilevel preconditioners too.</span>
<!--l. 798--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 695--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu15.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu13.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu13.html#tailuserhtmlsu13.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu14.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu14.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 798--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 695--><p class="indent" > <a
id="tailuserhtmlsu14.html"></a>
</body></html>

@ -10,37 +10,37 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 798--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 695--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu14.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu14.html#tailuserhtmlsu14.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu15.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu15.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.6 </span></span> <a
class="cmbx-12">6.6 </span></span> <a
id="x25-240006.6"></a><span
class="cmr-12">Method apply</span></h4>
class="cmbx-12">Method apply</span></h4>
<div class="center"
>
<!--l. 800--><p class="noindent" >
<!--l. 801--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 697--><p class="noindent" >
<!--l. 698--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%apply(x,y,desc_a,info</span><span
class="cmtt-12">&#x00A0;[,trans,work])</span></span></span><br />
</div>
<!--l. 804--><p class="noindent" ><span
class="cmr-12">This method computes </span><span
<!--l. 701--><p class="noindent" ><span
class="cmbx-12">This method computes </span><span
class="cmmi-12">y </span><span
class="cmr-12">= </span><span
class="cmmi-12">op</span><span
@ -50,152 +50,164 @@ class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) </span><span
class="cmmi-12">x</span><span
class="cmr-12">, where </span><span
class="cmbx-12">, where </span><span
class="cmmi-12">B </span><span
class="cmr-12">is a previously built preconditioner,</span>
class="cmbx-12">is a previously built</span>
<span
class="cmr-12">stored into </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">preconditioner, stored into </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span
class="cmr-12">, and </span><span
class="cmbx-12">, and </span><span
class="cmmi-12">op </span><span
class="cmr-12">denotes the preconditioner itself or its transpose, according to the</span>
class="cmbx-12">denotes the preconditioner itself or its</span>
<span
class="cmr-12">value of </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">transpose, according to the value of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span><span
class="cmr-12">. Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">. Note that, when MLD2P4 is</span>
<span
class="cmbx-12">used with a Krylov solver from PSBLAS, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p%apply</span></span></span> <span
class="cmr-12">is called within the PSBLAS method </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">is called within the</span>
<span
class="cmbx-12">PSBLAS method </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov</span></span></span> <span
class="cmr-12">and hence it is completely</span>
class="cmbx-12">and hence it is completely transparent to the</span>
<span
class="cmr-12">transparent to the user.</span>
<!--l. 813--><p class="noindent" ><span
class="cmbx-12">user.</span>
<!--l. 710--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-14" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-14-1g"><col
id="TBL-14-1"><col
id="TBL-14-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-14-1-"><td style="white-space:wrap; text-align:left;" id="TBL-14-1-1"
class="td11"><!--l. 820--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 713--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">x</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-1-2"
class="td11"><!--l. 820--><p class="noindent" ><span
class="cmti-12">type</span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 713--><p class="noindent" ><span
class="cmbxti-10x-x-120">type</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">(</span></span></span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">kind</span><span
class="cmbxti-10x-x-120">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;dimension(:),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-2-"><td style="white-space:wrap; text-align:left;" id="TBL-14-2-1"
class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-2-2"
class="td11"><!--l. 821--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="td11"><!--l. 714--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-2-2"
class="td11"><!--l. 714--><p class="noindent" ><span
class="cmbx-12">The local part of the vector </span><span
class="cmmi-12">x</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
class="cmbx-12">. Note that </span><span
class="cmbxti-10x-x-120">type</span>
<span
class="cmbx-12">and </span><span
class="cmbxti-10x-x-120">kind</span><span
class="cmbxti-10x-x-120">_parameter </span><span
class="cmbx-12">must be chosen according to the</span>
<span
class="cmr-12">must be chosen according to the real/complex, single/double</span>
class="cmbx-12">real/complex, single/double precision version of MLD2P4</span>
<span
class="cmr-12">precision version of MLD2P4 under use.</span> </td>
class="cmbx-12">under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-3-"><td style="white-space:wrap; text-align:left;" id="TBL-14-3-1"
class="td11"><!--l. 824--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 717--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">y</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-3-2"
class="td11"><!--l. 824--><p class="noindent" ><span
class="cmti-12">type</span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 717--><p class="noindent" ><span
class="cmbxti-10x-x-120">type</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">(</span></span></span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">kind</span><span
class="cmbxti-10x-x-120">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;dimension(:),</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-4-"><td style="white-space:wrap; text-align:left;" id="TBL-14-4-1"
class="td11"><!--l. 825--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-4-2"
class="td11"><!--l. 825--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="td11"><!--l. 718--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-4-2"
class="td11"><!--l. 718--><p class="noindent" ><span
class="cmbx-12">The local part of the vector </span><span
class="cmmi-12">y</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
class="cmbx-12">. Note that </span><span
class="cmbxti-10x-x-120">type</span>
<span
class="cmbx-12">and </span><span
class="cmbxti-10x-x-120">kind</span><span
class="cmbxti-10x-x-120">_parameter </span><span
class="cmbx-12">must be chosen according to the</span>
<span
class="cmr-12">must be chosen according to the real/complex, single/double</span>
class="cmbx-12">real/complex, single/double precision version of MLD2P4</span>
<span
class="cmr-12">precision version of MLD2P4 under use.</span> </td>
class="cmbx-12">under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-5-"><td style="white-space:wrap; text-align:left;" id="TBL-14-5-1"
class="td11"><!--l. 828--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 721--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-14-5-2"
class="td11"><!--l. 828--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 721--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-6-"><td style="white-space:wrap; text-align:left;" id="TBL-14-6-1"
class="td11"><!--l. 829--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-6-2"
class="td11"><!--l. 829--><p class="noindent" ><span
class="cmr-12">The communication descriptor associated to the matrix to be</span>
class="td11"><!--l. 722--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-6-2"
class="td11"><!--l. 722--><p class="noindent" ><span
class="cmbx-12">The communication descriptor associated to the matrix to</span>
<span
class="cmr-12">preconditioned.</span> </td>
class="cmbx-12">be preconditioned.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-7-"><td style="white-space:wrap; text-align:left;" id="TBL-14-7-1"
class="td11"><!--l. 831--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 724--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-7-2"
class="td11"><!--l. 831--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 724--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-8-"><td style="white-space:wrap; text-align:left;" id="TBL-14-8-1"
class="td11"><!--l. 832--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-8-2"
class="td11"><!--l. 832--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 725--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-8-2"
class="td11"><!--l. 725--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-9-"><td style="white-space:wrap; text-align:left;" id="TBL-14-9-1"
class="td11"><!--l. 833--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 726--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-9-2"
class="td11"><!--l. 833--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 726--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">character(len=1),</span><span
class="cmtt-12">&#x00A0;optional,</span><span
class="cmtt-12">&#x00A0;intent(in).</span></span></span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-10-"><td style="white-space:wrap; text-align:left;" id="TBL-14-10-1"
class="td11"><!--l. 834--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-10-2"
class="td11"><!--l. 834--><p class="noindent" ><span
class="cmr-12">If </span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 727--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-10-2"
class="td11"><!--l. 727--><p class="noindent" ><span
class="cmbx-12">If </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> <span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;N&#8217;,&#8217;n&#8217;</span></span></span> <span
class="cmr-12">then </span><span
class="cmbx-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">; if </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">; if </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> <span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;T&#8217;,&#8217;t&#8217;</span></span></span>
<span
class="cmr-12">then </span><span
class="cmbx-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
@ -205,16 +217,17 @@ class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">(transpose of </span><span
class="cmbx-12">(transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">); if </span><span class="obeylines-h"><span class="verb"><span
class="cmr-12">)</span><span
class="cmbx-12">; if </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> <span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;C&#8217;,&#8217;c&#8217;</span></span></span> <span
class="cmr-12">then</span>
class="cmbx-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;C&#8217;,&#8217;c&#8217;</span></span></span>
<span
class="cmbx-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
@ -224,83 +237,85 @@ class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">C</span></sup> <span
class="cmr-12">(conjugate transpose of </span><span
class="cmbx-12">(conjugate transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">).</span> </td>
class="cmr-12">)</span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-11-"><td style="white-space:wrap; text-align:left;" id="TBL-14-11-1"
class="td11"><!--l. 838--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 731--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">work</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-11-2"
class="td11"><!--l. 838--><p class="noindent" ><span
class="cmti-12">type</span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 731--><p class="noindent" ><span
class="cmbxti-10x-x-120">type</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">(</span></span></span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">kind</span><span
class="cmbxti-10x-x-120">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;dimension(:),</span><span
class="cmtt-12">&#x00A0;optional,</span><span
class="cmtt-12">&#x00A0;target</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-12-"><td style="white-space:wrap; text-align:left;" id="TBL-14-12-1"
class="td11"><!--l. 839--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-12-2"
class="td11"><!--l. 839--><p class="noindent" ><span
class="cmr-12">Workspace. Its size should be at least </span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 732--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-12-2"
class="td11"><!--l. 732--><p class="noindent" ><span
class="cmbx-12">Workspace. Its size should be at</span>
<span
class="cmbx-12">least </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">4</span><span
class="cmtt-12">&#x00A0;*</span><span
class="cmtt-12">&#x00A0;psb_cd_get_local_</span></span></span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#x00A0;psb_cd_get_local_</span></span></span> <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">cols(desc_a)</span></span></span> <span
class="cmr-12">(see the PSBLAS User&#8217;s Guide). Note that </span><span
class="cmti-12">type</span>
class="cmbx-12">(see the PSBLAS</span>
<span
class="cmbx-12">User&#8217;s Guide). Note that </span><span
class="cmbxti-10x-x-120">type </span><span
class="cmbx-12">and </span><span
class="cmbxti-10x-x-120">kind</span><span
class="cmbxti-10x-x-120">_parameter </span><span
class="cmbx-12">must</span>
<span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter </span><span
class="cmr-12">must be chosen according to the real/complex,</span>
class="cmbx-12">be chosen according to the real/complex, single/double</span>
<span
class="cmr-12">single/double precision version of MLD2P4 under use.</span> </td>
class="cmbx-12">precision version of MLD2P4 under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-13-"><td style="white-space:wrap; text-align:left;" id="TBL-14-13-1"
class="td11"> </td> </tr></table></div>
<!--l. 846--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<!--l. 739--><p class="indent" > <span
class="cmbx-12">For compatibility with the previous versions of MLD2P4, this method</span>
<span
class="cmr-12">invoked as follows:</span>
class="cmbx-12">can be also invoked as follows:</span>
<div class="center"
>
<!--l. 849--><p class="noindent" >
<!--l. 850--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 742--><p class="noindent" >
<!--l. 743--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precaply(p,what,val,info)</span></span></span></div>
class="cmtt-12">&#x00A0;amg_precaply(p,what,val,info)</span></span></span></div>
<!--l. 855--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 748--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu14.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu14.html#tailuserhtmlsu14.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu15.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu15.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 855--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 748--><p class="indent" > <a
id="tailuserhtmlsu15.html"></a>
</body></html>

@ -10,39 +10,39 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 855--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 748--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu15.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu15.html#tailuserhtmlsu15.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu16.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu16.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.7 </span></span> <a
class="cmbx-12">6.7 </span></span> <a
id="x26-250006.7"></a><span
class="cmr-12">Method free</span></h4>
class="cmbx-12">Method free</span></h4>
<div class="center"
>
<!--l. 857--><p class="noindent" >
<!--l. 858--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 750--><p class="noindent" >
<!--l. 751--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%free(p,info)</span></span></span><br />
</div>
<!--l. 861--><p class="noindent" ><span
class="cmr-12">This method deallocates the preconditioner data structure </span><span class="obeylines-h"><span class="verb"><span
<!--l. 754--><p class="noindent" ><span
class="cmbx-12">This method deallocates the preconditioner data structure </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span
class="cmr-12">.</span>
<!--l. 864--><p class="noindent" ><span
class="cmbx-12">.</span>
<!--l. 757--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-15" class="tabular"
cellspacing="0" cellpadding="0"
@ -50,59 +50,58 @@ cellspacing="0" cellpadding="0"
id="TBL-15-1"><col
id="TBL-15-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-15-1-"><td style="white-space:wrap; text-align:left;" id="TBL-15-1-1"
class="td11"><!--l. 870--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 760--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-15-1-2"
class="td11"><!--l. 870--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 760--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-15-2-"><td style="white-space:wrap; text-align:left;" id="TBL-15-2-1"
class="td11"><!--l. 871--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 871--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 761--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 761--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for</span>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a>
<span
class="cmr-12">details.</span> </td>
class="cmbx-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:wrap; text-align:left;" id="TBL-15-3-1"
class="td11"> </td> </tr></table></div>
<!--l. 875--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<!--l. 765--><p class="indent" > <span
class="cmbx-12">For compatibility with the previous versions of MLD2P4, this method</span>
<span
class="cmr-12">invoked as follows:</span>
class="cmbx-12">can be also invoked as follows:</span>
<div class="center"
>
<!--l. 878--><p class="noindent" >
<!--l. 879--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 768--><p class="noindent" >
<!--l. 769--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precfree(p,info)</span></span></span></div>
class="cmtt-12">&#x00A0;amg_precfree(p,info)</span></span></span></div>
<!--l. 885--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 775--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu15.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu15.html#tailuserhtmlsu15.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu16.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 885--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 775--><p class="indent" > <a
id="tailuserhtmlsu16.html"></a>
</body></html>

@ -10,50 +10,50 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 885--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 775--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu18.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu16.html#tailuserhtmlsu16.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu17.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu17.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.8 </span></span> <a
class="cmbx-12">6.8 </span></span> <a
id="x27-260006.8"></a><span
class="cmr-12">Method descr</span></h4>
class="cmbx-12">Method descr</span></h4>
<div class="center"
>
<!--l. 887--><p class="noindent" >
<!--l. 888--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 777--><p class="noindent" >
<!--l. 778--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%descr(info,</span><span
class="cmtt-12">&#x00A0;[iout])</span></span></span><br />
</div>
<!--l. 891--><p class="noindent" ><span
class="cmr-12">This method prints a description of the preconditioner </span><span class="obeylines-h"><span class="verb"><span
<!--l. 781--><p class="noindent" ><span
class="cmbx-12">This method prints a description of the preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span> <span
class="cmr-12">to the standard output or to a</span>
class="cmbx-12">to the standard</span>
<span
class="cmr-12">file. It must be called after </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">output or to a file. It must be called after </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierachy_build</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span><span
class="cmr-12">, or </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">build</span></span></span><span
class="cmr-12">, have</span>
class="cmbx-12">,</span>
<span
class="cmr-12">been called.</span>
<!--l. 896--><p class="noindent" ><span
class="cmbx-12">or </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">build</span></span></span><span
class="cmbx-12">, have been called.</span>
<!--l. 786--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-16" class="tabular"
cellspacing="0" cellpadding="0"
@ -61,71 +61,73 @@ cellspacing="0" cellpadding="0"
id="TBL-16-1"><col
id="TBL-16-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-16-1-"><td style="white-space:wrap; text-align:left;" id="TBL-16-1-1"
class="td11"><!--l. 902--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 789--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-1-2"
class="td11"><!--l. 902--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 789--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-16-2-"><td style="white-space:wrap; text-align:left;" id="TBL-16-2-1"
class="td11"><!--l. 903--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 903--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 790--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 790--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-16-3-"><td style="white-space:wrap; text-align:left;" id="TBL-16-3-1"
class="td11"><!--l. 904--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 791--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">iout</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-3-2"
class="td11"><!--l. 904--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 791--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-16-4-"><td style="white-space:wrap; text-align:left;" id="TBL-16-4-1"
class="td11"><!--l. 905--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-4-2"
class="td11"><!--l. 905--><p class="noindent" ><span
class="cmr-12">The id of the file where the preconditioner description will be</span>
class="td11"><!--l. 792--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-4-2"
class="td11"><!--l. 792--><p class="noindent" ><span
class="cmbx-12">The id of the file where the preconditioner description will</span>
<span
class="cmr-12">printed; the default is the standard output.</span> </td>
class="cmbx-12">be printed; the default is the standard output.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-16-5-"><td style="white-space:wrap; text-align:left;" id="TBL-16-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 910--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<!--l. 797--><p class="indent" > <span
class="cmbx-12">For compatibility with the previous versions of MLD2P4, this method</span>
<span
class="cmr-12">invoked as follows:</span>
class="cmbx-12">can be also invoked as follows:</span>
<div class="center"
>
<!--l. 913--><p class="noindent" >
<!--l. 914--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 800--><p class="noindent" >
<!--l. 801--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precdescr(p,info</span><span
class="cmtt-12">&#x00A0;amg_precdescr(p,info</span><span
class="cmtt-12">&#x00A0;[,iout])</span></span></span></div>
<!--l. 918--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 805--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu18.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu16.html#tailuserhtmlsu16.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu17.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 918--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 805--><p class="indent" > <a
id="tailuserhtmlsu17.html"></a>
</body></html>

@ -10,43 +10,43 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 918--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 805--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu17.html#tailuserhtmlsu17.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu18.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu18.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.9 </span></span> <a
class="cmbx-12">6.9 </span></span> <a
id="x28-270006.9"></a><span
class="cmr-12">Auxiliary Methods</span></h4>
<!--l. 919--><p class="noindent" ><span
class="cmr-12">Various functionalities are implemented as additional methods of the preconditioner</span>
class="cmbx-12">Auxiliary Methods</span></h4>
<!--l. 806--><p class="noindent" ><span
class="cmbx-12">Various functionalities are implemented as additional methods of the</span>
<span
class="cmr-12">object.</span>
<!--l. 922--><p class="noindent" >
class="cmbx-12">preconditioner object.</span>
<!--l. 809--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">6.9.1 </span></span> <a
class="cmbx-12">6.9.1 </span></span> <a
id="x28-280006.9.1"></a><span
class="cmr-12">Method: dump</span></h5>
class="cmbx-12">Method: dump</span></h5>
<div class="center"
>
<!--l. 924--><p class="noindent" >
<!--l. 925--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 811--><p class="noindent" >
<!--l. 812--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%dump(info[,istart,iend,prefix,head,ac,rp,smoother,solver,global_num])</span></span></span><br />
</div>
<!--l. 928--><p class="noindent" ><span
class="cmr-12">Dump on file.</span>
<!--l. 931--><p class="noindent" ><span
<!--l. 815--><p class="noindent" ><span
class="cmbx-12">Dump on file.</span>
<!--l. 818--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-17" class="tabular"
cellspacing="0" cellpadding="0"
@ -54,67 +54,70 @@ cellspacing="0" cellpadding="0"
id="TBL-17-1"><col
id="TBL-17-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-17-1-"><td style="white-space:wrap; text-align:left;" id="TBL-17-1-1"
class="td11"><!--l. 937--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 821--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-17-1-2"
class="td11"><!--l. 937--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 821--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-2-"><td style="white-space:wrap; text-align:left;" id="TBL-17-2-1"
class="td11"><!--l. 938--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-17-2-2"
class="td11"><!--l. 938--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 822--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-17-2-2"
class="td11"><!--l. 822--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-3-"><td style="white-space:wrap; text-align:left;" id="TBL-17-3-1"
class="td11"><!--l. 939--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 823--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-17-3-2"
class="td11"><!--l. 939--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 823--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_sparse_mat),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-4-"><td style="white-space:wrap; text-align:left;" id="TBL-17-4-1"
class="td11"><!--l. 940--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-17-4-2"
class="td11"><!--l. 940--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
class="td11"><!--l. 824--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-17-4-2"
class="td11"><!--l. 824--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal matrix components;</span>
<span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
class="cmbx-12">this allows e.g. running on GPUs; it needs not be the same</span>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">on all processes. See the PSBLAS User&#8217;s Guide for details</span>
<span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-5-"><td style="white-space:wrap; text-align:left;" id="TBL-17-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 947--><p class="noindent" >
<!--l. 831--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">6.9.2 </span></span> <a
class="cmbx-12">6.9.2 </span></span> <a
id="x28-290006.9.2"></a><span
class="cmr-12">Method: clone</span></h5>
class="cmbx-12">Method: clone</span></h5>
<div class="center"
>
<!--l. 949--><p class="noindent" >
<!--l. 950--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 833--><p class="noindent" >
<!--l. 834--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%clone(pout,info)</span></span></span><br />
</div>
<!--l. 953--><p class="noindent" ><span
class="cmr-12">Create a (deep) copy of the preconditioner object.</span>
<!--l. 956--><p class="noindent" ><span
<!--l. 837--><p class="noindent" ><span
class="cmbx-12">Create a (deep) copy of the preconditioner object.</span>
<!--l. 840--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-18" class="tabular"
cellspacing="0" cellpadding="0"
@ -122,108 +125,114 @@ cellspacing="0" cellpadding="0"
id="TBL-18-1"><col
id="TBL-18-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-18-1-"><td style="white-space:wrap; text-align:left;" id="TBL-18-1-1"
class="td11"><!--l. 959--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 843--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">pout</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-18-1-2"
class="td11"><!--l. 959--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(mld_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 843--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(amg_</span></span></span><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">prec_type),</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-2-"><td style="white-space:wrap; text-align:left;" id="TBL-18-2-1"
class="td11"><!--l. 960--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-18-2-2"
class="td11"><!--l. 960--><p class="noindent" ><span
class="cmr-12">The copy of the preconditioner data structure. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must</span>
class="td11"><!--l. 844--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-18-2-2"
class="td11"><!--l. 844--><p class="noindent" ><span
class="cmbx-12">The copy of the preconditioner data structure. Note</span>
<span
class="cmr-12">be chosen according to the real/complex, single/double precision</span>
class="cmbx-12">that </span><span
class="cmbxti-10x-x-120">x </span><span
class="cmbx-12">must be chosen according to the real/complex,</span>
<span
class="cmr-12">version of MLD2P4 under use.</span> </td>
class="cmbx-12">single/double precision version of MLD2P4 under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-3-"><td style="white-space:wrap; text-align:left;" id="TBL-18-3-1"
class="td11"><!--l. 963--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 847--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-18-3-2"
class="td11"><!--l. 963--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 847--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-4-"><td style="white-space:wrap; text-align:left;" id="TBL-18-4-1"
class="td11"><!--l. 964--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-18-4-2"
class="td11"><!--l. 964--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 848--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-18-4-2"
class="td11"><!--l. 848--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-5-"><td style="white-space:wrap; text-align:left;" id="TBL-18-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 969--><p class="noindent" >
<!--l. 853--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">6.9.3 </span></span> <a
class="cmbx-12">6.9.3 </span></span> <a
id="x28-300006.9.3"></a><span
class="cmr-12">Method: sizeof</span></h5>
class="cmbx-12">Method: sizeof</span></h5>
<div class="center"
>
<!--l. 971--><p class="noindent" >
<!--l. 972--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 855--><p class="noindent" >
<!--l. 856--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">sz</span><span
class="cmtt-12">&#x00A0;=</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;p%sizeof()</span></span></span><br />
</div>
<!--l. 975--><p class="noindent" ><span
class="cmr-12">Return memory footprint in bytes.</span>
<!--l. 988--><p class="noindent" >
<!--l. 859--><p class="noindent" ><span
class="cmbx-12">Return memory footprint in bytes.</span>
<!--l. 862--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">6.9.4 </span></span> <a
class="cmbx-12">6.9.4 </span></span> <a
id="x28-310006.9.4"></a><span
class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></h5>
class="cmbx-12">Method: allocate</span><span
class="cmbx-12">_wrk</span></h5>
<div class="center"
>
<!--l. 990--><p class="noindent" >
<!--l. 991--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 864--><p class="noindent" >
<!--l. 865--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%allocate_wrk(info[,</span><span
class="cmtt-12">&#x00A0;vmold])</span></span></span><br />
</div>
<!--l. 994--><p class="noindent" ><span
class="cmr-12">Allocate internal work vectors. Each application of the preconditioner uses a number of</span>
<!--l. 868--><p class="noindent" ><span
class="cmbx-12">Allocate internal work vectors. Each application of the preconditioner</span>
<span
class="cmr-12">work vectors which are allocated internally as necessary; therefore allocation and</span>
class="cmbx-12">uses a number of work vectors which are allocated internally as</span>
<span
class="cmr-12">deallocation of memory occurs multiple times during the execution of a Krylov method.</span>
class="cmbx-12">necessary; therefore allocation and deallocation of memory occurs</span>
<span
class="cmr-12">In most cases this strategy is perfectly acceptable, but on some platforms, most</span>
class="cmbx-12">multiple times during the execution of a Krylov method. In most cases</span>
<span
class="cmr-12">notably GPUs, memory allocation is a slow operation, and the default behaviour would</span>
class="cmbx-12">this strategy is perfectly acceptable, but on some platforms, most</span>
<span
class="cmr-12">lead to a slowdown. This method allows to trade space for time by preallocating</span>
class="cmbx-12">notably GPUs, memory allocation is a slow operation, and the default</span>
<span
class="cmr-12">the internal workspace outside of the invocation of a Krylov method. When</span>
class="cmbx-12">behaviour would lead to a slowdown. This method allows to trade</span>
<span
class="cmr-12">using GPUs or other specialized devices, the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vmold</span></span></span> <span
class="cmr-12">argument is also necessary</span>
<span
class="cmr-12">to ensure the internal work vectors are of the appropriate dynamic type to</span>
class="cmbx-12">space for time by preallocating the internal workspace outside of the</span>
<span
class="cmr-12">exploit the accelerator hardware; when allocation occurs internally this is</span>
class="cmbx-12">invocation of a Krylov method. When using GPUs or other specialized</span>
<span
class="cmbx-12">devices, the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vmold</span></span></span> <span
class="cmbx-12">argument is also necessary to ensure the internal</span>
<span
class="cmbx-12">work vectors are of the appropriate dynamic type to exploit the</span>
<span
class="cmbx-12">accelerator hardware; when allocation occurs internally this is taken</span>
<span
class="cmr-12">taken care of based on the dynamic type of the </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">care of based on the dynamic type of the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">x</span></span></span> <span
class="cmr-12">argument to the </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">argument to the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span>
<span
class="cmr-12">method.</span>
<!--l. 1010--><p class="noindent" ><span
class="cmbx-12">method.</span>
<!--l. 884--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-19" class="tabular"
cellspacing="0" cellpadding="0"
@ -231,58 +240,60 @@ cellspacing="0" cellpadding="0"
id="TBL-19-1"><col
id="TBL-19-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-19-1-"><td style="white-space:wrap; text-align:left;" id="TBL-19-1-1"
class="td11"><!--l. 1016--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 887--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-19-1-2"
class="td11"><!--l. 1016--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 887--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-2-"><td style="white-space:wrap; text-align:left;" id="TBL-19-2-1"
class="td11"><!--l. 1017--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-19-2-2"
class="td11"><!--l. 1017--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 888--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-19-2-2"
class="td11"><!--l. 888--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-3-"><td style="white-space:wrap; text-align:left;" id="TBL-19-3-1"
class="td11"><!--l. 1018--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 889--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vmold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-19-3-2"
class="td11"><!--l. 1018--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 889--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmbxti-10x-x-120">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-4-"><td style="white-space:wrap; text-align:left;" id="TBL-19-4-1"
class="td11"><!--l. 1019--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-19-4-2"
class="td11"><!--l. 1019--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
class="td11"><!--l. 890--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-19-4-2"
class="td11"><!--l. 890--><p class="noindent" ><span
class="cmbx-12">The desired dynamic type for internal vector components;</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
class="cmbx-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-5-"><td style="white-space:wrap; text-align:left;" id="TBL-19-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 1025--><p class="noindent" >
<!--l. 896--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">6.9.5 </span></span> <a
class="cmbx-12">6.9.5 </span></span> <a
id="x28-320006.9.5"></a><span
class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></h5>
class="cmbx-12">Method: free</span><span
class="cmbx-12">_wrk</span></h5>
<div class="center"
>
<!--l. 1027--><p class="noindent" >
<!--l. 1028--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
<!--l. 898--><p class="noindent" >
<!--l. 899--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%free_wrk(info)</span></span></span><br />
</div>
<!--l. 1031--><p class="noindent" ><span
class="cmr-12">Deallocate internal work vectors.</span>
<!--l. 1034--><p class="noindent" ><span
<!--l. 902--><p class="noindent" ><span
class="cmbx-12">Deallocate internal work vectors.</span>
<!--l. 905--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-20" class="tabular"
cellspacing="0" cellpadding="0"
@ -290,21 +301,23 @@ cellspacing="0" cellpadding="0"
id="TBL-20-1"><col
id="TBL-20-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-20-1-"><td style="white-space:wrap; text-align:left;" id="TBL-20-1-1"
class="td11"><!--l. 1040--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 908--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-20-1-2"
class="td11"><!--l. 1040--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="td11"><!--l. 908--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
class="cmbx-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-2-"><td style="white-space:wrap; text-align:left;" id="TBL-20-2-1"
class="td11"><!--l. 1041--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-20-2-2"
class="td11"><!--l. 1041--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
class="td11"><!--l. 909--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-20-2-2"
class="td11"><!--l. 909--><p class="noindent" ><span
class="cmbx-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
class="cmbx-12">8</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmbx-12">for</span>
<span
class="cmbx-12">details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-3-"><td style="white-space:wrap; text-align:left;" id="TBL-20-3-1"
class="td11"> </td> </tr></table></div>
@ -318,19 +331,19 @@ class="td11"> </td> </tr></table></div>
<!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu17.html#tailuserhtmlsu17.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu18.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse6.html#userhtmlsu18.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 4--><p class="indent" > <a
id="tailuserhtmlsu18.html"></a>
</body></html>

@ -44,7 +44,7 @@ class="cmbx-12">UMFPACK</span> </dt><dd
class="description"><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XUMFPACK"><span
class="cmr-12">9</span></a><span
class="cmr-12">11</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">A sparse LU factorization package included in the SuiteSparse</span>
<span
@ -86,7 +86,7 @@ class="cmbx-12">SuperLU</span> </dt><dd
class="description"><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XSUPERLU"><span
class="cmr-12">10</span></a><span
class="cmr-12">12</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">A sparse LU factorization package available from</span>
<a
@ -108,7 +108,7 @@ class="cmbx-12">_Dist</span> </dt><dd
class="description"><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XSUPERLUDIST"><span
class="cmr-12">19</span></a><span
class="cmr-12">21</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">A sparse LU factorization package available from the same</span>
<span

@ -32,34 +32,38 @@ class="cmr-12">3.3 </span></span> <a
id="x10-90003.3"></a><span
class="cmr-12">Configuration options</span></h4>
<!--l. 100--><p class="noindent" ><span
class="cmr-12">In order to build MLD2P4, the first step is to use the </span><span class="obeylines-h"><span class="verb"><span
class="cmr-12">In order to build AMG4PSBLAS, the first step is to use the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">configure</span></span></span> <span
class="cmr-12">script in the main</span>
class="cmr-12">script in the</span>
<span
class="cmr-12">directory to generate the necessary makefile.</span>
<!--l. 104--><p class="indent" > <span
class="cmr-12">As a minimal example consider the following:</span>
class="cmr-12">main directory to generate the necessary makefile.</span>
<!--l. 105--><p class="indent" > <span
class="cmbx-12">DA RISCRIVERE</span>
<!--l. 107--><p class="indent" > <span
class="cmbx-12">As a minimal example consider the following:</span>
<div class="verbatim" id="verbatim-1">
./configure&#x00A0;--with-psblas=PSB-INSTALL-DIR
</div>
<!--l. 107--><p class="nopar" > <span
class="cmr-12">which assumes that the various MPI compilers and support libraries are available in</span>
<!--l. 110--><p class="nopar" > <span
class="cmbx-12">which assumes that the various MPI compilers and support libraries are</span>
<span
class="cmr-12">the standard directories on the system, and specifies only the PSBLAS install directory</span>
class="cmbx-12">available in the standard directories on the system, and specifies only</span>
<span
class="cmr-12">(note that the latter directory must be specified with an </span><span
class="cmti-12">absolute </span><span
class="cmr-12">path). The full set of</span>
class="cmbx-12">the PSBLAS install directory (note that the latter directory must</span>
<span
class="cmr-12">options may be looked at by issuing the command </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">be specified with an </span><span
class="cmbxti-10x-x-120">absolute </span><span
class="cmbx-12">path). The full set of options may</span>
<span
class="cmbx-12">be looked at by issuing the command </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">./configure</span><span
class="cmtt-12">&#x00A0;--help</span></span></span><span
class="cmr-12">, which</span>
class="cmbx-12">, which</span>
<span
class="cmr-12">produces:</span>
class="cmbx-12">produces:</span>
@ -237,18 +241,17 @@ class="cmr-12">produces:</span>
&#x00A0;<br />
&#x00A0;<br />Report&#x00A0;bugs&#x00A0;to&#x00A0;&#x003C;https://github.com/sfilippone/mld2p4-2/issues&#x003E;.
</div>
<!--l. 278--><p class="nopar" >
<!--l. 280--><p class="indent" > <span
class="cmr-12">For instance, if a user has built and installed PSBLAS 3.5 under the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">/opt</span></span></span> <span
class="cmr-12">directory</span>
<!--l. 281--><p class="nopar" >
<!--l. 283--><p class="indent" > <span
class="cmbx-12">For instance, if a user has built and installed PSBLAS 3.5 under the</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">/opt</span></span></span> <span
class="cmbx-12">directory and is using the SuiteSparse package (which includes</span>
<span
class="cmr-12">and is using the SuiteSparse package (which includes UMFPACK), then MLD2P4</span>
<span
class="cmr-12">might be configured with:</span>
class="cmbx-12">UMFPACK), then MLD2P4 might be configured with:</span>
@ -256,72 +259,74 @@ class="cmr-12">might be configured with:</span>
&#x00A0;./configure&#x00A0;--with-psblas=/opt/psblas-3.5/&#x00A0;\
&#x00A0;<br />&#x00A0;--with-umfpackincdir=/usr/include/suitesparse/
</div>
<!--l. 287--><p class="nopar" > <span
class="cmr-12">Once the configure script has completed execution, it will have generated the file</span>
<span class="obeylines-h"><span class="verb"><span
<!--l. 290--><p class="nopar" > <span
class="cmbx-12">Once the configure script has completed execution, it will have generated</span>
<span
class="cmbx-12">the file </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">Make.inc</span></span></span> <span
class="cmr-12">which will then be used by all Makefiles in the directory tree; this file will be</span>
class="cmbx-12">which will then be used by all Makefiles in the directory</span>
<span
class="cmr-12">copied in the install directory under the name </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">tree; this file will be copied in the install directory under the name</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">Make.inc.MLD2P4</span></span></span><span
class="cmr-12">.</span>
<!--l. 293--><p class="indent" > <span
class="cmr-12">To use the MUMPS solver package, the user has to add the appropriate options to</span>
class="cmbx-12">.</span>
<!--l. 296--><p class="indent" > <span
class="cmbx-12">To use the MUMPS solver package, the user has to add the appropriate</span>
<span
class="cmr-12">the configure script; by default we are looking for the libraries </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">-ldmumps</span><span
class="cmtt-12">&#x00A0;-lsmumps</span></span></span>
class="cmbx-12">options to the configure script; by default we are looking for the libraries</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">-ldmumps</span><span
class="cmtt-12">&#x00A0;-lsmumps</span></span></span> <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#x00A0;-lzmumps</span><span
class="cmtt-12">&#x00A0;-lcmumps</span><span
class="cmtt-12">&#x00A0;-mumps_common</span><span
class="cmtt-12">&#x00A0;-lpord</span></span></span><span
class="cmr-12">. MUMPS often uses additional</span>
class="cmbx-12">. MUMPS often</span>
<span
class="cmr-12">packages such as ScaLAPACK, ParMETIS, SCOTCH, as well as enabling OpenMP; in</span>
class="cmbx-12">uses additional packages such as ScaLAPACK, ParMETIS, SCOTCH, as</span>
<span
class="cmr-12">such cases it is necessary to add linker options with the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">--with-extra-libs</span></span></span> <span
class="cmr-12">configure</span>
class="cmbx-12">well as enabling OpenMP; in such cases it is necessary to add linker options</span>
<span
class="cmr-12">option.</span>
<!--l. 301--><p class="indent" > <span
class="cmr-12">To build the library the user will now enter</span>
class="cmbx-12">with the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">--with-extra-libs</span></span></span> <span
class="cmbx-12">configure option.</span>
<!--l. 304--><p class="indent" > <span
class="cmbx-12">To build the library the user will now enter</span>
<div class="verbatim" id="verbatim-4">
make
</div>
<!--l. 304--><p class="nopar" > <span
class="cmr-12">followed (optionally) by</span>
<!--l. 307--><p class="nopar" > <span
class="cmbx-12">followed (optionally) by</span>
<div class="verbatim" id="verbatim-5">
make&#x00A0;install
</div>
<!--l. 308--><p class="nopar" >
<!--l. 311--><p class="nopar" >
<!--l. 309--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 312--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu4.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu2.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu2.html#tailuserhtmlsu2.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu3.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#userhtmlsu3.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 309--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 312--><p class="indent" > <a
id="tailuserhtmlsu3.html"></a>
</body></html>

@ -10,60 +10,61 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 309--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 312--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu5.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu3.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu3.html#tailuserhtmlsu3.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu4.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#userhtmlsu4.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">3.4 </span></span> <a
class="cmbx-12">3.4 </span></span> <a
id="x11-100003.4"></a><span
class="cmr-12">Bug reporting</span></h4>
<!--l. 310--><p class="noindent" ><span
class="cmr-12">If you find any bugs in our codes, please report them through our issues page</span>
class="cmbx-12">Bug reporting</span></h4>
<!--l. 313--><p class="noindent" ><span
class="cmbx-12">If you find any bugs in our codes, please report them through our issues</span>
<span
class="cmr-12">on</span><br
class="cmbx-12">page on</span><br
class="newline" /> <a
href="https://github.com/sfilippone/mld2p4-2/issues" class="url" ><span
class="cmtt-12">https://github.com/sfilippone/mld2p4-2/issues</span></a><br
class="newline" /><span
class="cmr-12">To enable us to track the bug, please provide a log from the failing application, the</span>
href="https://github.com/psctoolkit/amg4psblas/issues" class="url" ><span
class="cmtt-12">https://github.com/psctoolkit/amg4psblas/issues</span></a><br
class="newline" />
<!--l. 317--><p class="indent" > <span
class="cmbx-12">To enable us to track the bug, please provide a log from the failing</span>
<span
class="cmr-12">test conditions, and ideally a self-contained test program reproducing the</span>
class="cmbx-12">application, the test conditions, and ideally a self-contained test program</span>
<span
class="cmr-12">issue.</span>
class="cmbx-12">reproducing the issue.</span>
<!--l. 326--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 321--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu5.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu3.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu3.html#tailuserhtmlsu3.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu4.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#userhtmlsu4.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
<!--l. 326--><p class="indent" > <a
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 321--><p class="indent" > <a
id="tailuserhtmlsu4.html"></a>
</body></html>

@ -10,69 +10,72 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 326--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 321--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="userhtmlsu4.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu4.html#tailuserhtmlsu4.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu5.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#userhtmlsu5.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">3.5 </span></span> <a
class="cmbx-12">3.5 </span></span> <a
id="x12-110003.5"></a><span
class="cmr-12">Example and test programs</span></h4>
<!--l. 327--><p class="noindent" ><span
class="cmr-12">The package contains the </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">Example and test programs</span></h4>
<!--l. 322--><p class="noindent" ><span
class="cmbx-12">The package contains the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests</span></span></span> <span
class="cmr-12">directories; both of them are</span>
class="cmbx-12">directories; both of them are</span>
<span
class="cmr-12">further divided into </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">further divided into </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">fileread</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">pdegen</span></span></span> <span
class="cmr-12">subdirectories. Their purpose is as</span>
class="cmbx-12">subdirectories. Their purpose is as</span>
<span
class="cmr-12">follows:</span>
class="cmbx-12">follows:</span>
<dl class="description"><dt class="description">
<span
class="cmtt-12">examples</span> </dt><dd
class="description"><span
class="cmr-12">contains a set of simple example programs with a predefined choice of</span>
class="cmbx-12">contains a set of simple example programs with a predefined</span>
<span
class="cmr-12">preconditioners, selectable via integer values. These are intended to get an</span>
class="cmbx-12">choice of preconditioners, selectable via integer values. These</span>
<span
class="cmr-12">acquaintance with the multilevel preconditioners available in MLD2P4.</span>
class="cmbx-12">are intended to get an acquaintance with the multilevel</span>
<span
class="cmbx-12">preconditioners available in AMG4PSBLAS.</span>
</dd><dt class="description">
<span
class="cmtt-12">tests</span> </dt><dd
class="description"><span
class="cmr-12">contains a set of more sophisticated examples that will allow the user, via</span>
class="cmbx-12">contains a set of more sophisticated examples that will allow the</span>
<span
class="cmr-12">the input files in the </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">user, via the input files in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">runs</span></span></span> <span
class="cmr-12">subdirectories, to experiment with the full range</span>
class="cmbx-12">subdirectories, to experiment</span>
<span
class="cmr-12">of preconditioners implemented in the package.</span></dd></dl>
<!--l. 340--><p class="noindent" ><span
class="cmr-12">The </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">with the full range of preconditioners implemented in the package.</span></dd></dl>
<!--l. 335--><p class="noindent" ><span
class="cmbx-12">The </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">fileread</span></span></span> <span
class="cmr-12">directories contain sample programs that read sparse matrices from files,</span>
class="cmbx-12">directories contain sample programs that read sparse matrices</span>
<span
class="cmr-12">according to the Matrix Market or the Harwell-Boeing storage format; the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">pdegen</span></span></span>
class="cmbx-12">from files, according to the Matrix Market or the Harwell-Boeing storage</span>
<span
class="cmr-12">programs generate matrices in full parallel mode from the discretization of a sample</span>
class="cmbx-12">format; the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">pdegen</span></span></span> <span
class="cmbx-12">programs generate matrices in full parallel mode from</span>
<span
class="cmr-12">partial differential equation.</span>
class="cmbx-12">the discretization of a sample partial differential equation.</span>
@ -80,19 +83,19 @@ class="cmr-12">partial differential equation.</span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu4.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu4.html#tailuserhtmlsu4.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu5.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse3.html#userhtmlsu5.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlsu5.html"></a>
</body></html>

@ -11,35 +11,38 @@
</head><body
>
<!--l. 56--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu6.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#userhtmlsu6.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">4.1 </span></span> <a
class="cmbx-12">4.1 </span></span> <a
id="x14-130004.1"></a><span
class="cmr-12">AMG preconditioners</span></h4>
class="cmbx-12">AMG preconditioners</span></h4>
<!--l. 58--><p class="noindent" ><span
class="cmr-12">In order to describe the AMG preconditioners available in MLD2P4, we consider a</span>
class="cmbx-12">In order to describe the AMG preconditioners available in MLD2P4, we</span>
<span
class="cmr-12">linear system</span>
class="cmbx-12">consider a linear system</span>
<table
class="equation"><tr><td>
<center class="math-display" >
<img
src="userhtml2x.png" alt="Ax = b,
" class="math-display" ><a
id="x14-13001r2"></a></center></td><td class="equation-label"><span
class="cmr-12">(2)</span></td></tr></table>
<!--l. 62--><p class="nopar" >
<span
class="cmr-12">where </span><span
class="cmbx-12">where </span><span
class="cmmi-12">A </span><span
class="cmr-12">= (</span><span
class="cmmi-12">a</span><sub><span
@ -50,20 +53,18 @@ class="msbm-10x-x-120">&#x211D;</span><sup><span
class="cmmi-8">n</span><span
class="cmsy-8">&#x00D7;</span><span
class="cmmi-8">n</span></sup> <span
class="cmr-12">is a nonsingular sparse matrix; for ease of presentation we</span>
class="cmbx-12">is a nonsingular sparse matrix; for ease of</span>
<span
class="cmr-12">assume </span><span
class="cmbx-12">presentation we assume </span><span
class="cmmi-12">A </span><span
class="cmr-12">has a symmetric sparsity pattern.</span>
class="cmbx-12">has a symmetric sparsity pattern.</span>
<!--l. 67--><p class="indent" > <span
class="cmr-12">Let us consider as finest index space the set of row (column) indices of </span><span
class="cmbx-12">Let us consider as finest index space the set of row (column) indices of </span><span
class="cmmi-12">A</span><span
class="cmr-12">,</span>
class="cmbx-12">,</span>
<span
class="cmr-12">i.e., &#x03A9; = </span><span
class="cmbx-12">i.e., </span><span
class="cmr-12">&#x03A9; = </span><span
class="cmsy-10x-x-120">{</span><span
class="cmr-12">1</span><span
class="cmmi-12">, </span><span
@ -72,66 +73,68 @@ class="cmmi-12">,</span><span
class="cmmi-12">&#x2026;</span><span
class="cmmi-12">,n</span><span
class="cmsy-10x-x-120">}</span><span
class="cmr-12">. Any algebraic multilevel preconditioners implemented in</span>
class="cmbx-12">. Any algebraic multilevel preconditioners implemented in</span>
<span
class="cmr-12">MLD2P4 generates a hierarchy of index spaces and a corresponding hierarchy of</span>
class="cmbx-12">MLD2P4 generates a hierarchy of index spaces and a corresponding</span>
<span
class="cmr-12">matrices,</span>
class="cmbx-12">hierarchy of matrices,</span>
<center class="math-display" >
<img
src="userhtml3x.png" alt=" 1 2 nlev 1 2 nlev
&#x03A9; &#x2261; &#x03A9; &#x2283; &#x03A9; &#x2283; ...&#x2283; &#x03A9; , A &#x2261; A, A ,...,A ,
src="userhtml3x.png" alt="&#x03A9;1 &#x2261; &#x03A9; &#x2283; &#x03A9;2 &#x2283; ...&#x2283; &#x03A9;nlev, A1 &#x2261; A, A2, ...,Anlev,
" class="math-display" ></center>
<!--l. 72--><p class="nopar" > <span
class="cmr-12">by using the information contained in </span><span
class="cmbx-12">by using the information contained in </span><span
class="cmmi-12">A</span><span
class="cmr-12">, without assuming any knowledge of</span>
class="cmbx-12">, without assuming any knowledge</span>
<span
class="cmr-12">the geometry of the problem from which </span><span
class="cmbx-12">of the geometry of the problem from which </span><span
class="cmmi-12">A </span><span
class="cmr-12">originates. A vector space </span><span
class="cmbx-12">originates. A vector space </span><span
class="msbm-10x-x-120">&#x211D;</span><sup><span
class="cmmi-8">n</span><sub><span
class="cmmi-6">k</span></sub></sup> <span
class="cmr-12">is</span>
class="cmmi-6">k</span></sub></sup>
<span
class="cmr-12">associated with &#x03A9;</span><sup><span
class="cmbx-12">is associated with </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, where </span><span
class="cmbx-12">, where </span><span
class="cmmi-12">n</span><sub>
<span
class="cmmi-8">k</span></sub> <span
class="cmr-12">is the size of &#x03A9;</span><sup><span
class="cmbx-12">is the size of </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">. For all </span><span
class="cmbx-12">. For all </span><span
class="cmmi-12">k &#x003C; nlev</span><span
class="cmr-12">, a restriction</span>
class="cmbx-12">, a</span>
<span
class="cmr-12">operator and a prolongation one are built, which connect two levels </span><span
class="cmmi-12">k </span><span
class="cmr-12">and</span>
class="cmbx-12">restriction operator and a prolongation one are built, which connect two</span>
<span
class="cmbx-12">levels </span><span
class="cmmi-12">k </span><span
class="cmr-12">+ 1:</span>
class="cmbx-12">and </span><span
class="cmmi-12">k </span><span
class="cmr-12">+ 1</span><span
class="cmbx-12">:</span>
<center class="math-display" >
<img
src="userhtml4x.png" alt="P k &#x2208; &#x211D;nk&#x00D7;nk+1, Rk &#x2208; &#x211D;nk+1&#x00D7;nk ;
src="userhtml4x.png" alt=" k nk&#x00D7;nk+1 k nk+1&#x00D7;nk
P &#x2208; &#x211D; , R &#x2208; &#x211D; ;
" class="math-display" ></center>
<!--l. 82--><p class="nopar" > <span
class="cmr-12">the matrix </span><span
class="cmbx-12">the matrix </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup> <span
class="cmr-12">is computed by using the previous operators according to the</span>
class="cmr-8">+1</span></sup> <span
class="cmbx-12">is computed by using the previous operators according to</span>
<span
class="cmr-12">Galerkin approach, i.e.,</span>
class="cmbx-12">the Galerkin approach, i.e.,</span>
<center class="math-display" >
<img
src="userhtml5x.png" alt=" k+1 k k k
A = R A P .
src="userhtml5x.png" alt="Ak+1 = RkAkP k.
" class="math-display" ></center>
<!--l. 87--><p class="nopar" > <span
class="cmr-12">In the current implementation of MLD2P4 we have </span><span
class="cmbx-12">In the current implementation of MLD2P4 we have </span><span
class="cmmi-12">R</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">= (</span><span
@ -139,28 +142,30 @@ class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">)</span><sup><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">A smoother with</span>
class="cmbx-12">A smoother</span>
<span
class="cmr-12">iteration matrix </span><span
class="cmbx-12">with iteration matrix </span><span
class="cmmi-12">M</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is set up at each level </span><span
class="cmbx-12">is set up at each level </span><span
class="cmmi-12">k &#x003C; nlev</span><span
class="cmr-12">, and a solver is set up at the</span>
class="cmbx-12">, and a solver is set</span>
<span
class="cmr-12">coarsest level, so that they are ready for application (for example, setting up a solver</span>
class="cmbx-12">up at the coarsest level, so that they are ready for application (for example,</span>
<span
class="cmr-12">based on the </span><span
class="cmbx-12">setting up a solver based on the </span><span
class="cmmi-12">LU </span><span
class="cmr-12">factorization means computing and storing the </span><span
class="cmbx-12">factorization means computing and</span>
<span
class="cmbx-12">storing the </span><span
class="cmmi-12">L </span><span
class="cmr-12">and </span><span
class="cmbx-12">and </span><span
class="cmmi-12">U </span><span
class="cmr-12">factors). The</span>
class="cmbx-12">factors). The construction of the hierarchy of AMG</span>
<span
class="cmr-12">construction of the hierarchy of AMG components described so far corresponds to the</span>
class="cmbx-12">components described so far corresponds to the so-called build phase of the</span>
<span
class="cmr-12">so-called build phase of the preconditioner.</span>
class="cmbx-12">preconditioner.</span>
<!--l. 95--><p class="indent" > <hr class="figure"><div class="figure"
>
@ -178,9 +183,9 @@ class="cmr-12">so-called build phase of the preconditioner.</span>
cellpadding="0" border="0" cellspacing="0"
class="tabbing"><tr
style="vertical-align:baseline;" class="tabbing"><td style="width:16;"
class="tabbing"> </td><td style="width:16;"
class="tabbing"> </td><td style="width:16;"
class="tabbing"> </td><td
class="tabbing"> </td><td style="width:16;"
class="tabbing"> </td><td style="width:16;"
class="tabbing"> </td><td
class="tabbing"></td></tr></table>
<!--l. 115--><p class="noindent" ><table
cellpadding="0" border="0" cellspacing="0"
@ -331,69 +336,71 @@ class="content">Application phase of a V-cycle preconditioner.</span></div><!--t
<!--l. 118--><p class="indent" > </div><hr class="endfigure">
<!--l. 120--><p class="indent" > <span
class="cmr-12">The components produced in the build phase may be combined in several ways to</span>
class="cmbx-12">The components produced in the build phase may be combined in</span>
<span
class="cmr-12">obtain different multilevel preconditioners; this is done in the application phase, i.e., in</span>
class="cmbx-12">several ways to obtain different multilevel preconditioners; this is done in</span>
<span
class="cmr-12">the computation of a vector of type </span><span
class="cmbx-12">the application phase, i.e., in the computation of a vector of type </span><span
class="cmmi-12">w </span><span
class="cmr-12">= </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmmi-12">v</span><span
class="cmr-12">, where </span><span
class="cmbx-12">,</span>
<span
class="cmbx-12">where </span><span
class="cmmi-12">B </span><span
class="cmr-12">denotes the preconditioner,</span>
class="cmbx-12">denotes the preconditioner, usually within an iteration of a Krylov</span>
<span
class="cmr-12">usually within an iteration of a Krylov solver </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">solver </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XSaad_book"><span
class="cmr-12">21</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. An example of such a combination,</span>
class="cmbx-12">23</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">. An example of such a combination, known as V-cycle, is given in</span>
<span
class="cmr-12">known as V-cycle, is given in Figure</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">Figure</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x14-130021"><span
class="cmr-12">1</span><!--tex4ht:ref: fig:application_alg --></a><span
class="cmr-12">. In this case, a single iteration of the same</span>
class="cmbx-12">1</span><!--tex4ht:ref: fig:application_alg --></a><span
class="cmbx-12">. In this case, a single iteration of the same smoother is used before</span>
<span
class="cmr-12">smoother is used before and after the the recursive call to the V-cycle (i.e., in the</span>
class="cmbx-12">and after the the recursive call to the V-cycle (i.e., in the pre-smoothing</span>
<span
class="cmr-12">pre-smoothing and post-smoothing phases); however, different choices can be</span>
class="cmbx-12">and post-smoothing phases); however, different choices can be performed.</span>
<span
class="cmr-12">performed. Other cycles can be defined; in MLD2P4, we implemented the</span>
class="cmbx-12">Other cycles can be defined; in MLD2P4, we implemented the standard</span>
<span
class="cmr-12">standard V-cycle and W-cycle</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">V-cycle and W-cycle</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span
class="cmr-12">3</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">, and a version of the K-cycle described</span>
class="cmbx-12">3</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">, and a version of the K-cycle described</span>
<span
class="cmr-12">in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">in</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XNotay2008"><span
class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
class="cmbx-12">22</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span>
<!--l. 133--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu6.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#userhtmlsu6.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 133--><p class="indent" > <a
id="tailuserhtmlsu6.html"></a>
</body></html>

@ -11,89 +11,96 @@
</head><body
>
<!--l. 133--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu8.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu6.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu6.html#tailuserhtmlsu6.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu7.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#userhtmlsu7.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">4.2 </span></span> <a
class="cmbx-12">4.2 </span></span> <a
id="x15-140004.2"></a><span
class="cmr-12">Smoothed Aggregation</span></h4>
class="cmbx-12">Smoothed Aggregation</span></h4>
<!--l. 135--><p class="noindent" ><span
class="cmr-12">In order to define the prolongator </span><span
class="cmbx-12">In order to define the prolongator </span><span
class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, used to compute the coarse-level matrix </span><span
class="cmbx-12">, used to compute the coarse-level</span>
<span
class="cmbx-12">matrix </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup><span
class="cmr-12">,</span>
class="cmbx-12">, MLD2P4 uses the smoothed aggregation algorithm described</span>
<span
class="cmr-12">MLD2P4 uses the smoothed aggregation algorithm described in </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">in </span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span
class="cmr-12">2</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">2</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">26</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. The basic idea</span>
class="cmbx-12">28</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">. The basic idea of this algorithm is to build a coarse set of indices</span>
<span
class="cmr-12">of this algorithm is to build a coarse set of indices &#x03A9;</span><sup><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup> <span
class="cmr-12">by suitably grouping the</span>
<span
class="cmr-12">indices of &#x03A9;</span><sup><span
class="cmr-8">+1</span></sup> <span
class="cmbx-12">by suitably grouping the indices of </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">into disjoint subsets (aggregates), and to define the coarse-to-fine space</span>
class="cmbx-12">into disjoint subsets</span>
<span
class="cmr-12">transfer operator </span><span
class="cmbx-12">(aggregates), and to define the coarse-to-fine space transfer operator </span><span
class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">by applying a suitable smoother to a simple piecewise constant</span>
class="cmbx-12">by</span>
<span
class="cmr-12">prolongation operator, with the aim of improving the quality of the coarse-space</span>
class="cmbx-12">applying a suitable smoother to a simple piecewise constant prolongation</span>
<span
class="cmr-12">correction.</span>
class="cmbx-12">operator, with the aim of improving the quality of the coarse-space</span>
<span
class="cmbx-12">correction.</span>
<!--l. 144--><p class="indent" > <span
class="cmr-12">Three main steps can be identified in the smoothed aggregation procedure:</span>
class="cmbx-12">Three main steps can be identified in the smoothed aggregation</span>
<span
class="cmbx-12">procedure:</span>
<ol class="enumerate1" >
<li
class="enumerate" id="x15-14002x1"><span
class="cmr-12">aggregation of the indices of &#x03A9;</span><sup><span
class="cmbx-12">aggregation of the indices of </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">to obtain &#x03A9;</span><sup><span
class="cmbx-12">to obtain </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup><span
class="cmr-12">;</span>
class="cmbx-12">;</span>
</li>
<li
class="enumerate" id="x15-14004x2"><span
class="cmr-12">construction of the prolongator </span><span
class="cmbx-12">construction of the prolongator </span><span
class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">;</span>
class="cmbx-12">;</span>
</li>
<li
class="enumerate" id="x15-14006x3"><span
class="cmr-12">application of </span><span
class="cmbx-12">application of </span><span
class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">and </span><span
class="cmbx-12">and </span><span
class="cmmi-12">R</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">= (</span><span
@ -101,51 +108,51 @@ class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">)</span><sup><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">to build </span><span
class="cmbx-12">to build </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup><span
class="cmr-12">.</span></li></ol>
class="cmbx-12">.</span></li></ol>
<!--l. 151--><p class="indent" > <span
class="cmr-12">In order to perform the coarsening step, the smoothed aggregation algorithm</span>
class="cmbx-12">In order to perform the coarsening step, the smoothed aggregation</span>
<span
class="cmr-12">described in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">algorithm described in</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">26</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">is used. In this algorithm, each index </span><span
class="cmbx-12">28</span></a><span
class="cmbx-12">]</span></span> <span
class="cmbx-12">is used. In this algorithm, each index </span><span
class="cmmi-12">j </span><span
class="cmsy-10x-x-120">&#x2208; </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup> <span
class="cmr-12">corresponds</span>
class="cmr-8">+1</span></sup>
<span
class="cmr-12">to an aggregate &#x03A9;</span><sub><span
class="cmbx-12">corresponds to an aggregate </span><span
class="cmr-12">&#x03A9;</span><sub><span
class="cmmi-8">j</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">of &#x03A9;</span><sup><span
class="cmbx-12">of </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, consisting of a suitably chosen index </span><span
class="cmbx-12">, consisting of a suitably chosen index</span>
<span
class="cmmi-12">i </span><span
class="cmsy-10x-x-120">&#x2208; </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">and</span>
class="cmbx-12">and indices that are (usually) contained in a strongly-coupled</span>
<span
class="cmr-12">indices that are (usually) contained in a strongly-coupled neighborood of </span><span
class="cmbx-12">neighborood of </span><span
class="cmmi-12">i</span><span
class="cmr-12">,</span>
<span
class="cmr-12">i.e.,</span>
class="cmbx-12">, i.e.,</span>
<table
class="equation"><tr><td>
<center class="math-display" >
<img
src="userhtml13x.png" alt=" { &#x2218; -------}
&#x03A9;kj &#x2282; N ki (&#x03B8;) = r &#x2208; &#x03A9;k : |akir| &#x003E; &#x03B8; |akiiakrr| &#x222A; {i} ,
src="userhtml13x.png" alt=" { &#x2218; ------}
&#x03A9;kj &#x2282; N ki (&#x03B8;) = r &#x2208; &#x03A9;k : |akir| &#x003E; &#x03B8; |akiiakrr| &#x222A; {i} ,
" class="math-display" ><a
id="x15-14007r3"></a></center></td><td class="equation-label"><span
class="cmr-12">(3)</span></td></tr></table>
@ -154,53 +161,57 @@ class="cmr-12">(3)</span></td></tr></table>
<!--l. 160--><p class="nopar" >
<span
class="cmr-12">for a given threshold </span><span
class="cmbx-12">for a given threshold </span><span
class="cmmi-12">&#x03B8; </span><span
class="cmsy-10x-x-120">&#x2208; </span><span
class="cmr-12">[0</span><span
class="cmmi-12">, </span><span
class="cmr-12">1] (see</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmr-12">1] </span><span
class="cmbx-12">(see</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">26</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">for the details). Since this algorithm has a</span>
class="cmbx-12">28</span></a><span
class="cmbx-12">]</span></span> <span
class="cmbx-12">for the details). Since this algorithm</span>
<span
class="cmbx-12">has a sequential nature, a decoupled version of it is applied, where each</span>
<span
class="cmr-12">sequential nature, a decoupled version of it is applied, where each processor</span>
class="cmbx-12">processor independently executes the algorithm on the set of indices</span>
<span
class="cmr-12">independently executes the algorithm on the set of indices assigned to it in the initial</span>
class="cmbx-12">assigned to it in the initial data distribution. This version is embarrassingly</span>
<span
class="cmr-12">data distribution. This version is embarrassingly parallel, since it does not require any</span>
class="cmbx-12">parallel, since it does not require any data communication. On the other</span>
<span
class="cmr-12">data communication. On the other hand, it may produce some nonuniform aggregates</span>
class="cmbx-12">hand, it may produce some nonuniform aggregates and is strongly</span>
<span
class="cmr-12">and is strongly dependent on the number of processors and on the initial</span>
class="cmbx-12">dependent on the number of processors and on the initial partitioning of</span>
<span
class="cmr-12">partitioning of the matrix </span><span
class="cmbx-12">the matrix </span><span
class="cmmi-12">A</span><span
class="cmr-12">. Nevertheless, this parallel algorithm has been chosen</span>
class="cmbx-12">. Nevertheless, this parallel algorithm has been chosen for</span>
<span
class="cmr-12">for MLD2P4, since it has been shown to produce good results in practice</span>
class="cmbx-12">MLD2P4, since it has been shown to produce good results in practice</span>
<span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlli4.html#Xaaecc_07"><span
class="cmr-12">5</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">5</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#Xapnum_07"><span
class="cmr-12">7</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">7</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#XTUMINARO_TONG"><span
class="cmr-12">25</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
class="cmbx-12">27</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span>
<!--l. 172--><p class="indent" > <span
class="cmr-12">The prolongator </span><span
class="cmbx-12">The prolongator </span><span
class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is built starting from a tentative prolongator</span> <span class="bar-css"><span
class="cmbx-12">is built starting from a tentative prolongator</span>
<span class="bar-css"><span
class="cmmi-12">P</span></span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmsy-10x-x-120">&#x2208; </span><span
@ -211,41 +222,41 @@ class="cmsy-8">&#x00D7;</span><span
class="cmmi-8">n</span><sub><span
class="cmmi-6">k</span><span
class="cmr-6">+1</span></sub></sup><span
class="cmr-12">,</span>
<span
class="cmr-12">defined as</span>
class="cmbx-12">, defined as</span>
<table
class="equation"><tr><td>
<center class="math-display" >
<img
src="userhtml14x.png" alt=" { k
P¯k = (¯pkij), p¯kij = 1 if i &#x2208; &#x03A9; j,
0 otherwise,
src="userhtml14x.png" alt=" { k
P¯k = (¯pk), ¯pk = 1 if i &#x2208; &#x03A9; j,
ij ij 0 otherwise,
" class="math-display" ><a
id="x15-14008r4"></a></center></td><td class="equation-label"><span
class="cmr-12">(4)</span></td></tr></table>
<!--l. 181--><p class="nopar" >
<span
class="cmr-12">where &#x03A9;</span><sub><span
class="cmbx-12">where </span><span
class="cmr-12">&#x03A9;</span><sub><span
class="cmmi-8">j</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is the aggregate of &#x03A9;</span><sup><span
class="cmbx-12">is the aggregate of </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">corresponding to the index </span><span
class="cmbx-12">corresponding to the index </span><span
class="cmmi-12">j </span><span
class="cmsy-10x-x-120">&#x2208; </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span><span
class="cmr-8">+1</span></sup><span
class="cmr-12">. </span><span
class="cmbx-12">. </span><span
class="cmmi-12">P</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is obtained</span>
class="cmbx-12">is</span>
<span
class="cmr-12">by applying to</span> <span class="bar-css"><span
class="cmbx-12">obtained by applying to</span> <span class="bar-css"><span
class="cmmi-12">P</span></span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">a smoother </span><span
class="cmbx-12">a smoother </span><span
class="cmmi-12">S</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmsy-10x-x-120">&#x2208; </span><span
@ -255,45 +266,48 @@ class="cmmi-6">k</span></sub><span
class="cmsy-8">&#x00D7;</span><span
class="cmmi-8">n</span><sub><span
class="cmmi-6">k</span></sub></sup><span
class="cmr-12">:</span>
class="cmbx-12">:</span>
<center class="math-display" >
<img
src="userhtml15x.png" alt="Pk = Sk ¯Pk, " class="math-display" ></center> <span
class="cmr-12">in</span>
src="userhtml15x.png" alt="Pk = Sk ¯P k, " class="math-display" ></center>
<span
class="cmbx-12">in order to remove nonsmooth components from the range of the</span>
<span
class="cmr-12">order to remove nonsmooth components from the range of the prolongator, and hence</span>
class="cmbx-12">prolongator, and hence to improve the convergence properties of the</span>
<span
class="cmr-12">to improve the convergence properties of the multilevel method</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">multilevel method</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span
class="cmr-12">2</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">2</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#XStuben_01"><span
class="cmr-12">24</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. A simple</span>
<span
class="cmr-12">choice for </span><span
class="cmbx-12">26</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">. A simple choice for </span><span
class="cmmi-12">S</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is the damped Jacobi smoother:</span>
class="cmbx-12">is the damped Jacobi</span>
<span
class="cmbx-12">smoother:</span>
<center class="math-display" >
<img
src="userhtml16x.png" alt=" k k k -1 k
S = I - &#x03C9; (D ) A F,
src="userhtml16x.png" alt="Sk = I - &#x03C9;k(Dk )-1AkF,
" class="math-display" ></center>
<!--l. 195--><p class="nopar" > <span
class="cmr-12">where </span><span
class="cmbx-12">where </span><span
class="cmmi-12">D</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is the diagonal matrix with the same diagonal entries as </span><span
class="cmbx-12">is the diagonal matrix with the same diagonal entries as </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, </span><span
class="cmmi-12">A</span><sub>
class="cmbx-12">,</span>
<span
class="cmmi-12">A</span><sub><span
class="cmmi-8">F</span> </sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">= (</span><span class="bar-css"><span
@ -301,33 +315,37 @@ class="cmmi-12">a</span></span><sub>
<span
class="cmmi-8">ij</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">) is</span>
<span
class="cmr-12">the filtered matrix defined as</span>
class="cmr-12">) </span><span
class="cmbx-12">is the filtered matrix defined as</span>
<table
class="equation"><tr><td>
<center class="math-display" >
<img
src="userhtml17x.png" alt=" { k k &#x2211;
a¯kij = aij if j &#x2208; N i (&#x03B8;), (j &#x2044;= i), ¯akii = akii - (akij - ¯akij),
0 otherwise, j&#x2044;=i
src="userhtml17x.png" alt=" {
¯ak = akij if j &#x2208; N ki (&#x03B8;), (j &#x2044;= i), ¯ak = ak - &#x2211; (ak - ¯ak),
ij 0 otherwise, ii ii ij ij
j&#x2044;=i
" class="math-display" ><a
id="x15-14009r5"></a></center></td><td class="equation-label"><span
class="cmr-12">(5)</span></td></tr></table>
<!--l. 208--><p class="nopar" >
<span
class="cmr-12">and </span><span
class="cmbx-12">and </span><span
class="cmmi-12">&#x03C9;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is an approximation of 4</span><span
class="cmbx-12">is an approximation of </span><span
class="cmr-12">4</span><span
class="cmmi-12">&#x2215;</span><span
class="cmr-12">(3</span><span
class="cmmi-12">&#x03C1;</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">), where </span><span
class="cmr-12">)</span><span
class="cmbx-12">, where </span><span
class="cmmi-12">&#x03C1;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is the spectral radius of (</span><span
class="cmbx-12">is the spectral radius of</span>
<span
class="cmr-12">(</span><span
class="cmmi-12">D</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">)</span><sup><span
@ -336,60 +354,61 @@ class="cmr-8">1</span></sup><span
class="cmmi-12">A</span><sub>
<span
class="cmmi-8">F</span> </sub><sup><span
class="cmmi-8">k</span></sup>
<span class="cite"><span
class="cmr-12">[</span><a
class="cmmi-8">k</span></sup> <span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span
class="cmr-12">2</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. In MLD2P4 this approximation is obtained by using </span><span
class="cmbx-12">2</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">. In MLD2P4 this approximation is obtained by using </span><span
class="cmsy-10x-x-120">&#x2225;</span><span
class="cmmi-12">A</span><sub><span
class="cmmi-12">A</span><sub>
<span
class="cmmi-8">F</span> </sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmsy-10x-x-120">&#x2225;</span><sub>
<span
class="cmsy-8">&#x221E;</span></sub> <span
class="cmr-12">as an estimate of </span><span
class="cmsy-8">&#x221E;</span></sub>
<span
class="cmbx-12">as an estimate of </span><span
class="cmmi-12">&#x03C1;</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">.</span>
class="cmbx-12">. Note that for systems coming from uniformly</span>
<span
class="cmr-12">Note that for systems coming from uniformly elliptic problems, filtering the matrix </span><span
class="cmbx-12">elliptic problems, filtering the matrix </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span></sup>
class="cmmi-8">k</span></sup> <span
class="cmbx-12">has little or no effect, and</span>
<span
class="cmr-12">has little or no effect, and </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">can be used instead of </span><span
class="cmbx-12">can be used instead of </span><span
class="cmmi-12">A</span><sub>
<span
class="cmmi-8">F</span> </sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">. The latter choice is the</span>
class="cmbx-12">. The latter choice is the default in</span>
<span
class="cmr-12">default in MLD2P4.</span>
class="cmbx-12">MLD2P4.</span>
<!--l. 216--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu8.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">next</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu6.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu6.html#tailuserhtmlsu6.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#userhtmlsu7.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 216--><p class="indent" > <a
id="tailuserhtmlsu7.html"></a>
</body></html>

@ -11,69 +11,73 @@
</head><body
>
<!--l. 216--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu7.html#tailuserhtmlsu7.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="#tailuserhtmlsu8.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#userhtmlsu8.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">4.3 </span></span> <a
class="cmbx-12">4.3 </span></span> <a
id="x16-150004.3"></a><span
class="cmr-12">Smoothers and coarsest-level solvers</span></h4>
class="cmbx-12">Smoothers and coarsest-level solvers</span></h4>
<!--l. 218--><p class="noindent" ><span
class="cmr-12">The smoothers implemented in MLD2P4 include the Jacobi and block-Jacobi methods,</span>
class="cmbx-12">The smoothers implemented in MLD2P4 include the Jacobi and</span>
<span
class="cmr-12">a hybrid version of the forward and backward Gauss-Seidel methods, and the additive</span>
class="cmbx-12">block-Jacobi methods, a hybrid version of the forward and backward</span>
<span
class="cmr-12">Schwarz (AS) ones (see, e.g., </span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">Gauss-Seidel methods, and the additive Schwarz (AS) ones (see, e.g.,</span>
<span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XSaad_book"><span
class="cmr-12">21</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">23</span></a><span
class="cmbx-12">,</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlli4.html#Xdd2_96"><span
class="cmr-12">22</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">).</span>
class="cmbx-12">24</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">).</span>
<!--l. 222--><p class="indent" > <span
class="cmr-12">The hybrid Gauss-Seidel version is considered because the original Gauss-Seidel</span>
class="cmbx-12">The hybrid Gauss-Seidel version is considered because the original</span>
<span
class="cmr-12">method is inherently sequential. At each iteration of the hybrid version, each parallel</span>
class="cmbx-12">Gauss-Seidel method is inherently sequential. At each iteration of the</span>
<span
class="cmr-12">process uses the most recent values of its own local variables and the values</span>
class="cmbx-12">hybrid version, each parallel process uses the most recent values of its own</span>
<span
class="cmr-12">of the non-local variables computed at the previous iteration, obtained by</span>
class="cmbx-12">local variables and the values of the non-local variables computed at the</span>
<span
class="cmr-12">exchanging data with other processes before the beginning of the current</span>
class="cmbx-12">previous iteration, obtained by exchanging data with other processes before</span>
<span
class="cmr-12">iteration.</span>
class="cmbx-12">the beginning of the current iteration.</span>
<!--l. 229--><p class="indent" > <span
class="cmr-12">In the AS methods, the index space &#x03A9;</span><sup><span
class="cmbx-12">In the AS methods, the index space </span><span
class="cmr-12">&#x03A9;</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is divided into </span><span
class="cmbx-12">is divided into </span><span
class="cmmi-12">m</span><sub>
<span
class="cmmi-8">k</span></sub> <span
class="cmr-12">subsets &#x03A9;</span><sub><span
class="cmbx-12">subsets </span><span
class="cmr-12">&#x03A9;</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">of</span>
class="cmbx-12">of</span>
<span
class="cmr-12">size </span><span
class="cmbx-12">size </span><span
class="cmmi-12">n</span><sub><span
class="cmmi-8">k,i</span></sub><span
class="cmr-12">, possibly overlapping. For each </span><span
class="cmbx-12">, possibly overlapping. For each </span><span
class="cmmi-12">i </span><span
class="cmr-12">we consider the restriction operator</span>
class="cmbx-12">we consider the restriction</span>
<span
class="cmbx-12">operator </span><span
class="cmmi-12">R</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
@ -84,25 +88,27 @@ class="cmmi-6">k,i</span></sub><span
class="cmsy-8">&#x00D7;</span><span
class="cmmi-8">n</span><sub><span
class="cmmi-6">k</span></sub></sup> <span
class="cmr-12">that maps a vector </span><span
class="cmbx-12">that maps a vector </span><span
class="cmmi-12">x</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">to the vector </span><span
class="cmbx-12">to the vector </span><span
class="cmmi-12">x</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">made of the components of</span>
class="cmbx-12">made of the</span>
<span
class="cmbx-12">components of </span><span
class="cmmi-12">x</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">with indices in &#x03A9;</span><sub>
class="cmbx-12">with indices in </span><span
class="cmr-12">&#x03A9;</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, and the prolongation operator </span><span
class="cmmi-12">P</span><sub>
class="cmbx-12">, and the prolongation operator</span>
<span
class="cmmi-12">P</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">= (</span><span
@ -112,10 +118,9 @@ class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">)</span><sup><span
class="cmmi-8">T</span> </sup><span
class="cmr-12">. These</span>
class="cmbx-12">. These operators are then used to build </span><span
class="cmmi-12">A</span><sub>
<span
class="cmr-12">operators are then used to build </span><span
class="cmmi-12">A</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">= </span><span
@ -129,39 +134,41 @@ class="cmmi-12">P</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, which is the restriction of</span>
class="cmbx-12">, which is</span>
<span
class="cmbx-12">the restriction of </span><span
class="cmmi-12">A</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">to the index space &#x03A9;</span><sub>
class="cmbx-12">to the index space </span><span
class="cmr-12">&#x03A9;</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">. The classical AS preconditioner </span><span
class="cmmi-12">M</span><sub>
class="cmbx-12">. The classical AS preconditioner</span>
<span
class="cmmi-12">M</span><sub><span
class="cmmi-8">AS</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is defined</span>
<span
class="cmr-12">as</span>
class="cmbx-12">is defined as</span>
<center class="math-display" >
<img
src="userhtml18x.png" alt=" m&#x2211;k
(M AkS )-1 = Pki (Aki)-1Rki,
i=1
src="userhtml18x.png" alt=" k -1 m&#x2211;k k k -1 k
(M AS) = Pi (A i) R i,
i=1
" class="math-display" ></center>
<!--l. 241--><p class="nopar" > <span
class="cmr-12">where </span><span
class="cmbx-12">where </span><span
class="cmmi-12">A</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is supposed to be nonsingular. We observe that an approximate inverse of</span>
class="cmbx-12">is supposed to be nonsingular. We observe that an approximate</span>
<span
class="cmbx-12">inverse of </span><span
class="cmmi-12">A</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">is usually considered instead of (</span><span
class="cmbx-12">is usually considered instead of </span><span
class="cmr-12">(</span><span
class="cmmi-12">A</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
@ -169,47 +176,48 @@ class="cmmi-8">k</span></sup><span
class="cmr-12">)</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">. The setup of </span><span
class="cmbx-12">. The setup of </span><span
class="cmmi-12">M</span><sub>
<span
class="cmmi-8">AS</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">during the multilevel</span>
class="cmmi-8">k</span></sup>
<span
class="cmr-12">build phase involves</span>
class="cmbx-12">during the multilevel build phase involves</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">the definition of the index subspaces &#x03A9;</span><sub><span
class="cmbx-12">the definition of the index subspaces </span><span
class="cmr-12">&#x03A9;</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">and of the corresponding operators</span>
class="cmbx-12">and of the corresponding</span>
<span
class="cmbx-12">operators </span><span
class="cmmi-12">R</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">(and </span><span
class="cmbx-12">(and </span><span
class="cmmi-12">P</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">);</span>
class="cmbx-12">);</span>
</li>
<li class="itemize"><span
class="cmr-12">the computation of the submatrices </span><span
class="cmbx-12">the computation of the submatrices </span><span
class="cmmi-12">A</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">;</span>
class="cmbx-12">;</span>
</li>
<li class="itemize"><span
class="cmr-12">the computation of their inverses (usually approximated through some form</span>
class="cmbx-12">the computation of their inverses (usually approximated through</span>
<span
class="cmr-12">of incomplete factorization).</span></li></ul>
class="cmbx-12">some form of incomplete factorization).</span></li></ul>
<!--l. 253--><p class="noindent" ><span
class="cmr-12">The computation of </span><span
class="cmbx-12">The computation of </span><span
class="cmmi-12">z</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">= </span><span
@ -219,27 +227,27 @@ class="cmmi-8">AS</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmmi-12">w</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">, with </span><span
class="cmbx-12">, with </span><span
class="cmmi-12">w</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmsy-10x-x-120">&#x2208; </span><span
class="msbm-10x-x-120">&#x211D;</span><sup><span
class="cmmi-8">n</span><sub><span
class="cmmi-6">k</span></sub></sup><span
class="cmr-12">, during the multilevel application</span>
class="cmbx-12">, during the multilevel</span>
<span
class="cmr-12">phase, requires</span>
class="cmbx-12">application phase, requires</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">the restriction of </span><span
class="cmbx-12">the restriction of </span><span
class="cmmi-12">w</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmr-12">to the subspaces </span><span
class="cmbx-12">to the subspaces </span><span
class="msbm-10x-x-120">&#x211D;</span><sup><span
class="cmmi-8">n</span><sub><span
class="cmmi-6">k,i</span></sub></sup><span
class="cmr-12">, i.e.</span><span
class="cmr-12">&#x00A0;</span><span
class="cmbx-12">, i.e.</span><span
class="cmbx-12">&#x00A0;</span><span
class="cmmi-12">w</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
@ -251,10 +259,10 @@ class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmmi-12">w</span><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">;</span>
class="cmbx-12">;</span>
</li>
<li class="itemize"><span
class="cmr-12">the computation of the vectors </span><span
class="cmbx-12">the computation of the vectors </span><span
class="cmmi-12">z</span><sub><span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup> <span
@ -270,13 +278,13 @@ class="cmmi-12">w</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">;</span>
class="cmbx-12">;</span>
</li>
<li class="itemize"><span
class="cmr-12">the prolongation and the sum of the previous vectors, i.e.</span><span
class="cmr-12">&#x00A0;</span><span
class="cmbx-12">the prolongation and the sum of the previous vectors, i.e.</span><span
class="cmbx-12">&#x00A0;</span><span
class="cmmi-12">z</span><sup><span
class="cmmi-8">k</span></sup> <span
class="cmmi-8">k</span></sup> <span
class="cmr-12">=</span>
<span
class="cmex-10x-x-120">&#x2211;</span>
@ -293,43 +301,47 @@ class="cmmi-12">z</span><sub>
<span
class="cmmi-8">i</span></sub><sup><span
class="cmmi-8">k</span></sup><span
class="cmr-12">.</span></li></ul>
class="cmbx-12">.</span></li></ul>
<!--l. 262--><p class="noindent" ><span
class="cmr-12">Variants of the classical AS method, which use modifications of the restriction and</span>
class="cmbx-12">Variants of the classical AS method, which use modifications of the restriction</span>
<span
class="cmr-12">prolongation operators, are also implemented in MLD2P4. Among them, the Restricted</span>
class="cmbx-12">and prolongation operators, are also implemented in MLD2P4. Among</span>
<span
class="cmr-12">AS (RAS) preconditioner usually outperforms the classical AS preconditioner in terms</span>
class="cmbx-12">them, the Restricted AS (RAS) preconditioner usually outperforms</span>
<span
class="cmr-12">of convergence rate and of computation and communication time on parallel</span>
class="cmbx-12">the classical AS preconditioner in terms of convergence rate and of</span>
<span
class="cmr-12">distributed-memory computers, and is therefore the most widely used among the AS</span>
class="cmbx-12">computation and communication time on parallel distributed-memory</span>
<span
class="cmr-12">preconditioners</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">computers, and is therefore the most widely used among the AS</span>
<span
class="cmbx-12">preconditioners</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XCAI_SARKIS"><span
class="cmr-12">6</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
class="cmbx-12">6</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span>
<!--l. 270--><p class="indent" > <span
class="cmr-12">Direct solvers based on sparse LU factorizations, implemented in the third-party</span>
class="cmbx-12">Direct solvers based on sparse LU factorizations, implemented in</span>
<span
class="cmr-12">libraries reported in Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">the third-party libraries reported in Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu2.html#x9-80003.2"><span
class="cmr-12">3.2</span><!--tex4ht:ref: sec:third-party --></a><span
class="cmr-12">, can be applied as coarsest-level solvers by</span>
class="cmbx-12">3.2</span><!--tex4ht:ref: sec:third-party --></a><span
class="cmbx-12">, can be applied as</span>
<span
class="cmbx-12">coarsest-level solvers by MLD2P4. Native inexact solvers based on</span>
<span
class="cmr-12">MLD2P4. Native inexact solvers based on incomplete LU factorizations, as well as</span>
class="cmbx-12">incomplete LU factorizations, as well as Jacobi, hybrid (forward)</span>
<span
class="cmr-12">Jacobi, hybrid (forward) Gauss-Seidel, and block Jacobi preconditioners are</span>
class="cmbx-12">Gauss-Seidel, and block Jacobi preconditioners are also available. Direct</span>
<span
class="cmr-12">also available. Direct solvers usually lead to more effective preconditioners in</span>
class="cmbx-12">solvers usually lead to more effective preconditioners in terms of</span>
<span
class="cmr-12">terms of algorithmic scalability; however, this does not guarantee parallel</span>
class="cmbx-12">algorithmic scalability; however, this does not guarantee parallel</span>
<span
class="cmr-12">efficiency.</span>
class="cmbx-12">efficiency.</span>
@ -337,19 +349,19 @@ class="cmr-12">efficiency.</span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu7.html#tailuserhtmlsu7.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">prev-tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlsu8.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse4.html#userhtmlsu8.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlsu8.html"></a>
</body></html>

@ -10,102 +10,107 @@
<link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body
>
<!--l. 122--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
<!--l. 109--><div class="crosslinks"><p class="noindent"><span
class="cmbx-12">[</span><a
href="#tailuserhtmlsu9.html"><span
class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">tail</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html#userhtmlsu9.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.1 </span></span> <a
class="cmbx-12">5.1 </span></span> <a
id="x18-170005.1"></a><span
class="cmr-12">Examples</span></h4>
<!--l. 124--><p class="noindent" ><span
class="cmr-12">The code reported in Figure</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">Examples</span></h4>
<!--l. 111--><p class="noindent" ><span
class="cmbx-12">The code reported in Figure</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x18-170012"><span
class="cmr-12">2</span><!--tex4ht:ref: fig:ex1 --></a> <span
class="cmr-12">shows how to set and apply the default multilevel</span>
class="cmbx-12">2</span><!--tex4ht:ref: fig:ex1 --></a> <span
class="cmbx-12">shows how to set and apply the default</span>
<span
class="cmr-12">preconditioner available in the real double precision version of MLD2P4 (see Table</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">multilevel preconditioner available in the real double precision version of</span>
<span
class="cmbx-12">AMG4PSBLAS (see Table</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse5.html#x17-160151"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">).</span>
class="cmbx-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmbx-12">). This preconditioner is chosen by simply</span>
<span
class="cmr-12">This preconditioner is chosen by simply specifying </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">specifying </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;ML&#8217;</span></span></span> <span
class="cmr-12">as the second argument of</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">as the second argument of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">P%init</span></span></span> <span
class="cmr-12">(a call to </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">(a call to </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">P%set</span></span></span> <span
class="cmr-12">is not needed) and is applied with the CG solver provided by</span>
class="cmbx-12">is not</span>
<span
class="cmr-12">PSBLAS (the matrix of the system to be solved is assumed to be positive definite). As</span>
class="cmbx-12">needed) and is applied with the CG solver provided by PSBLAS (the</span>
<span
class="cmr-12">previously observed, the modules </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_base_mod</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_prec_mod</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov_mod</span></span></span>
class="cmbx-12">matrix of the system to be solved is assumed to be positive definite). As</span>
<span
class="cmr-12">must be used by the example program.</span>
<!--l. 134--><p class="indent" > <span
class="cmr-12">The part of the code concerning the reading and assembling of the sparse matrix</span>
class="cmbx-12">previously observed, the modules </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_base_mod</span></span></span><span
class="cmbx-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_prec_mod</span></span></span> <span
class="cmbx-12">and</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov_mod</span></span></span> <span
class="cmbx-12">must be used by the example program.</span>
<!--l. 121--><p class="indent" > <span
class="cmbx-12">The part of the code concerning the reading and assembling of the</span>
<span
class="cmr-12">and the right-hand side vector, performed through the PSBLAS routines for sparse</span>
class="cmbx-12">sparse matrix and the right-hand side vector, performed through the</span>
<span
class="cmr-12">matrix and vector management, is not reported here for brevity; the statements</span>
class="cmbx-12">PSBLAS routines for sparse matrix and vector management, is not</span>
<span
class="cmr-12">concerning the deallocation of the PSBLAS data structure are neglected too. The</span>
class="cmbx-12">reported here for brevity; the statements concerning the deallocation of the</span>
<span
class="cmr-12">complete code can be found in the example program file </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_dexample_ml.f90</span></span></span><span
class="cmr-12">,</span>
class="cmbx-12">PSBLAS data structure are neglected too. The complete code can be found</span>
<span
class="cmr-12">in the directory </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">in the example program file </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_dexample_ml.f90</span></span></span><span
class="cmbx-12">, in the directory</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples/fileread</span></span></span> <span
class="cmr-12">of the MLD2P4 implementation (see</span>
<span
class="cmr-12">Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">of the AMG4PSBLAS implementation (see Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlsu5.html#x12-110003.5"><span
class="cmr-12">3.5</span><!--tex4ht:ref: sec:ex_and_test --></a><span
class="cmr-12">). A sample test problem along with the relevant input data is available in</span>
class="cmbx-12">3.5</span><!--tex4ht:ref: sec:ex_and_test --></a><span
class="cmbx-12">).</span>
<span
class="cmbx-12">A sample test problem along with the relevant input data is available in</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples/fileread/runs</span></span></span><span
class="cmr-12">. For details on the use of the PSBLAS routines, see the</span>
class="cmbx-12">. For details on the use of the PSBLAS routines, see</span>
<span
class="cmr-12">PSBLAS User&#8217;s Guide</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
class="cmbx-12">the PSBLAS User&#8217;s Guide</span><span
class="cmbx-12">&#x00A0;</span><span class="cite"><span
class="cmbx-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
<!--l. 146--><p class="indent" > <span
class="cmr-12">The setup and application of the default multilevel preconditioner for the real single</span>
class="cmbx-12">15</span></a><span
class="cmbx-12">]</span></span><span
class="cmbx-12">.</span>
<!--l. 133--><p class="indent" > <span
class="cmbx-12">The setup and application of the default multilevel preconditioner for</span>
<span
class="cmr-12">precision and the complex, single and double precision, versions are obtained</span>
class="cmbx-12">the real single precision and the complex, single and double precision,</span>
<span
class="cmr-12">with straightforward modifications of the previous example (see Section</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">versions are obtained with straightforward modifications of the previous</span>
<span
class="cmbx-12">example (see Section</span><span
class="cmbx-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a> <span
class="cmr-12">for</span>
class="cmbx-12">6</span><!--tex4ht:ref: sec:userinterface --></a> <span
class="cmbx-12">for details). If these versions are installed, the</span>
<span
class="cmr-12">details). If these versions are installed, the corresponding codes are available in</span>
<span class="obeylines-h"><span class="verb"><span
class="cmbx-12">corresponding codes are available in </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples/fileread/</span></span></span><span
class="cmr-12">.</span>
<!--l. 152--><p class="indent" > <hr class="figure"><div class="figure"
class="cmbx-12">.</span>
<!--l. 139--><p class="indent" > <hr class="figure"><div class="figure"
>
@ -117,13 +122,13 @@ class="cmr-12">.</span>
<div class="center"
>
<!--l. 153--><p class="noindent" >
<!--l. 140--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-6">
&#x00A0;&#x00A0;use&#x00A0;psb_base_mod
&#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;mld_prec_mod
&#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;amg_prec_mod
&#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;psb_krylov_mod
&#x00A0;<br />...&#x00A0;...
&#x00A0;<br />!
@ -132,7 +137,7 @@ class="cmr-12">.</span>
&#x00A0;<br />!&#x00A0;sparse&#x00A0;matrix&#x00A0;descriptor
&#x00A0;<br />&#x00A0;&#x00A0;type(psb_desc_type)&#x00A0;&#x00A0;&#x00A0;::&#x00A0;desc_A
&#x00A0;<br />!&#x00A0;preconditioner
&#x00A0;<br />&#x00A0;&#x00A0;type(mld_dprec_type)&#x00A0;&#x00A0;::&#x00A0;P
&#x00A0;<br />&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;P
&#x00A0;<br />!&#x00A0;right-hand&#x00A0;side&#x00A0;and&#x00A0;solution&#x00A0;vectors
&#x00A0;<br />&#x00A0;&#x00A0;type(psb_d_vect_type)&#x00A0;::&#x00A0;b,&#x00A0;x
&#x00A0;<br />...&#x00A0;...
@ -174,7 +179,7 @@ class="cmr-12">.</span>
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_exit(ictxt)
&#x00A0;<br />&#x00A0;&#x00A0;stop
</div>
<!--l. 208--><p class="nopar" >
<!--l. 195--><p class="nopar" >
</div>
@ -185,80 +190,86 @@ class="content">setup and application of the default multilevel preconditioner (
<!--l. 214--><p class="indent" > </div><hr class="endfigure">
<!--l. 216--><p class="indent" > <span
class="cmr-12">Different versions of the multilevel preconditioner can be obtained by changing the</span>
<!--l. 201--><p class="indent" > </div><hr class="endfigure">
<!--l. 203--><p class="indent" > <span
class="cmbx-12">Different versions of the multilevel preconditioner can be obtained by</span>
<span
class="cmbx-12">changing the default values of the preconditioner parameters. The code</span>
<span
class="cmr-12">default values of the preconditioner parameters. The code reported in Figure</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">reported in Figure</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x18-170023"><span
class="cmr-12">3</span><!--tex4ht:ref: fig:ex2 --></a> <span
class="cmr-12">shows</span>
class="cmbx-12">3</span><!--tex4ht:ref: fig:ex2 --></a> <span
class="cmbx-12">shows how to set a V-cycle preconditioner which</span>
<span
class="cmr-12">how to set a V-cycle preconditioner which applies 1 block-Jacobi sweep as pre- and</span>
class="cmbx-12">applies 1 block-Jacobi sweep as pre- and post-smoother, and solves the</span>
<span
class="cmr-12">post-smoother, and solves the coarsest-level system with 8 block-Jacobi sweeps. Note</span>
class="cmbx-12">coarsest-level system with 8 block-Jacobi sweeps. Note that the ILU(0)</span>
<span
class="cmr-12">that the ILU(0) factorization (plus triangular solve) is used as local solver for the</span>
class="cmbx-12">factorization (plus triangular solve) is used as local solver for the</span>
<span
class="cmr-12">block-Jacobi sweeps, since this is the default associated with block-Jacobi and set</span>
class="cmbx-12">block-Jacobi sweeps, since this is the default associated with block-Jacobi</span>
<span
class="cmr-12">by</span><span
class="cmr-12">&#x00A0;</span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">and set by</span><span
class="cmbx-12">&#x00A0;</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">P%init</span></span></span><span
class="cmr-12">. Furthermore, specifying block-Jacobi as coarsest-level solver implies that</span>
class="cmbx-12">. Furthermore, specifying block-Jacobi as coarsest-level</span>
<span
class="cmr-12">the coarsest-level matrix is distributed among the processes. Figure</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">solver implies that the coarsest-level matrix is distributed among the</span>
<span
class="cmbx-12">processes. Figure</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x18-170034"><span
class="cmr-12">4</span><!--tex4ht:ref: fig:ex3 --></a> <span
class="cmr-12">shows how to set</span>
class="cmbx-12">4</span><!--tex4ht:ref: fig:ex3 --></a> <span
class="cmbx-12">shows how to set a W-cycle preconditioner which</span>
<span
class="cmr-12">a W-cycle preconditioner which applies 2 hybrid Gauss-Seidel sweeps as pre- and</span>
class="cmbx-12">applies 2 hybrid Gauss-Seidel sweeps as pre- and post-smoother, and solves</span>
<span
class="cmr-12">post-smoother, and solves the coarsest-level system with the multifrontal LU</span>
class="cmbx-12">the coarsest-level system with the multifrontal LU factorization</span>
<span
class="cmr-12">factorization implemented in MUMPS. It is specified that the coarsest-level matrix is</span>
class="cmbx-12">implemented in MUMPS. It is specified that the coarsest-level matrix is</span>
<span
class="cmr-12">distributed, since MUMPS can be used on both replicated and distributed matrices,</span>
class="cmbx-12">distributed, since MUMPS can be used on both replicated and distributed</span>
<span
class="cmr-12">and by default it is used on replicated ones. The code fragments shown in</span>
class="cmbx-12">matrices, and by default it is used on replicated ones. The code fragments</span>
<span
class="cmr-12">Figures</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">shown in Figures</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x18-170023"><span
class="cmr-12">3</span><!--tex4ht:ref: fig:ex2 --></a> <span
class="cmr-12">and </span><a
class="cmbx-12">3</span><!--tex4ht:ref: fig:ex2 --></a> <span
class="cmbx-12">and </span><a
href="#x18-170034"><span
class="cmr-12">4</span><!--tex4ht:ref: fig:ex3 --></a> <span
class="cmr-12">are included in the example program file </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_dexample_ml.f90</span></span></span>
<span
class="cmr-12">too.</span>
<!--l. 240--><p class="indent" > <span
class="cmr-12">Finally, Figure</span><span
class="cmr-12">&#x00A0;</span><a
class="cmbx-12">4</span><!--tex4ht:ref: fig:ex3 --></a> <span
class="cmbx-12">are included in the example program file</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_dexample_ml.f90</span></span></span> <span
class="cmbx-12">too.</span>
<!--l. 227--><p class="indent" > <span
class="cmbx-12">Finally, Figure</span><span
class="cmbx-12">&#x00A0;</span><a
href="#x18-170045"><span
class="cmr-12">5</span><!--tex4ht:ref: fig:ex4 --></a> <span
class="cmr-12">shows the setup of a one-level additive Schwarz preconditioner,</span>
class="cmbx-12">5</span><!--tex4ht:ref: fig:ex4 --></a> <span
class="cmbx-12">shows the setup of a one-level additive Schwarz</span>
<span
class="cmr-12">i.e., RAS with overlap 2. Note also that a Krylov method different from CG</span>
class="cmbx-12">preconditioner, i.e., RAS with overlap 2. Note also that a Krylov method</span>
<span
class="cmr-12">must be used to solve the preconditioned system, since the preconditione in</span>
class="cmbx-12">different from CG must be used to solve the preconditioned system, since</span>
<span
class="cmr-12">nonsymmetric. The corresponding example program is available in the file</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_dexample_1lev.f90</span></span></span><span
class="cmr-12">.</span>
<!--l. 247--><p class="indent" > <span
class="cmr-12">For all the previous preconditioners, example programs where the sparse matrix and</span>
class="cmbx-12">the preconditione in nonsymmetric. The corresponding example program is</span>
<span
class="cmr-12">the right-hand side are generated by discretizing a PDE with Dirichlet boundary</span>
class="cmbx-12">available in the file </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_dexample_1lev.f90</span></span></span><span
class="cmbx-12">.</span>
<!--l. 234--><p class="indent" > <span
class="cmbx-12">For all the previous preconditioners, example programs where the sparse</span>
<span
class="cmr-12">conditions are also available in the directory </span><span class="obeylines-h"><span class="verb"><span
class="cmbx-12">matrix and the right-hand side are generated by discretizing a PDE with</span>
<span
class="cmbx-12">Dirichlet boundary conditions are also available in the directory</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples/pdegen</span></span></span><span
class="cmr-12">.</span>
<!--l. 261--><p class="indent" > <hr class="figure"><div class="figure"
class="cmbx-12">.</span>
<!--l. 238--><p class="indent" > <hr class="figure"><div class="figure"
>
@ -270,7 +281,7 @@ class="cmr-12">.</span>
<div class="center"
>
<!--l. 262--><p class="noindent" >
<!--l. 239--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-7">
...&#x00A0;...
&#x00A0;<br />!&#x00A0;build&#x00A0;a&#x00A0;V-cycle&#x00A0;preconditioner&#x00A0;with&#x00A0;1&#x00A0;block-Jacobi&#x00A0;sweep&#x00A0;(with
@ -284,7 +295,7 @@ class="cmr-12">.</span>
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info)
&#x00A0;<br />...&#x00A0;...
</div>
<!--l. 277--><p class="nopar" ></div>
<!--l. 254--><p class="nopar" ></div>
<br /> <div class="caption"
><span class="id">Figure&#x00A0;3: </span><span
class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:label?: x18-170023 -->
@ -292,8 +303,8 @@ class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:labe
<!--l. 283--><p class="indent" > </div><hr class="endfigure">
<!--l. 285--><p class="indent" > <hr class="figure"><div class="figure"
<!--l. 260--><p class="indent" > </div><hr class="endfigure">
<!--l. 262--><p class="indent" > <hr class="figure"><div class="figure"
>
@ -305,7 +316,7 @@ class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:labe
<div class="center"
>
<!--l. 286--><p class="noindent" >
<!--l. 263--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-8">
...&#x00A0;...
&#x00A0;<br />!&#x00A0;build&#x00A0;a&#x00A0;W-cycle&#x00A0;preconditioner&#x00A0;with&#x00A0;2&#x00A0;hybrid&#x00A0;Gauss-Seidel&#x00A0;sweeps
@ -321,7 +332,7 @@ class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:labe
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info)
&#x00A0;<br />...&#x00A0;...
</div>
<!--l. 303--><p class="nopar" ></div>
<!--l. 280--><p class="nopar" ></div>
<br /> <div class="caption"
><span class="id">Figure&#x00A0;4: </span><span
class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:label?: x18-170034 -->
@ -329,8 +340,8 @@ class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:labe
<!--l. 308--><p class="indent" > </div><hr class="endfigure">
<!--l. 310--><p class="indent" > <hr class="figure"><div class="figure"
<!--l. 285--><p class="indent" > </div><hr class="endfigure">
<!--l. 287--><p class="indent" > <hr class="figure"><div class="figure"
>
@ -342,7 +353,7 @@ class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:labe
<div class="center"
>
<!--l. 311--><p class="noindent" >
<!--l. 288--><p class="noindent" >
<div class="minipage"><div class="verbatim" id="verbatim-9">
...&#x00A0;...
&#x00A0;<br />!&#x00A0;set&#x00A0;RAS&#x00A0;with&#x00A0;overlap&#x00A0;2&#x00A0;and&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;local&#x00A0;blocks
@ -353,7 +364,7 @@ class="content">setup of a multilevel preconditioner</span></div><!--tex4ht:labe
&#x00A0;<br />!&#x00A0;solve&#x00A0;Ax=b&#x00A0;with&#x00A0;preconditioned&#x00A0;BiCGSTAB
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_krylov(&#8217;BICGSTAB&#8217;,A,P,b,x,tol,desc_A,info)
</div>
<!--l. 323--><p class="nopar" ></div>
<!--l. 300--><p class="nopar" ></div>
<br /> <div class="caption"
><span class="id">Figure&#x00A0;5: </span><span
class="content">setup of a one-level Schwarz preconditioner.</span></div><!--tex4ht:label?: x18-170045 -->
@ -361,7 +372,7 @@ class="content">setup of a one-level Schwarz preconditioner.</span></div><!--tex
<!--l. 328--><p class="indent" > </div><hr class="endfigure">
<!--l. 305--><p class="indent" > </div><hr class="endfigure">
@ -369,13 +380,13 @@ class="content">setup of a one-level Schwarz preconditioner.</span></div><!--tex
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a
class="cmbx-12">[</span><a
href="userhtmlsu9.html" ><span
class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a
class="cmbx-12">front</span></a><span
class="cmbx-12">] [</span><a
href="userhtmlse5.html#userhtmlsu9.html" ><span
class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div>
class="cmbx-12">up</span></a><span
class="cmbx-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a
id="tailuserhtmlsu9.html"></a>
</body></html>

File diff suppressed because one or more lines are too long

@ -140,7 +140,7 @@ PDF = $(join $(BASEFILE),.pdf)
PS = $(join $(BASEFILE),.ps)
GXS = $(join $(BASEFILE),.gxs)
GLX = $(join $(BASEFILE),.glx)
TARGETPDF= ../mld2p4-2.2-guide.pdf
TARGETPDF= ../amg4psblas_1.0-guide.pdf
BASEHTML = $(patsubst %.tex,%,$(HTMLFILE))
HTML = $(join $(BASEHTML),.html)
HTMLDIR = ../html

@ -1,25 +1,25 @@
\section*{Abstract}
\addcontentsline{toc}{section}{Abstract}
\addcontentsline{toc}{section}{Abstract}
\textsc{MLD2P4 (MultiLevel Domain Decomposition Parallel Preconditioners Package
based on PSBLAS}) is a package of parallel algebraic multilevel preconditioners.
The first release of MLD2P4 made available multilevel additive and hybrid Schwarz
preconditioners, as well as one-level additive Schwarz preconditioners. The package
has been extended to include further multilevel cycles and smoothers widely used in
multigrid methods. In the multilevel case, a purely algebraic approach is applied to
generate coarse-level corrections, so that no geometric background is needed
concerning the matrix to be preconditioned. The matrix is assumed to be square,
real or complex.
\textsc{AMG4PSBLAS (Algebraic MultiGrid Preconditioners Package
based on PSBLAS}) is a package of parallel algebraic multilevel preconditioners included in the PSCToolkit (Parallel Sparse Computation Toolkit) software framework.
It is a progress of a software development project started in 2007, named MLD2P4, which implemented a multilevel version of some domain decomposition preconditioners of additive-Schwarz type and was based on a parallel decoupled version of the well known smoothed
aggregation method to generate the multilevel hierarchy of coarser matrices. In the last years, within the context of the EU-H2020 EoCoE project (Energy Oriented Center of Excellence), the package was extended including new algorithms and functionalities for setup and application of new AMG preconditioners with the final aims of improving efficiency and scalability when tens of thousands cores are
used and of boosting reliability in dealing with general symmetric positive definite linear systems. Due to the significant number of changes and the increase in scope, we decided to rename the package as AMG4PSBLAS.
MLD2P4 has been designed to provide scalable and easy-to-use preconditioners
AMG4PSBLAS has been designed to provide scalable and easy-to-use preconditioners
in the context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)
computational framework and can be used in conjuction with the Krylov solvers
available in this framework. MLD2P4 enables the user to easily specify different
features of an algebraic multilevel preconditioner, thus allowing to search
for the ``best'' preconditioner for the problem at hand.
available in this framework.
Our package is based on a completely algebraic approach and users level interfaces
assume that the system matrix and preconditioners are represented as PSBLAS
distributed sparse matrices.
AMG4PSBLAS enables the user to easily specify different
features of an algebraic multilevel preconditioner, thus allowing to experiment
with different preconditioners for the problem and parallel computers at hand.
The package employs object-oriented design techniques in
Fortran~2003, with interfaces to additional third party libraries
Fortran~2003, with interfaces to additional third party libraries
such as MUMPS, UMFPACK, SuperLU, and SuperLU\_Dist, which
can be exploited in building multilevel preconditioners. The parallel
implementation is based on a Single Program Multiple Data (SPMD)
@ -27,4 +27,4 @@ paradigm; the inter-process communication is based on MPI and
is managed mainly through PSBLAS.
This guide provides a brief description of the functionalities and
the user interface of MLD2P4.
the user interface of AMG4PSBLAS.

@ -1,6 +1,6 @@
%\section{Bibliography\label{sec:bib}}
\begin{thebibliography}{99}
\addcontentsline{toc}{section}{\refname}
\addcontentsline{toc}{section}{\refname}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
{\textsc{References}}
@ -18,7 +18,7 @@ M.~Brezina, P.~Van\v{e}k,
Computing, 63, 1999, 233--263.
%
\bibitem{Briggs2000}
W.~L.~Briggs, V.~E.~Henson, S.~F.~McCormick,
W.~L.~Briggs, V.~E.~Henson, S.~F.~McCormick,
{\em A Multigrid Tutorial, Second Edition},
SIAM, 2000.
%
@ -30,11 +30,11 @@ Proceedings of PARA~04 Workshop on State of the Art
in Scientific Computing, Lecture Notes in Computer Science,
Springer, 2005, 593--602.
%
\bibitem{aaecc_07}
\bibitem{aaecc_07}
A.~Buttari, P.~D'Ambra, D.~di~Serafino, S.~Filippone,
{\em 2LEV-D2P4: a package of high-performance preconditioners
for scientific and engineering applications},
Applicable Algebra in Engineering, Communications and Computing,
Applicable Algebra in Engineering, Communications and Computing,
18 (3) 2007, 223--239.
%Published online: 13 February 2007, {\tt http://dx.doi.org/10.1007/s00200-007-0035-z}
%
@ -57,19 +57,29 @@ SIAM Journal on Scientific Computing, 21 (2), 1999, 792--797.
\bibitem{apnum_07}
P.~D'Ambra, S.~Filippone, D.~di~Serafino,
{\em On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners},
Applied Numerical Mathematics, Elsevier Science,
Applied Numerical Mathematics, Elsevier Science,
57 (11-12), 2007, 1181-1196.
%published online 3 February 2007, {\tt
% http://dx.doi.org/10.1016/j.apnum.2007.01.006}
%
\bibitem{MLD2P4_TOMS}
\bibitem{MLD2P4_TOMS}
P.~D'Ambra, D.~di~Serafino, S.~Filippone,
\emph{MLD2P4: a Package of Parallel Multilevel
Algebraic Domain Decomposition Preconditioners
in Fortran 95}, ACM Trans. Math. Softw., 37(3), 2010, art. 30.
%
\bibitem{BDDF2007}
A.~Buttari, P.~D'Ambra, D.~di Serafino, S.~Filippone,
\emph{2{LEV}-{D}2{P}4: a Package of High-Performance Preconditioners
for Scientific and Engineering Applications}, Appl. Algebra Engrg. Comm. Comput.,
18(3), 2007, 223--239.
%
\bibitem{DDF2020}
P.~D'Ambra, F~Durastante, S.~Filippone,
\emph{AMG preconditioners for Linear Solvers towards Extreme Scale}, 2020, arXiv:2006.16147v2.
%
\bibitem{UMFPACK}
T.~A.~Davis,
T.~A.~Davis,
{\em Algorithm 832: UMFPACK - an Unsymmetric-pattern Multifrontal
Method with a Column Pre-ordering Strategy},
ACM Transactions on Mathematical Software, 30, 2004, 196--199.
@ -96,13 +106,13 @@ ACM Transactions on Mathematical Software, 14 (1) 1988, 1--17.
%Lapack Working Note 94, Tech.\ Rep.\ UT-CS-95-281, University of
%Tennessee, March 1995 (updated May 1997).
%
%\bibitem{EFSTATHIOU}
%\bibitem{EFSTATHIOU}
%E.~Efstathiou, J.~G.~Gander,
%{\em Why Restricted Additive Schwarz Converges Faster than Additive Schwarz},
%BIT Numerical Mathematics, 43 (5), 2003, 945--959.
%
\bibitem{PSBLASGUIDE}
S.~Filippone, A.~Buttari,
S.~Filippone, A.~Buttari,
{\em PSBLAS 3.5.0 User's Guide. A Reference Guide for the Parallel Sparse BLAS Library}, 2012,
available from \texttt{https://github.com/sfilippone/psblas3/tree/master/docs}.
%
@ -112,19 +122,19 @@ S.~Filippone, A.~Buttari,
ACM Transactions on on Mathematical Software, 38 (4), 2012, art.~23.
%
\bibitem{psblas_00}
S.~Filippone, M.~Colajanni,
S.~Filippone, M.~Colajanni,
{\em PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices},
ACM Transactions on Mathematical Software, 26 (4), 2000, 527--550.
%
\bibitem{GrHeJi:16}
S. Gratton, P. Henon, P. Jiranek and X. Vasseur,
{\em Reducing complexity of algebraic multigrid by aggregation},
{\em Reducing complexity of algebraic multigrid by aggregation},
Numerical Lin. Algebra with Applications, 2016, 23:501-518
%
\bibitem{MPI2}
W.~Gropp, S.~Huss-Lederman, A.~Lumsdaine, E.~Lusk, B.~Nitzberg, W.~Saphir, M.~Snir,
W.~Gropp, S.~Huss-Lederman, A.~Lumsdaine, E.~Lusk, B.~Nitzberg, W.~Saphir, M.~Snir,
{\em MPI: The Complete Reference. Volume 2 - The MPI-2 Extensions},
MIT Press, 1998.
%
@ -142,7 +152,7 @@ ACM Transactions on Mathematical Software, 29 (2), 2003, 110--140.
\bibitem{Notay2008}
Y.~Notay, P.~S.~Vassilevski,
{\em Recursive Krylov-based multigrid cycles},
Numerical Linear Algebra with Applications, 15 (5), 2008, 473--487.
Numerical Linear Algebra with Applications, 15 (5), 2008, 473--487.
%
\bibitem{Saad_book}
Y.~Saad,
@ -173,5 +183,15 @@ R.~S.~Tuminaro, C.~Tong,
P.~Van\v{e}k, J.~Mandel, M.~Brezina,
{\em Algebraic Multigrid by Smoothed Aggregation for Second and Fourth Order Elliptic Problems},
Computing, 56 (3) 1996, 179--196.
%
\bibitem{DV2013}
P.~D'Ambra and P.\,S.~Vassilevski,
{\em Adaptive AMG with coarsening based on compatible weighted matching},
Computing and Visualization in Science, 16, (2013) 59--76.
%
\bibitem{DFV2018}
P.~D'Ambra, S.~Filippone and P.\,S.~Vassilevski,
{\em BootCMatch: a software package for bootstrap AMG based on graph weighted matching},
ACM Transactions on Mathematical Software, 44, (2018) 39:1--39:25.
%
\end{thebibliography}

@ -1,33 +1,33 @@
\section{Configuring and Building MLD2P4\label{sec:building}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
{\textsc{\ref{sec:building} Configuring and Building MLD2P4}}
In order to build MLD2P4 it is necessary to set up a Makefile with appropriate
\section{Configuring and Building AMG4PSBLAS\label{sec:building}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:building} Configuring and Building AMG4PSBLAS}}
In order to build AMG4PSBLAS it is necessary to set up a Makefile with appropriate
system-dependent variables; this is done by means of the \verb|configure|
script. The distribution also includes the autoconf and automake
sources employed to generate the script, but usually this is not needed
to build the software.
to build the software.
MLD2P4 is implemented almost entirely in Fortran~2003, with some
AMG4PSBLAS is implemented almost entirely in Fortran~2003, with some
interfaces to external libraries in C; the Fortran compiler
must support the Fortran~2003 standard plus the extension \verb|MOLD=|
feature, which enhances the usability of \verb|ALLOCATE|.
feature, which enhances the usability of \verb|ALLOCATE|.
Many compilers do this; in particular, this is
supported by the GNU Fortran compiler, for which we
recommend to use at least version 4.8.
supported by the GNU Fortran compiler, for which we
recommend to use at least version 4.8.
The software defines data types and interfaces for
real and complex data, in both single and double precision.
real and complex data, in both single and double precision.
Building MLD2P4 requires some base libraries (see Section~\ref{sec:prerequisites});
interfaces to optional third-party libraries, which extend the functionalities of MLD2P4
Building AMG4PSBLAS requires some base libraries (see Section~\ref{sec:prerequisites});
interfaces to optional third-party libraries, which extend the functionalities of AMG4PSBLAS
(see Section~\ref{sec:third-party}), are also available. Many Linux distributions
(e.g., Ubuntu, Fedora, CentOS) provide precompiled packages for the prerequisite and
optional software. In many cases these packages are split between a runtime part and a
``developer'' part; in order to build MLD2P4 you need both. A description of the base and
optional software used by MLD2P4 is given in the next sections.
``developer'' part; in order to build AMG4PSBLAS you need both. A description of the base and
optional software used by AMG4PSBLAS is given in the next sections.
\subsection{Prerequisites\label{sec:prerequisites}}
The following base libraries are needed:
The following base libraries are needed:
\begin{description}
\item[BLAS] \cite{blas3,blas2,blas1} Many vendors provide optimized versions
of BLAS; if no vendor version is
@ -36,38 +36,38 @@ The following base libraries are needed:
may be employed. The reference BLAS from Netlib
(\url{www.netlib.org/blas}) are meant to define the standard
behaviour of the BLAS interface, so they are not optimized for any
particular plaftorm, and should only be used as a last
particular platform, and should only be used as a last
resort. Note that BLAS computations form a relatively small part of
the MLD2P4/PSBLAS computations; they are however critical when using
the AMG4PSBLAS/PSBLAS computations; they are however critical when using
preconditioners based on MUMPS, UMFPACK or SuperLU third party
libraries. Note that UMFPACK requires a full LAPACK library; our
experience is that configuring ATLAS for building full LAPACK does not
work in the correct way. Our advice is first to download the LAPACK tarfile from
\url{www.netlib.org/lapack} and install it independently of ATLAS. In this case,
you need to modify the OPTS and NOOPT definitions for including -fPIC compilation option
in the make.inc file of the LAPACK library.
in the make.inc file of the LAPACK library.
\item[MPI] \cite{MPI2,MPI1} A version of MPI is available on most
high-performance computing systems.
\item[PSBLAS] \cite{PSBLASGUIDE,psblas_00} Parallel Sparse BLAS (PSBLAS) is
available from \url{github.com/sfilippone/psblas3}; version
available from \url{github.com/sfilippone/psblas3} ?? {\bf Mettere tutto sotto psctoolkit}; version
3.5.0 (or later) is required. Indeed, all the prerequisites
listed so far are also prerequisites of PSBLAS.
\end{description}
Please note that the four previous libraries must have Fortran
interfaces compatible with MLD2P4;
interfaces compatible with AMG4PSBLAS;
usually this means that they should all be built with the same
compiler as MLD2P4.
compiler as AMG4PSBLAS.
\subsection{Optional third party libraries\label{sec:third-party}}
We provide interfaces to the following third-party software libraries;
note that these are optional, but if you enable them some defaults
for multilevel preconditioners may change to reflect their presence.
for multilevel preconditioners may change to reflect their presence.
\begin{description}
\item[UMFPACK] \cite{UMFPACK}
A sparse LU factorization package included in the SuiteSparse library, available from
\url{faculty.cse.tamu.edu/davis/suitesparse.html};
A sparse LU factorization package included in the SuiteSparse library, available from
\url{faculty.cse.tamu.edu/davis/suitesparse.html};
it provides sequential factorization and triangular system solution for double
precision real and complex data. We tested version 4.5.4 of SuiteSparse.
Note that for configuring SuiteSparse you should provide the right path to the BLAS
@ -97,10 +97,13 @@ for multilevel preconditioners may change to reflect their presence.
\subsection{Configuration options}
In order to build MLD2P4, the first step is to use the \verb|configure| script
In order to build AMG4PSBLAS, the first step is to use the \verb|configure| script
in the main directory to generate the necessary makefile.
%\textbf{Sono necessarie le parentesi intorno a s?}
\bf{DA RISCRIVERE}
As a minimal example consider the following:
\begin{verbatim}
./configure --with-psblas=PSB-INSTALL-DIR
@ -290,7 +293,7 @@ generated the file \verb|Make.inc| which will then be used by all
Makefiles in the directory tree; this file will be copied in the
install directory under the name \verb|Make.inc.MLD2P4|.
To use the MUMPS solver package,
To use the MUMPS solver package,
the user has to add the appropriate options to the configure script;
by default we are looking for the libraries
\verb|-ldmumps -lsmumps| \verb| -lzmumps -lcmumps -mumps_common -lpord|.
@ -298,30 +301,22 @@ MUMPS often uses additional packages such as ScaLAPACK, ParMETIS,
SCOTCH, as well as enabling OpenMP; in such cases it is necessary to
add linker options with the \verb|--with-extra-libs| configure option.
To build the library the user will now enter
To build the library the user will now enter
\begin{verbatim}
make
\end{verbatim}
followed (optionally) by
followed (optionally) by
\begin{verbatim}
make install
\end{verbatim}
\subsection{Bug reporting}
If you find any bugs in our codes, please report them through our
issues page on \\[2mm]
\url{https://github.com/sfilippone/mld2p4-2/issues}\\
% please let us know at
%\begin{rawhtml}
%<a href="mailto:bugreport@mld2p4.it">
%\end{rawhtml}
%\texttt{bugreport@mld2p4.it}
%\begin{rawhtml}
%</a>
%\end{rawhtml}
%;
\url{https://github.com/psctoolkit/amg4psblas/issues}\\
To enable us to track the bug, please provide a log from the failing
application, the test conditions, and ideally a self-contained test
program reproducing the issue.
program reproducing the issue.
\subsection{Example and test programs\label{sec:ex_and_test}}
The package contains the \verb|examples| and \verb|tests| directories;
@ -331,7 +326,7 @@ both of them are further divided into \verb|fileread| and
\item[\tt examples] contains a set of simple example programs with a
predefined choice of preconditioners, selectable via integer
values. These are intended to get an acquaintance with the
multilevel preconditioners available in MLD2P4.
multilevel preconditioners available in AMG4PSBLAS.
\item[\tt tests] contains a set of more sophisticated examples that
will allow the user, via the input files in the \verb|runs|
subdirectories, to experiment with the full range of preconditioners
@ -341,4 +336,4 @@ The \verb|fileread| directories contain sample programs that read
sparse matrices from files, according to the Matrix Market or the
Harwell-Boeing storage format; the \verb|pdegen| programs generate
matrices in full parallel mode from the discretization of a sample partial
differential equation.
differential equation.

@ -1,11 +1,11 @@
\section{Code Distribution\label{sec:distribution}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:distribution} Code Distribution}}
\noindent
MLD2P4 is available from the web site
AMG4PSBLAS is available from the web site
\begin{quotation}
\texttt{https://github.com/sfilippone/mld2p4-2}
\texttt{https://github.com/psctoolkit/amg4psblas}
\end{quotation}
where contact points for further information can be also found.
@ -13,25 +13,16 @@ The software is available under a modified BSD license, as specified
in Appendix~\ref{sec:license}; please note that some of the optional
third party libraries may be licensed under a different and more
stringent license, most notably the GPL, and this should be taken into
account when treating derived works.
account when treating derived works.
The library defines a version string with the
constant
\[ \verb|mld_version_string_|\]
whose current value is \verb|2.1.0|.
constant
\[ \verb|amg_version_string_|\]
whose current value is \verb|1.0|.
\subsection*{Contributors}
Contributors to version 2:
\begin{itemize}
\item Salvatore Filippone, Cranfield University, UK;
\item Pasqua D'Ambra, IAC-CNR, Naples, IT;
\item Daniela di Serafino, University of Campania ``L. Vanvitelli'', Caserta, IT;
\item Ambra Abdullahi Hassan, University of Rome ``Tor Vergata'', IT.
\end{itemize}
Contributors to version 1:
\begin{itemize}
\item Salvatore Filippone;
\item Pasqua D'Ambra;
\item Daniela di Serafino;
\item Alfredo Buttari, CNRS-IRIT, Toulouse, F.
\end{itemize}
\item Pasqua D'Ambra, IAC-CNR, IT;
\item Fabio Durastante, University of Pisa and IAC-CNR, IT;
\item Salvatore Filippone, University of Rome Tor-Vergata and IAC-CNR, IT;
\end{itemize}

@ -1,8 +1,8 @@
\section{Error Handling\label{sec:errors}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:errors} Error handling}}
The error handling in MLD2P4 is based on the PSBLAS error
The error handling in AMG4PSBLAS is based on the PSBLAS error
handling. Error conditions are signaled via an integer argument
\verb|info|; whenever an error condition is detected, an error trace
stack is built by the library up to the top-level, user-callable
@ -12,9 +12,9 @@ program or by returning the error condition to the user code, which
will then take action, and whether
an error message should be printed. These options may be set by using
the PSBLAS error handling routines; for further details see the PSBLAS
User's Guide \cite{PSBLASGUIDE}.
User's Guide \cite{PSBLASGUIDE}.
%%% Local Variables:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "userguide"
%%% End:
%%% End:

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

@ -1,17 +1,17 @@
\section{Getting Started\label{sec:started}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:started} Getting Started}}
We describe the basics for building and applying MLD2P4 one-level and multilevel
We describe the basics for building and applying AMG4PSBLAS one-level and multilevel
(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS \cite{PSBLASGUIDE}.
The following steps are required:
\begin{enumerate}
\begin{enumerate}
\item \emph{Declare the preconditioner data structure}. It is a derived data type,
\verb|mld_|\-\emph{x}\verb|prec_| \verb|type|, where \emph{x} may be \verb|s|, \verb|d|, \verb|c|
\verb|amg_|\-\emph{x}\verb|prec_| \verb|type|, where \emph{x} may be \verb|s|, \verb|d|, \verb|c|
or \verb|z|, according to the basic data type of the sparse matrix
(\verb|s| = real single precision; \verb|d| = real double precision;
\verb|c| = complex single precision; \verb|z| = complex double precision).
This data structure is accessed by the user only through the MLD2P4 routines,
This data structure is accessed by the user only through the AMG4PSBLAS routines,
following an object-oriented approach.
\item \emph{Allocate and initialize the preconditioner data structure, according to
a preconditioner type chosen by the user}. This is performed by the routine
@ -21,21 +21,14 @@ The following steps are required:
\verb|init| to identify the preconditioner types are also given.
Note that these strings are valid also if uppercase letters are substituted by
corresponding lowercase ones.
%\item \emph{Modify the aggregation parameters (for multilevel preconditioners only).}
% This is performed by the routine \verb|mld_precset|.
% This routine must be called only if the user wants to modify the default values
% of the parameters associated with the aggregation hierarchy construction.
% Examples of use of \verb|mld_precset| are given in
% Section~\ref{sec:examples}; a complete list of all the
% preconditioner parameters and their allowed and default values is provided in
% Section~\ref{sec:userinterface}, Tables~\ref{tab:p_cycle}-\ref{tab:p_smoother_1}.
\item \emph{Modify the selected preconditioner type, by properly setting
preconditioner parameters.} This is performed by the routine \verb|set|.
This routine must be called only if the user wants to modify the default values
of the parameters associated with the selected preconditioner type, to obtain a variant
of that preconditioner. Examples of use of \verb|set| are given in
Section~\ref{sec:examples}; a complete list of all the
preconditioner parameters and their allowed and default values is provided in
preconditioner parameters and their allowed and default values is provided in
Section~\ref{sec:userinterface}, Tables~\ref{tab:p_cycle}-\ref{tab:p_smoother_1}.
\item \emph{Build the preconditioner for a given matrix}. If the selected preconditioner
is multilevel, then two steps must be performed, as specified next.
@ -58,7 +51,7 @@ performed by the routine \verb|bld|.
All the previous routines are available as methods of the preconditioner object.
A detailed description of them is given in Section~\ref{sec:userinterface}.
Examples showing the basic use of MLD2P4 are reported in Section~\ref{sec:examples}.
Examples showing the basic use of AMG4PSBLAS are reported in Section~\ref{sec:examples}.
\begin{table}[h!]
\begin{center}
@ -81,7 +74,7 @@ Block Jacobi & \verb|'BJAC'| & Block-Jacobi with ILU(0) on the local blocks
Additive Schwarz & \verb|'AS'| & Additive Schwarz (AS),
with overlap~1 and ILU(0) on the local blocks. \\ \hline
Multilevel &\verb|'ML'| & V-cycle with one hybrid forward Gauss-Seidel
(GS) sweep as pre-smoother and one hybrid backward
(GS) sweep as pre-smoother and one hybrid backward
GS sweep as post-smoother, basic smoothed aggregation
as coarsening algorithm, and LU (plus triangular solve)
as coarsest-level solver. See the default values in
@ -95,8 +88,8 @@ Multilevel &\verb|'ML'| & V-cycle with one hybrid forward Gauss-Seidel
\end{center}
\end{table}
Note that the module \verb|mld_prec_mod|, containing the definition of the
preconditioner data type and the interfaces to the routines of MLD2P4,
Note that the module \verb|amg_prec_mod|, containing the definition of the
preconditioner data type and the interfaces to the routines of AMG4PSBLAS,
must be used in any program calling such routines.
The modules \verb|psb_base_mod|, for the sparse matrix and communication descriptor
data types, and \verb|psb_krylov_mod|, for interfacing with the
@ -108,36 +101,30 @@ usually lead to smaller numbers of preconditioned Krylov
iterations than inexact solvers, when the linear system comes from
a standard discretization of basic scalar elliptic PDE problems. However,
this does not necessarily correspond to the smallest execution time
on parallel computers.
% \ \\
% \textbf{Remark 2.} The include path for MLD2P4 must override
% those for PSBLAS, i.e.\ the former must come first in the sequence
% passed to the compiler, as the MLD2P4 version of the Krylov solver
% interfaces must override that of PSBLAS. This will change in the future
% when the support for the \verb|class| statement becomes widespread in Fortran
% compilers.
on parallel computers.
{\em DA MODIFICARE PER INSERIRE TIPO DI AGGREGAZIONE}
\subsection{Examples\label{sec:examples}}
The code reported in Figure~\ref{fig:ex1} shows how to set and apply the default
multilevel preconditioner available in the real double precision version
of MLD2P4 (see Table~\ref{tab:precinit}). This preconditioner is chosen
of AMG4PSBLAS (see Table~\ref{tab:precinit}). This preconditioner is chosen
by simply specifying \verb|'ML'| as the second argument of \verb|P%init|
(a call to \verb|P%set| is not needed) and is applied with the CG
solver provided by PSBLAS (the matrix of the system to be solved is
assumed to be positive definite). As previously observed, the modules
\verb|psb_base_mod|, \verb|mld_prec_mod| and \verb|psb_krylov_mod|
\verb|psb_base_mod|, \verb|amg_prec_mod| and \verb|psb_krylov_mod|
must be used by the example program.
The part of the code concerning the
reading and assembling of the sparse matrix and the right-hand side vector, performed
through the PSBLAS routines for sparse matrix and vector management, is not reported
here for brevity; the statements concerning the deallocation of the PSBLAS
data structure are neglected too.
The complete code can be found in the example program file \verb|mld_dexample_ml.f90|,
in the directory \verb|examples/fileread| of the MLD2P4 implementation (see
The complete code can be found in the example program file \verb|amg_dexample_ml.f90|,
in the directory \verb|examples/fileread| of the AMG4PSBLAS implementation (see
Section~\ref{sec:ex_and_test}). A sample test problem along with the relevant
input data is available in \verb|examples/fileread/runs|.
For details on the use of the PSBLAS routines, see the PSBLAS User's
@ -151,11 +138,11 @@ the corresponding codes are available in \verb|examples/fileread/|.
\begin{figure}[tbp]
\begin{center}
\begin{minipage}{.90\textwidth}
\begin{minipage}{.90\textwidth}
{\small
\begin{verbatim}
use psb_base_mod
use mld_prec_mod
use amg_prec_mod
use psb_krylov_mod
... ...
!
@ -164,7 +151,7 @@ the corresponding codes are available in \verb|examples/fileread/|.
! sparse matrix descriptor
type(psb_desc_type) :: desc_A
! preconditioner
type(mld_dprec_type) :: P
type(amg_dprec_type) :: P
! right-hand side and solution vectors
type(psb_d_vect_type) :: b, x
... ...
@ -174,7 +161,7 @@ the corresponding codes are available in \verb|examples/fileread/|.
call psb_info(ictxt,iam,np)
... ...
!
! read and assemble the spd matrix A and the right-hand side b
! read and assemble the spd matrix A and the right-hand side b
! using PSBLAS routines for sparse matrix / vector management
... ...
!
@ -230,41 +217,31 @@ and solves the coarsest-level system with the multifrontal LU factorization
implemented in MUMPS. It is specified that the coarsest-level
matrix is distributed, since MUMPS can be used on both
replicated and distributed matrices, and by default
it is used on replicated ones.
it is used on replicated ones.
%Note the use of the parameter \verb|pos|
%to specify a property only for the pre-smoother or the post-smoother
%(see Section~\ref{sec:precset} for more details).
The code fragments shown in Figures~\ref{fig:ex2} and \ref{fig:ex3} are
included in the example program file \verb|mld_dexample_ml.f90| too.
included in the example program file \verb|amg_dexample_ml.f90| too.
Finally, Figure~\ref{fig:ex4} shows the setup of a one-level
additive Schwarz preconditioner, i.e., RAS with overlap 2.
Note also that a Krylov method different from CG must be used to solve
the preconditioned system, since the preconditione in nonsymmetric.
The corresponding example program is available in the file
\verb|mld_dexample_1lev.f90|.
\verb|amg_dexample_1lev.f90|.
For all the previous preconditioners, example programs where the sparse matrix and
the right-hand side are generated by discretizing a PDE with Dirichlet
boundary conditions are also available in the directory \verb|examples/pdegen|.
% \ \\
% \textbf{Remark 2.} Any PSBLAS-based program using the basic preconditioners
% implemented in PSBLAS 3.0, i.e.\ the diagonal and block-Jacobi ones,
% can use the diagonal and block-Jacobi preconditioners
% implemented in MLD2P4 without change in the code.
% The PSBLAS-based program must be only recompiled
% and linked to the MLD2P4 library.
% \\
\begin{figure}[tbh]
\begin{center}
\begin{minipage}{.90\textwidth}
\begin{minipage}{.90\textwidth}
{\small
\begin{verbatim}
... ...
! build a V-cycle preconditioner with 1 block-Jacobi sweep (with
! build a V-cycle preconditioner with 1 block-Jacobi sweep (with
! ILU(0) on the blocks) as pre- and post-smoother, and 8 block-Jacobi
! sweeps (with ILU(0) on the blocks) as coarsest-level solver
call P%init('ML',info)
@ -284,7 +261,7 @@ boundary conditions are also available in the directory \verb|examples/pdegen|.
\begin{figure}[h!]
\begin{center}
\begin{minipage}{.90\textwidth}
\begin{minipage}{.90\textwidth}
{\small
\begin{verbatim}
... ...
@ -309,7 +286,7 @@ boundary conditions are also available in the directory \verb|examples/pdegen|.
\begin{figure}[h!]
\begin{center}
\begin{minipage}{.90\textwidth}
\begin{minipage}{.90\textwidth}
{\small
\begin{verbatim}
... ...
@ -328,7 +305,7 @@ boundary conditions are also available in the directory \verb|examples/pdegen|.
\end{figure}
%%% Local Variables:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "userguide"
%%% End:
%%% End:

@ -1,20 +1,22 @@
\section{License\label{sec:license}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:license} License}}
The MLD2P4 is freely distributable under the following copyright
{\bf DA CONTROLLARE E MODIFICARE INCLUDENDO I CREDITS A MLD2P4}
The AMG4PSBLAS is freely distributable under the following copyright
terms: {\small
\begin{verbatim}
MLD2P4 version 2.1
MultiLevel Domain Decomposition Parallel Preconditioners Package
\begin{verbatim}
AMG4PSBLAS version 1.0
Algebraic MultiGrid Preconditioners Package
based on PSBLAS (Parallel Sparse BLAS version 3.5)
(C) Copyright 2008, 2010, 2012, 2015, 2017
Salvatore Filippone Cranfield University, Cranfield, UK
Pasqua D'Ambra IAC-CNR, Naples, IT
Daniela di Serafino University of Campania L. Vanvitelli, Caserta, IT
Pasqua D'Ambra IAC-CNR, IT
Fabio Durastante University of Pisa and IAC-CNR, IT
Salvatore Filippone University of Rome Tor-Vergata and IAC-CNR, IT
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -27,7 +29,7 @@ terms: {\small
3. The name of the MLD2P4 group or the names of its contributors may
not be used to endorse or promote products derived from this
software without specific written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -39,6 +41,6 @@ terms: {\small
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
\end{verbatim}
}

@ -1,21 +1,21 @@
\clearpage
\section{Adding new smoother and solver objects to MLD2P4\label{sec:adding}}
\section{Adding new smoother and solver objects to AMG4PSBLAS\label{sec:adding}}
Developers can add completely new smoother and/or solver classes
derived from the base objects in the library (see Remark~2 in Section~\ref{sec:precset}),
without recompiling the library itself.
without recompiling the library itself.
To do so, it is necessary first to select the base type to be extended.
In our experience, it is quite likely that the new application needs
only the definition of a ``solver'' object, which is almost
always acting only on the local part of the distributed matrix.
always acting only on the local part of the distributed matrix.
The parallel actions required to connect the various solver objects
are most often already provided by the block-Jacobi or the additive
Schwarz smoothers. To define a new solver, the developer will then
have to define its components and methods, perhaps taking one of the
predefined solvers as a starting point, if possible.
predefined solvers as a starting point, if possible.
Once the new smoother/solver class has been developed, to use it in
the context of the multilevel preconditioners it is necessary to:
@ -30,9 +30,9 @@ following:
\item link the code implementing the various methods into the application executable.
\end{itemize}
The new solver object is then dynamically included in the
preconditioner structure, and acts as a \emph{mold} to which the
preconditioner will conform, even though the MLD2P4 library has not
been modified to account for this new development.
preconditioner structure, and acts as a \emph{mold} to which the
preconditioner will conform, even though the AMG4PSBLAS library has not
been modified to account for this new development.
It is possible to define new values for the keyword \verb|WHAT| in the
\verb|set| routine; if the library code does not recognize a keyword,
@ -50,35 +50,35 @@ factorization under a new name). Because of the specifics of this case, it is
possible to reuse the basic structure of the ILU solver, with its
L/D/U components and the methods needed to apply the solver; only a
few methods, such as the description and most importantly the build,
need to be ovverridden (rewritten).
need to be ovverridden (rewritten).
The interfaces for the calls shown above are defined using
\begin{center}
\begin{tabular}{p{1.4cm}p{12cm}}
\verb|smoother| & \verb|class(mld_x_base_smoother_type)| \\
\verb|smoother| & \verb|class(amg_x_base_smoother_type)| \\
& The user-defined new smoother to be employed in the
preconditioner.\\
\verb|solver| & \verb|class(mld_x_base_solver_type)| \\
\verb|solver| & \verb|class(amg_x_base_solver_type)| \\
& The user-defined new solver to be employed in the
preconditioner.
\end{tabular}
\end{center}
The other arguments are defined in the way described in
Sec.~\ref{sec:precset}. As an example, in the \verb|tests/newslv|
code we define a new object of type \verb|mld_d_tlu_solver_type|, and
code we define a new object of type \verb|amg_d_tlu_solver_type|, and
we pass it as follows:
\begin{verbatim}
! sparse matrix and preconditioner
type(psb_dspmat_type) :: a
type(mld_dprec_type) :: prec
type(mld_d_tlu_solver_type) :: tlusv
type(amg_dprec_type) :: prec
type(amg_d_tlu_solver_type) :: tlusv
......
!
! prepare the preconditioner: an ML with defaults, but with TLU solver at
! intermediate levels. All other parameters are at default values.
!
! intermediate levels. All other parameters are at default values.
!
call prec%init('ML', info)
call prec%hierarchy_build(a,desc_a,info)
nlv = prec%get_nlevs()

@ -1,105 +1,87 @@
\section{General Overview\label{sec:overview}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:overview} General Overview}}
The \textsc{MultiLevel Domain Decomposition Parallel Preconditioners Package based on
PSBLAS (MLD2P4}) provides parallel Algebraic MultiGrid (AMG) and Domain
Decomposition preconditioners (see, e.g., \cite{Briggs2000,Stuben_01,dd2_96}),
The \textsc{Algebraic MultiGrid Preconditioners Package based on
PSBLAS (AMG4PSBLAS)} provides parallel Algebraic MultiGrid (AMG) preconditioners (see, e.g., \cite{Briggs2000,Stuben_01}),
to be used in the iterative solution of linear systems,
\begin{equation}
Ax=b,
\begin{equation}
Ax=b,
\label{system1}
\end{equation}
where $A$ is a square, real or complex, sparse matrix.
\end{equation}
where $A$ is a square, real or complex, sparse symmetric positive definite (s.p.d) matrix.
%
%\textbf{NOTA: Caso non simmetrico, aggregazione con $(A+A^T)$ fatta!
%\textbf{NOTA: Caso non simmetrico, aggregazione con $(A+A^T)$ fatta!
%Dovremmo implementare uno smoothed prolongator
%adeguato e fare qualcosa di consistente anche con 1-lev Schwarz.}
%
The name of the package comes from its original implementation, containing
multilevel additive and hybrid Schwarz preconditioners, as well as one-level additive
Schwarz preconditioners. The current version extends the original plan by including
multilevel cycles and smoothers widely used in multigrid methods.
The multilevel preconditioners implemented in MLD2P4 are obtained by combining
AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and
K-cycles~\cite{Briggs2000,Notay2008} are available, which allow to define
almost all the preconditioners in the package, including the multilevel hybrid
Schwarz ones; a specific cycle is implemented to obtain multilevel additive
Schwarz preconditioners. The Jacobi, hybrid
The preconditioners implemented in AMG4PSBLAS are obtained by combining
3 different types of AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and a version of a Krylov-type cycle (K-cycle)~\cite{Briggs2000,Notay2008} are available, which can be combined with weighted versions of Jacobi, hybrid
%\footnote{see Note 2 in Table~\ref{tab:p_coarse}, p.~28.}
forward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz methods
are available as smoothers. An algebraic approach is used to generate a hierarchy of
forward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz smoothers. An algebraic approach is used to generate a hierarchy of
coarse-level matrices and operators, without explicitly using any information on the
geometry of the original problem, e.g., the discretization of a PDE. To this end,
the smoothed aggregation technique~\cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}
is applied. Either exact or approximate solvers can be used on the coarsest-level
system. Specifically, different sparse LU factorizations from external
packages, and native incomplete LU factorizations and Jacobi, hybrid Gauss-Seidel,
and block-Jacobi solvers are available. All smoothers can be also exploited as one-level
two different coarsening strategies, based on aggregation, are available:
\begin{itemize}
\item a decoupled version of the well known smoothed aggregation procedure proposed in~\cite{BREZINA_VANEK,VANEK_MANDEL_BREZINA}, and already included in the previous versions of the package~\cite{BDDF2007,MLD2P4_TOMS};
\item the first parallel implementation of a coupled version of Coarsening based on Compatible Weighted Matching introduced in~\cite{DV2013,DFV2018} and described in details in~\cite{DDF2020};
\end{itemize}
Either exact or approximate solvers can be used on the coarsest-level system. Specifically, different sparse LU factorizations from external
packages, native incomplete LU factorizations, weighted Jacobi, hybrid Gauss-Seidel,
and block-Jacobi solvers are available. All the smoothers can be also exploited as one-level
preconditioners.
MLD2P4 is written in Fortran~2003, following an
AMG4PSBLAS is written in Fortran~2003, following an
object-oriented design through the exploitation of features
such as abstract data type creation, type extension, functional overloading, and
dynamic memory management. % \textbf{Va bene cos\'{i} o \`e meglio
% fare riferimento alle classi?}
dynamic memory management.
The parallel implementation is based on a Single Program Multiple Data
(SPMD) paradigm. Single and
double precision implementations of MLD2P4 are available for both the
double precision implementations of AMG4PSBLAS are available for both the
real and the complex case, which can be used through a single
interface.
interface.
MLD2P4 has been designed to implement scalable and easy-to-use
AMG4PSBLAS has been designed to implement scalable and easy-to-use
multilevel preconditioners in the context of the PSBLAS (Parallel Sparse BLAS)
computational framework~\cite{psblas_00,PSBLAS3}. PSBLAS provides basic linear algebra
operators and data management facilities for distributed sparse matrices,
as well as parallel Krylov solvers which can be used with the MLD2P4 preconditioners.
as well as parallel Krylov solvers which can be used with the AMG4PSBLAS preconditioners.
The choice of PSBLAS has been mainly motivated by the need of having
a portable and efficient software infrastructure implementing ``de facto'' standard
parallel sparse linear algebra kernels, to pursue goals such as performance,
portability, modularity ed extensibility in the development of the preconditioner
package. On the other hand, the implementation of MLD2P4 has led to some
revisions and extentions of the original PSBLAS kernels.
The inter-process comunication required by MLD2P4 is encapsulated
package. On the other hand, the implementation of AMG4PSBLAS, which was driven by the need to face the exascale challenge, has led to some important revisions and extentions of the PSBLAS infrastructure.
The inter-process comunication required by AMG4PSBLAS is encapsulated
in the PSBLAS routines;
% , except few cases where MPI~\cite{MPI1} is explicitly called.
therefore, MLD2P4 can be run on any parallel machine where PSBLAS
therefore, AMG4PSBLAS can be run on any parallel machine where PSBLAS
implementations are available.
MLD2P4 has a layered and modular software architecture where three main layers can be
AMG4PSBLAS has a layered and modular software architecture where three main layers can be
identified. The lower layer consists of the PSBLAS kernels, the middle one implements
the construction and application phases of the preconditioners, and the upper one
provides a uniform interface to all the preconditioners.
provides a uniform interface to all the preconditioners.
This architecture allows for different levels of use of the package:
few black-box routines at the upper layer allow all users to easily
build and apply any preconditioner available in MLD2P4;
facilities are also available allowing expert users to extend the set of smoothers
build and apply any preconditioner available in AMG4PSBLAS;
facilities are also available allowing expert users to extend the set of smoothers
and solvers for building new versions of the preconditioners (see
Section~\ref{sec:adding}).
We note that the user interface of MLD2P4 2.1 has been extended with respect to the
previous versions in order to separate the construction of the multilevel hierarchy from
the construction of the smoothers and solvers, and to allow for more flexibility
at each level. The software architecture described in~\cite{MLD2P4_TOMS} has significantly
evolved too, in order to fully exploit the Fortran~2003 features implemented in PSBLAS 3.
However, compatibility with previous versions has been preserved.
Section~\ref{sec:adding}).
This guide is organized as follows. General information on the distribution of the source
code is reported in Section~\ref{sec:distribution}, while details on the configuration
and installation of the package are given in Section~\ref{sec:building}. A short description
of the preconditioners implemented in MLD2P4 is provided in Section~\ref{sec:background},
to help the users in choosing among them. The basics for building and applying the
preconditioners with the Krylov solvers implemented in PSBLAS are reported
and installation of the package are given in Section~\ref{sec:building}. The basics for building and applying the
preconditioners with the Krylov solvers implemented in PSBLAS are reported
in~Section~\ref{sec:started}, where the Fortran codes of a few sample programs
are also shown. A reference guide for the user interface routines is provided
in Section~\ref{sec:userinterface}. Information on the extension of the package
through the addition of new smoothers and solvers is reported in Section~\ref{sec:adding}.
through the addition of new smoothers and solvers is reported in Section~\ref{sec:adding}.
The error handling mechanism used by the package
is briefly described in Section~\ref{sec:errors}. The copyright terms concerning the
distribution and modification of MLD2P4 are reported in Appendix~\ref{sec:license}.
distribution and modification of AMG4PSBLAS are reported in Appendix~\ref{sec:license}.
%%% Local Variables:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "userguide"
%%% End:
%%% End:

@ -5,12 +5,12 @@
\usepackage{ifpdf}
% \usepackage{minitoc}
% \setcounter{minitocdepth}{2}
\usepackage[bookmarks=true,
bookmarksnumbered=true,
bookmarksopen=false,
\usepackage[bookmarks=true,
bookmarksnumbered=true,
bookmarksopen=false,
plainpages=false,
pdfpagelabels,
colorlinks,
colorlinks,
citecolor=red,
linkcolor=blue]{hyperref}
\usepackage{html}
@ -26,17 +26,17 @@
\relax
\pdfcompresslevel=0 %-- 0 = none, 9 = best
\pdfinfo{ %-- Info dictionary of PDF output /Author (PD, DdS, SF)
/Title (MultiLevel Domain Decomposition Parallel Preconditioners Package
based on PSBLAS, V. 2.2)
/Subject (MultiLevel Domain Decomposition Parallel Preconditioners Package)
/Keywords (Parallel Numerical Software, Algebraic Multilevel Preconditioners, Sparse Iterative Solvers, PSBLAS, MPI)
/Title (Algebraic MultiGrid Preconditioners Package
based on PSBLAS, V. 1.0)
/Subject (MultiGrid Parallel Preconditioners Package)
/Keywords (Parallel Numerical Software, Algebraic MultiGrid Preconditioners, Sparse Iterative Solvers, PSBLAS, MPI)
/Creator (pdfLaTeX)
/Producer ($Id: userguide.tex 2008-04-08 Pasqua D'Ambra, Daniela di Serafino,
/Producer ($Id: userguide.tex 2021-03-01 Pasqua D'Ambra, Fabio Durastante,
Salvatore Filippone$)
}
\pdfcatalog{ %-- Catalog dictionary of PDF output.
% /URI (http://ce.uniroma2.it/psblas)
}
}
\setlength\textwidth{1.15\textwidth}
\setlength\oddsidemargin{0.3in}
@ -92,7 +92,7 @@
\newcommand{\Ref}[1]{\mbox{(\ref{#1})}}
\begin{document}
\pdfbookmark{MLD2P4 User's and Reference Guide}{title}
\pdfbookmark{AMG4PSBLAS User's and Reference Guide}{title}
\newlength{\centeroffset}
%\setlength{\centeroffset}{-0.5\oddsidemargin}
%\addtolength{\centeroffset}{0.5\evensidemargin}
@ -101,23 +101,30 @@
\vspace*{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
{\Huge\bfseries MLD2P4\\[.8ex] User's and Reference Guide
{\Huge\bfseries AMG4PSBLAS\\[.8ex] User's and Reference Guide
}
\noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex]
\hfill\emph{\Large A guide for the MultiLevel Domain Decomposition \\[.6ex]
Parallel Preconditioners Package
based on PSBLAS}
\hfill\emph{\Large A guide for the Algebraic MultiGrid \\[.6ex]
Preconditioners Package based on PSBLAS}
\end{minipage}}
\vspace{\stretch{1}}
\flushleft
\begin{figure*}[htb]
\begin{center}
\includegraphics[width=0.6\textwidth]{amg4psblaslibrary.png}
\end{center}
\end{figure*}
\vspace{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
{\large\bfseries Pasqua D'Ambra}\\
\large IAC-CNR, Naples, Italy\\[3ex]
{\large\bfseries Daniela di Serafino}\\
\large University of Campania ``Luigi Vanvitelli'', Caserta, Italy\\[3ex]
\large IAC-CNR, Italy\\[3ex]
{\large\bfseries Fabio Durastante}\\
\large University of Pisa and IAC-CNR\\[3ex]
{\large\bfseries Salvatore Filippone} \\
\large Cranfield University, Cranfield, United Kingdom
\large University of Rome Tor-Vergata and IAC-CNR
%\\[10ex]
%\today
\end{minipage}}
@ -125,9 +132,9 @@ based on PSBLAS}
\vspace{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
\large Software version: 2.2\\
\large Software version: 1.0\\
%\today
\large July 31, 2018
\large March 31, 2021
\end{minipage}}
%\addtolength{\textwidth}{\centeroffset}
\vspace{\stretch{2}}
@ -151,7 +158,7 @@ based on PSBLAS}
\begingroup
\renewcommand*{\thepage}{toc}
\tableofcontents
\endgroup
\endgroup
%\cleardoublepage
\clearpage
\thispagestyle{empty}
@ -164,8 +171,8 @@ based on PSBLAS}
\include{overview}
\include{distribution}
\include{building}
\include{background}
\include{building}
%\include{background}
\include{gettingstarted}
\include{userinterface}
\include{newobjects}
@ -177,7 +184,7 @@ based on PSBLAS}
\include{bibliography}
\end{document}
%%% Local Variables:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: 'userguide'
%%% End:
%%% End:

@ -1,13 +1,13 @@
\section{User Interface\label{sec:userinterface}}
\markboth{\textsc{MLD2P4 User's and Reference Guide}}
\markboth{\textsc{AMG4PSBLAS User's and Reference Guide}}
{\textsc{\ref{sec:userinterface} User Interface}}
The basic user interface of MLD2P4 consists of eight methods. The six
methods \verb|init|, \verb|set|, \verb|build|,
The basic user interface of AMG4PBLAS consists of eight methods. The six
methods \verb|init|, \verb|set|, \verb|build|,
\verb|hierarchy_build|, \verb|smoothers_build| and \verb|apply|
encapsulate all the functionalities for the setup and the application
of any multilevel and one-level preconditioner implemented in the
package.
package.
The method \verb|free| deallocates the preconditioner data structure, while
\verb|descr| prints a description of the preconditioner setup by the user.
For backward compatibility, methods are also accessible as
@ -24,12 +24,12 @@ i.e.,
for real double precision, \emph{x} = \verb|c| for complex single precision,
\emph{x} = \verb|z| for complex double precision;
\item the preconditioner data structure must be of type
\verb|mld_|\emph{x}\verb|prec_type|, with \emph{x} =
\verb|amg_|\emph{x}\verb|prec_type|, with \emph{x} =
\verb|s|, \verb|d|, \verb|c|, \verb|z|, according to the sparse
matrix data structure;
\item the arrays containing the vectors $v$ and $w$ involved in
the preconditioner application $w=B^{-1}v$ must be of type
\verb|psb_|\emph{x}\verb|vect_type| with \emph{x} =
the preconditioner application $w=B^{-1}v$ must be of type
\verb|psb_|\emph{x}\verb|vect_type| with \emph{x} =
\verb|s|, \verb|d|, \verb|c|, \verb|z|, in a manner completely
analogous to the sparse matrix type;
\item real parameters defining the preconditioner must be declared
@ -53,10 +53,7 @@ This method allocates and initializes the preconditioner
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x}
% must be chosen according to the real/complex, single/double
% precision version of MLD2P4 under use.\\
\verb|icontxt| & \verb|integer, intent(in)|.\\
& The communication context.\\
\verb|ptype| & \verb|character(len=*), intent(in)|.\\
@ -65,12 +62,7 @@ This method allocates and initializes the preconditioner
& Note that the strings are case insensitive.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
%\verb|nlev| & \verb|integer, optional, intent(in)|.\\
% & The number of levels of the multilevel
% preconditioner. This optional argument is deprecated,
% new codes should set the number of levels with \verb|mld_precset|.\\
% If \verb|nlev| is not present and \verb|ptype|=\verb|'ML'|, \verb|'ml'|,
% then \verb|nlev|=2 is assumed. Otherwise, \verb|nlev| is ignored.\\
\end{tabular}
\vskip1.5\baselineskip
@ -78,7 +70,7 @@ For compatibility with the previous versions of MLD2P4, this method can be also
as follows:
\begin{center}
\verb|call mld_precinit(p,ptype,info)|
\verb|call amg_precinit(p,ptype,info)|
\end{center}
@ -93,19 +85,15 @@ as follows:
\noindent
This method sets the parameters defining the preconditioner \verb|p|. More
precisely, the parameter identified by \verb|what| is assigned the value
contained in \verb|val|.
contained in \verb|val|.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must
% be chosen according to the real/complex, single/double precision
% version of MLD2P4 under use.\\
\verb|what| & \verb|character(len=*)|. \\
& The parameter to be set. It can be specified through its name;
the string is case-insensitive. See
Tables~\ref{tab:p_cycle}-\ref{tab:p_smoother_1}.\\
Tables~\ref{tab:p_cycle}-\ref{tab:p_smoother_1}.\\
\verb|val | & \verb|integer| \emph{or} \verb|character(len=*)| \emph{or}
\verb|real(psb_spk_)| \emph{or} \verb|real(psb_dpk_)|,
\verb|intent(in)|.\\
@ -149,7 +137,7 @@ For compatibility with the previous versions of MLD2P4, this method can be also
as follows:
\begin{center}
\verb|call mld_precset(p,what,val,info)|
\verb|call amg_precset(p,what,val,info)|
\end{center}
\noindent
@ -198,7 +186,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 smoother, and wishes to use a solver
different from the default one, the call to set the solver must come
\emph{after} the call to set the smoother.
\emph{after} the call to set the smoother.
Similar considerations apply to the point-Jacobi, Gauss-Seidel and block-Jacobi
coarsest-level solvers, and shortcuts are available
@ -221,7 +209,7 @@ It is worth noting that, when the matrix is replicated,
the point-Jacobi, hybrid Gauss-Seidel and block-Jacobi solvers
reduce to the corresponding local solver objects (see Remark~2).
For the point-Jacobi and Gauss-Seidel solvers, these objects
correspond to a \emph{single} point-Jacobi sweep and a \emph{single}
correspond to a \emph{single} point-Jacobi sweep and a \emph{single}
Gauss-Seidel sweep, respectively, which are very poor solvers.
On the other hand, the distributed layout can be used with any solver
@ -236,10 +224,10 @@ solver is changed to the default sequential solver.
control for those solvers; for instance, by specifying the keyword
\verb|MUMPS_IPAR_ENTRY| and an appropriate value for \verb|idx|, it is
possible to set any entry in the MUMPS integer control array.
See also Sec.~\ref{sec:adding}.
See also Sec.~\ref{sec:adding}.
%The \verb|what,val| pairs described here are those of the predefined
%moother/solver objects; newly developed solvers may define new pairs
%according to their needs.
%according to their needs.
\bsideways
@ -249,8 +237,6 @@ See also Sec.~\ref{sec:adding}.
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{type of the multilevel preconditioner}}\\ \hline
%\verb|mld_ml_cycle_| \par
\verb|'ML_CYCLE'| & \verb|character(len=*)|
& \texttt{'VCYCLE'} \par \texttt{'WCYCLE'} \par \texttt{'KCYCLE'} \par
\texttt{'MULT'} \par \texttt{'ADD'}
@ -259,28 +245,17 @@ See also Sec.~\ref{sec:adding}.
and Additive Schwarz. \par
Note that hybrid Multiplicative Schwarz is equivalent to V-cycle and
is included for compatibility with previous versions of MLD2P4. \\ \hline
%\verb|mld_outer_sweeps_| \par
\verb|'OUTER_SWEEPS'| & \texttt{integer} &
Any integer \par number $\ge 1$ & 1 &
Number of multilevel cycles. \\ \hline
%\verb|mld_smoother_type_| \par \verb|SMOOTHER_TYPE| & \verb|character(len=*)|
% & \texttt{'JACOBI'} \ \ \ \texttt{'BJAC'} \ \ \ \texttt{'AS'}
% & \texttt{'AS'}
% & Basic predefined one-level preconditioner
% (i.e., smoother): Jacobi, block Jacobi, AS. \\ \hline
%\verb|mld_smoother_pos_| \par \verb|SMOOTHER_POS| & \verb|character(len=*)|
% & \texttt{'PRE'} \ \ \ \texttt{'POST'} \ \ \ \texttt{'TWOSIDE'}
% & \texttt{'TWOSIDE'}
% & ``Position'' of the smoother: pre-smoother, post-smoother,
% pre- and post-smoother. \\
%\hline
\end{tabular}
\end{center}
\caption{Parameters defining the multilevel cycle and the number of cycles to
be applied.
\label{tab:p_cycle}}
\label{tab:p_cycle}}
\esideways
\bsideways
\begin{center}
%\begin{tabular}{|p{5cm}|l|p{2.4cm}|p{2.5cm}|p{5cm}|}
@ -288,8 +263,6 @@ be applied.
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{aggregation algorithm}} \\ \hline
%\verb|mld_min_coarse_size_| \par
\verb|'MIN_COARSE_SIZE'| & \verb|integer|
& Any number \par $> 0$
& $\lfloor 40 \sqrt[3]{n} \rfloor$, where $n$ is the dimension
@ -299,27 +272,23 @@ be applied.
computed coarsest matrix
is lower than or equal to this threshold
(see Note).
% or \par
% the coarsening ratio is lower than or equal to
% its value (see \verb|mld_min_aggr_ratio_|), or \par
% the maximum number of levels is reached
% (see \verb|mld_n_prec_levs_|).
\\ \hline
%\verb|mld_min_cr_ratio_| \par
\\ \hline
\verb|'MIN_CR_RATIO'| & \verb|real|
& Any number \par $> 1$
& 1.5
& Minimum coarsening ratio. The aggregation stops
if the ratio between the matrix dimensions
at two consecutive levels is lower than or equal to this
threshold (see Note).\\ \hline
%\verb|mld_max_levs_| \par
threshold (see Note).\\ \hline
\verb|'MAX_LEVS'| & \verb|integer|
& Any integer \par number $> 1$
& 20
& Maximum number of levels. The aggregation stops
if the number of levels reaches this value (see Note). \\ \hline
%\verb|mld_par_aggr_alg_| \par
if the number of levels reaches this value (see Note). \\ \hline
\verb|'PAR_AGGR_ALG'| & \verb|character(len=*)| \hspace*{-3mm}
& \texttt{'DEC'}, \texttt{'SYMDEC'}
& \texttt{'DEC'}
@ -328,24 +297,24 @@ be applied.
\verb|SYMDEC| option applies decoupled
aggregation to the sparsity pattern
of $A+A^T$.\\ \hline
%\verb|mld_aggr_type_| \par
\verb|'AGGR_TYPE'| & \verb|character(len=*)| \hspace*{-3mm}
& \textbf{\texttt{'SOC1'}} &
\textbf{\texttt{'SOC1'}},
\textbf{\texttt{'SOC2'}}
\textbf{\texttt{'SOC2'}}
& Type of aggregation algorithm: currently,
we implement two measures of strength of
we implement to measures of strength of
connection, the one by Van\v{e}k, Mandel
and Brezina~\cite{VANEK_MANDEL_BREZINA},
and the one by Gratton et al~\cite{GrHeJi:16}. \\ \hline
%\verb|mld_aggr_prol_| \par
\verb|'AGGR_PROL'| & \verb|character(len=*)| \hspace*{-3mm}
& \texttt{'SMOOTHED'}, \texttt{'UNSMOOTHED'} & \texttt{'SMOOTHED'}
& Prolongator used by the aggregation algorithm: smoothed or unsmoothed
(i.e., tentative prolongator). \\
\hline
\multicolumn{5}{|l|}{{\bfseries Note.} The aggregation algorithm stops when
at least one of the following criteria is met:
at least one of the following criteria is met:
the coarse size threshold, the} \\
\multicolumn{5}{|l|}{minimum coarsening ratio, or the maximum number
of levels is reached. Therefore, the actual number of levels may be} \\
@ -355,7 +324,7 @@ of levels. } \\
\end{tabular}
\end{center}
\caption{Parameters defining the aggregation algorithm.
\label{tab:p_aggregation}}
\label{tab:p_aggregation}}
\esideways
\bsideways
@ -365,67 +334,31 @@ of levels. } \\
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\verb|mld_aggr_ord_| \par
\verb|'AGGR_ORD'| & \verb|character(len=*)|
& \texttt{'NATURAL'} \par \texttt{'DEGREE'}
& \texttt{'NATURAL'}
& Initial ordering of indices for the aggregation
algorithm: either natural ordering or sorted by
descending degrees of the nodes in the
matrix graph. \\ \hline
matrix graph. \\ \hline
%Since aggregation is
%heuristic, results will be different.
%\verb|mld_aggr_thresh_| \par
\verb|'AGGR_THRESH'| & \verb|real(|\emph{kind\_parameter}\verb|)|
& Any~real \par number~$\in [0, 1]$
& 0.01
& The threshold $\theta$ in the aggregation algorithm,
see (\ref{eq:strongly_coup}) in Section~\ref{sec:aggregation}.
See also the note at the bottom of this table. \\ \hline
%%\verb|mld_aggr_scale_| \par
% \verb|AGGR_SCALE| & \verb|real(|\emph{kind\_parameter}\verb|)|
% & Any~real \par number~$\in [0, 1]$
% & 1.0
% & Scale factor applied to the threshold in going
% from level $ilev$ to level $ilev+1$. \\ \hline
%\verb|mld_aggr_omega_alg_| \par
%\verb|'AGGR_OMEGA_ALG'|& \verb|character(len=*)|
% & \texttt{'EIG\_EST'} \par \texttt{'USER\_CHOICE'}
% & \texttt{'EIG\_EST'}
% & How the damping parameter $\omega$ in the
% smoothed aggregation is obtained:
% either via an estimate of the spectral radius of
% $D^{-1}A$, where $A$ is the matrix at the current
% level and $D$ is the diagonal matrix with
% the same diagonal entires as $A$, or explicily
% specified by the user. \\ \hline
%\verb|mld_aggr_eig_| \par
%\verb|'AGGR_EIG'| & \verb|character(len=*)|
% & \texttt{'A\_NORMI'}
% & \texttt{'A\_NORMI'}
% & How to estimate the spectral radius of $D^{-1}A$.
% Currently only the infinity norm estimate
% is available. \\ \hline
%\verb|mld_aggr_omega_val_| \par
%\verb|'AGGR_OMEGA_VAL'| & \verb|real(|\emph{kind\_parameter}\verb|)|
% & Any real \par number $>0$
% & $4/(3\rho(D^{-1}A))$
% & Damping parameter $\omega$ in the smoothed aggregation algorithm.
% It must be set by the user if
% \verb|USER_CHOICE| was specified for
% \verb|mld_aggr_omega_alg_|,
% otherwise it is computed by the library, using the
% selected estimate of the spectral radius $\rho(D^{-1}A)$ of
% $D^{-1}A$.\\ \hline
%\verb|mld_aggr_filter_| \par
\verb|'AGGR_FILTER'|
\verb|'AGGR_FILTER'|
& \verb|character(len=*)|
& \texttt{'FILTER'} \par \texttt{'NOFILTER'}
& \texttt{'NOFILTER'} & Matrix used in computing the smoothed
prolongator: filtered or unfiltered (see~(\ref{eq:filtered}) in Section~\ref{sec:aggregation}). \\
\hline
\multicolumn{5}{|l|}{{\bfseries Note.} Different thresholds at different levels, such as
those used in \cite[Section~5.1]{VANEK_MANDEL_BREZINA}, can be easily set by
those used in \cite[Section~5.1]{VANEK_MANDEL_BREZINA}, can be easily set by
invoking the rou-} \\
\multicolumn{5}{|l|}{tine \texttt{set} with
the parameter \texttt{ilev}.} \\
@ -433,31 +366,28 @@ the parameter \texttt{ilev}.} \\
\end{tabular}
\end{center}
\caption{Parameters defining the aggregation algorithm (continued).
\label{tab:p_aggregation_1}}
\label{tab:p_aggregation_1}}
\esideways
\bsideways
\begin{center}
\begin{tabular}{|p{3.9cm}|l|p{1.7cm}|p{1.7cm}|p{8.6cm}|}
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{coarse-space correction at the coarsest level}}\\ \hline
%\verb|mld_coarse_mat_| \par
\verb|'COARSE_MAT'| & \verb|character(len=*)|
& \texttt{'DIST'} \par \texttt{'REPL'}
& \texttt{'REPL'}
& Coarsest matrix layout: distributed among the processes or
replicated on each of them. \\ \hline
%\verb|mld_coarse_solve_| \par
\verb|'COARSE_SOLVE'| & \verb|character(len=*)|
& \texttt{'MUMPS'} \par \texttt{'UMF'} \par
\texttt{'SLU'} \par \texttt{'SLUDIST'} \par
\texttt{'JACOBI'} \par \texttt{'GS'} \par \texttt{'BJAC'}
& \texttt{'MUMPS'} \par \texttt{'UMF'} \par
\texttt{'SLU'} \par \texttt{'SLUDIST'} \par
\texttt{'JACOBI'} \par \texttt{'GS'} \par \texttt{'BJAC'}
& See~Note.
& Solver used at the coarsest level: sequential
LU from MUMPS, UMFPACK, or SuperLU
(plus tri\-an\-gular solve);
(plus tri\-an\-gular solve);
distributed LU from MUMPS or SuperLU\_Dist
(plus triangular solve);
point-Jacobi, hybrid Gauss-Seidel or block-Jacobi. \par
@ -467,35 +397,34 @@ the parameter \texttt{ilev}.} \\
distributed, and \texttt{MUMPS} can be used with either
a replicated or a distributed matrix. When any of the previous
solvers is specified, the matrix layout is set to a default
value which allows the use of the solver (see Remark 3, p.~24).
value which allows the use of the solver (see Remark 3, p.~24).
Note also that UMFPACK and SuperLU\_Dist
are available only in double precision. \\ \hline
%\verb|mld_coarse_subsolve_| \par
\verb|'COARSE_SUBSOLVE'| & \verb|character(len=*)|
& \texttt{'ILU'} \par \texttt{'ILUT'} \par \texttt{'MILU'} \par
\texttt{'MUMPS'} \par \texttt{'SLU'} \par \texttt{'UMF'}
\texttt{'MUMPS'} \par \texttt{'SLU'} \par \texttt{'UMF'}
& See~Note.
& Solver for the diagonal blocks of the coarse matrix,
in case the block Jacobi solver
is chosen as coarsest-level solver: ILU($p$), ILU($p,t$),
MILU($p$), LU from MUMPS, SuperLU or UMFPACK
MILU($p$), LU from MUMPS, SuperLU or UMFPACK
(plus triangular solve).
Note that UMFPACK and SuperLU\_Dist
are available only in double precision. \\
\hline
\multicolumn{5}{|l|}{{\bfseries Note.} Defaults for \texttt{COARSE\_SOLVE} and
\multicolumn{5}{|l|}{{\bfseries Note.} Defaults for \texttt{COARSE\_SOLVE} and
\texttt{COARSE\_SUBSOLVE} are chosen in the following order:} \\
\multicolumn{5}{|l|}{single precision version -- \texttt{MUMPS} if installed,
then \texttt{SLU} if installed,
\multicolumn{5}{|l|}{single precision version -- \texttt{MUMPS} if installed,
then \texttt{SLU} if installed,
\texttt{ILU} otherwise;}\\
\multicolumn{5}{|l|}{double precision version -- \texttt{UMF} if installed,
then \texttt{MUMPS} if installed, then \texttt{SLU} if
\multicolumn{5}{|l|}{double precision version -- \texttt{UMF} if installed,
then \texttt{MUMPS} if installed, then \texttt{SLU} if
installed, \texttt{ILU} otherwise.}\\
\hline
\end{tabular}
\end{center}
\caption{Parameters defining the coarse-space correction at the coarsest
level.\label{tab:p_coarse}}
level.\label{tab:p_coarse}}
\esideways
\bsideways
@ -504,19 +433,15 @@ level.\label{tab:p_coarse}}
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{coarse-space correction at the coarsest level}}\\ \hline
%\verb|mld_coarse_sweeps_| \par
\verb|'COARSE_SWEEPS'| & \verb|integer|
\verb|'COARSE_SWEEPS'| & \verb|integer|
& Any integer \par number $> 0$
& 10
& Number of sweeps when \verb|JACOBI|, \verb|GS| or \verb|BJAC|
is chosen as coarsest-level solver. \\ \hline
%\verb|mld_coarse_fillin_| \par
\verb|'COARSE_FILLIN'| & \verb|integer|
& Any integer \par number $\ge 0$
& 0
& Fill-in level $p$ of the ILU factorizations. \\ \hline
%\verb|mld_coarse_iluthrs_| \par
\verb|'COARSE_ILUTHRS'|
& \verb|real(|\emph{kind\_parameter}\verb|)|
& Any real \par number $\ge 0$
@ -526,7 +451,7 @@ level.\label{tab:p_coarse}}
\end{tabular}
\end{center}
\caption{Parameters defining the coarse-space correction at the coarsest
level (continued).\label{tab:p_coarse_1}}
level (continued).\label{tab:p_coarse_1}}
\esideways
\bsideways
@ -536,8 +461,7 @@ level (continued).\label{tab:p_coarse_1}}
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\multicolumn{5}{|c|}{\emph{basic one-level preconditioner (smoother)}} \\ \hline
%\verb|mld_smoother_type_| \par
\verb|'SMOOTHER_TYPE'| & \verb|character(len=*)|
& \verb|'JACOBI'| \par \verb|'GS'| \par \verb|'BGS'| \par \verb|'BJAC'|
\par \verb|'AS'|
@ -547,11 +471,10 @@ level (continued).\label{tab:p_coarse_1}}
hybrid backward Gauss-Seidel, block-Jacobi, and
Additive Schwarz. \par
It is ignored by one-level preconditioners. \\ \hline
%\verb|mld_sub_solve_| \par
\verb|'SUB_SOLVE'| & \verb|character(len=*)|
& \texttt{'JACOBI'} \par
\texttt{'GS'} \par \texttt{'BGS'} \par \texttt{'ILU'} \par
\texttt{'ILUT'} \par \texttt{'MILU'} \par
\texttt{'GS'} \par \texttt{'BGS'} \par \texttt{'ILU'} \par
\texttt{'ILUT'} \par \texttt{'MILU'} \par
\par \texttt{'MUMPS'} \par \texttt{'SLU'} \par \texttt{'UMF'}
& \texttt{GS} and \texttt{BGS} for pre- and post-smoothers
of multilevel preconditioners, respectively \par
@ -564,16 +487,14 @@ level (continued).\label{tab:p_coarse_1}}
LU from MUMPS, SuperLU or UMFPACK
(plus triangular solve). See Note for details on hybrid
Gauss-Seidel. \\ \hline
%\verb|mld_moother_sweeps_| \par
\verb|'SMOOTHER_SWEEPS'| & \verb|integer|
& Any integer \par number~$\ge 0$
& 1
& Number of sweeps of the smoother or one-level preconditioner.
In the multilevel case, no pre-smother or
post-smoother is used if this parameter is set to 0
post-smoother is used if this parameter is set to 0
together with \verb|pos='PRE'| or \verb|pos='POST|,
respectively. \\ \hline
%\verb|mld_sub_ovr_| \par
\verb|'SUB_OVR'| & \verb|integer|
& Any integer \par number~$\ge 0$
& 1
@ -582,7 +503,7 @@ level (continued).\label{tab:p_coarse_1}}
\end{tabular}
\end{center}
\caption{Parameters defining the smoother or the details of the one-level preconditioner.
\label{tab:p_smoother}}
\label{tab:p_smoother}}
\esideways
\bsideways
@ -592,16 +513,14 @@ level (continued).\label{tab:p_coarse_1}}
\hline
\verb|what| & \textsc{data type} & \verb|val| & \textsc{default} &
\textsc{comments} \\ \hline
%\verb|mld_sub_restr_| \par
\verb|'SUB_RESTR'| & \verb|character(len=*)|
& \texttt{'HALO'} \par \texttt{'NONE'}
& \texttt{'HALO'}
& Type of restriction operator, for Additive Schwarz only:
\texttt{HALO} for taking into account the overlap, \texttt{NONE}
\texttt{HALO} for taking into account the overlap, \texttt{NONE}
for neglecting it. \par
Note that \texttt{HALO} must be chosen for
the classical Addditive Schwarz smoother and its RAS variant.\\ \hline
%\verb|mld_sub_prol_| \par
\verb|'SUB_PROL'| & \verb|character(len=*)|
& \texttt{'SUM'} \par \texttt{'NONE'}
& \texttt{'NONE'}
@ -610,12 +529,10 @@ level (continued).\label{tab:p_coarse_1}}
for neglecting them. \par
Note that \texttt{SUM} must be chosen for the classical Additive
Schwarz smoother, and \texttt{NONE} for its RAS variant. \\ \hline
%\verb|mld_sub_fillin_| \par
\verb|'SUB_FILLIN'| & \verb|integer|
& Any integer \par number~$\ge 0$
& 0
& Fill-in level $p$ of the incomplete LU factorizations. \\ \hline
%\verb|mld_sub_iluthrs_| \par
\verb|'SUB_ILUTHRS'| & \verb|real(|\emph{kind\_parameter}\verb|)|
& Any real number~$\ge 0$
& 0
@ -637,30 +554,18 @@ level (continued).\label{tab:p_coarse_1}}
& 0
& Set an entry in the MUMPS real control array, as
chosen via the \verb|idx| optional argument. \\ %\hline
%\verb|mld_sub_ren_| \par \verb|SUB_REN| & \verb|character(len=*)|
% & \texttt{'RENUM\_NONE'} \texttt{'RENUM\_GLOBAL'} %, \texttt{'RENUM_GPS'}
% & \texttt{'RENUM\_NONE'}
% & Row and column reordering of the local submatrices: no reordering,
% or reordering according to the global numbering of the rows and
% columns of the whole matrix. \\
% \verb|mld_solver_eps_| \par \verb|SOLVER_EPS| & \verb|real|
% & Any~real number
% & 0
% & Stopping tolerance for iterative local solver
% (currently only Gauss-Seidel); if $\le0$, then
% perform prespecified number of iterations. \\ \hline
\hline
\end{tabular}
\end{center}
\caption{Parameters defining the smoother or the details of the one-level preconditioner
(continued).\label{tab:p_smoother_1}}
(continued).\label{tab:p_smoother_1}}
\esideways
\clearpage
\subsection{Method hierarchy\_build\label{sec:hier_bld}}
\begin{center}
\verb|call p%hierarchy_build(a,desc_a,info)|\\
\end{center}
@ -676,15 +581,13 @@ made by the user through the methods \verb|init| and \verb|set|.
\verb|a| & \verb|type(psb_|\emph{x}\verb|spmat_type), intent(in)|. \\
& The sparse matrix structure containing the local part of the
matrix to be preconditioned. Note that \emph{x} must be chosen according
to the real/complex,
to the real/complex,
single/double precision version of MLD2P4 under use.
See the PSBLAS User's Guide for details \cite{PSBLASGUIDE}.\\
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor of \verb|a|. See the PSBLAS User's Guide for
details \cite{PSBLASGUIDE}.\\
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\end{tabular}
@ -693,7 +596,7 @@ single/double precision version of MLD2P4 under use.
\clearpage
\subsection{Method smoothers\_build\label{sec:smooth_bld}}
\begin{center}
\verb|call p%smoothers_build(a,desc_a,p,info[,amold,vmold,imold])|\\
@ -704,7 +607,7 @@ This method builds the smoothers and the coarsest-level solvers for the
multilevel preconditioner \verb|p|, according to the requirements made by
the user through the methods \verb|init| and \verb|set|, and based on the aggregation
hierarchy produced by a previous call to \verb|hierarchy_build|
(see Section~\ref{sec:hier_bld}).
(see Section~\ref{sec:hier_bld}).
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
@ -717,9 +620,6 @@ hierarchy produced by a previous call to \verb|hierarchy_build|
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor of \verb|a|. See the PSBLAS User's Guide for
details \cite{PSBLASGUIDE}.\\
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\verb|amold| & \verb|class(psb_|\emph{x}\verb|_base_sparse_mat), intent(in), optional|. \\
@ -738,7 +638,7 @@ hierarchy produced by a previous call to \verb|hierarchy_build|
\clearpage
\subsection{Method build\label{sec:precbld}}
\begin{center}
\verb|call p%build(a,desc_a,info[,amold,vmold,imold])|\\
\end{center}
@ -750,8 +650,8 @@ made by the user through the methods \verb|init| and \verb|set|
multilevel preconditioners). It is mostly provided for backward
compatibility; indeed, it is internally implemented by invoking the
two previous methods \verb|hierarchy_build| and
\verb|smoothers_build|, whose nomenclature would however be somewhat
unnatural when dealing with simple one-level preconditioners.
\verb|smoothers_build|, whose nomenclature would however be somewhat
unnatural when dealing with simple one-level preconditioners.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
@ -764,9 +664,6 @@ unnatural when dealing with simple one-level preconditioners.
\verb|desc_a| & \verb|type(psb_desc_type), intent(in)|. \\
& The communication descriptor of \verb|a|. See the PSBLAS User's Guide for
details \cite{PSBLASGUIDE}.\\
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\verb|amold| & \verb|class(psb_|\emph{x}\verb|_base_sparse_mat), intent(in), optional|. \\
@ -787,7 +684,7 @@ For compatibility with the previous versions of MLD2P4, this method can be also
as follows:
\begin{center}
\verb|call mld_precbld(p,what,val,info[,amold,vmold,imold])|
\verb|call amg_precbld(p,what,val,info[,amold,vmold,imold])|
\end{center}
\noindent
@ -813,12 +710,8 @@ and hence it is completely transparent to the user.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure, containing the local part of $M$.
% Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|x| & \emph{type}\verb|(|\emph{kind\_parameter}\verb|), dimension(:), intent(in)|.\\
& The local part of the vector $x$. Note that \emph{type} and
& The local part of the vector $x$. Note that \emph{type} and
\emph{kind\_parameter} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|y| & \emph{type}\verb|(|\emph{kind\_parameter}\verb|), dimension(:), intent(out)|.\\
@ -847,7 +740,7 @@ For compatibility with the previous versions of MLD2P4, this method can be also
as follows:
\begin{center}
\verb|call mld_precaply(p,what,val,info)|
\verb|call amg_precaply(p,what,val,info)|
\end{center}
\clearpage
@ -864,9 +757,6 @@ This method deallocates the preconditioner data structure \verb|p|.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{10.5cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\end{tabular}
@ -876,7 +766,7 @@ For compatibility with the previous versions of MLD2P4, this method can be also
as follows:
\begin{center}
\verb|call mld_precfree(p,info)|
\verb|call amg_precfree(p,info)|
\end{center}
@ -896,9 +786,6 @@ or \verb|build|, have been called.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(in)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\verb|iout| & \verb|integer, intent(in), optional|.\\
@ -911,16 +798,16 @@ For compatibility with the previous versions of MLD2P4, this method can be also
as follows:
\begin{center}
\verb|call mld_precdescr(p,info [,iout])|
\verb|call amg_precdescr(p,info [,iout])|
\end{center}
\subsection{Auxiliary Methods\label{sec:auxil}}
Various functionalities are implemented as additional methods of the
preconditioner object.
preconditioner object.
\subsubsection{Method: dump}
\begin{center}
\verb|call p%dump(info[,istart,iend,prefix,head,ac,rp,smoother,solver,global_num])|\\
\end{center}
@ -931,9 +818,6 @@ Dump on file.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\verb|amold| & \verb|class(psb_|\emph{x}\verb|_base_sparse_mat), intent(in), optional|. \\
@ -945,20 +829,20 @@ Dump on file.
\subsubsection{Method: clone}
\begin{center}
\verb|call p%clone(pout,info)|\\
\end{center}
\noindent
Create a (deep) copy of the preconditioner object.
Create a (deep) copy of the preconditioner object.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
\verb|pout| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(out)|.\\
\verb|pout| & \verb|type(amg_|\emph{x}\verb|prec_type), intent(out)|.\\
& The copy of the preconditioner data structure. Note
that \emph{x} must be chosen according
that \emph{x} must be chosen according
to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
@ -967,26 +851,16 @@ Create a (deep) copy of the preconditioner object.
\subsubsection{Method: sizeof}
\begin{center}
\verb|sz = p%sizeof()|\\
\end{center}
\noindent
Return memory footprint in bytes.
% {\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
% \begin{tabular}{p{1.2cm}p{12cm}}
% %\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% % & The preconditioner data structure. Note that \emph{x} must be chosen according
% % to the real/complex, single/double precision version of MLD2P4 under use.\\
% \verb|info| & \verb|integer, intent(out)|.\\
% & Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
% \end{tabular}
Return memory footprint in bytes.
\subsubsection{Method: allocate\_wrk}
\begin{center}
\verb|call p%allocate_wrk(info[, vmold])|\\
\end{center}
@ -996,23 +870,20 @@ Allocate internal work vectors. Each application of the preconditioner
uses a number of work vectors which are allocated internally as
necessary; therefore allocation and deallocation of memory occurs
multiple times during the execution of a Krylov method. In most cases
this strategy is perfectly acceptable, but
this strategy is perfectly acceptable, but
on some platforms, most notably GPUs, memory allocation is
a slow operation, and the default behaviour would lead to a
slowdown. This method allows to trade space for time by preallocating
slowdown. This method allows to trade space for time by preallocating
the internal workspace outside of the invocation of a Krylov
method. When using GPUs or other specialized devices, the \verb|vmold|
argument is also necessary to ensure the internal work vectors are of
the appropriate dynamic type to exploit the accelerator hardware; when
allocation occurs internally this is taken care of based on the dynamic
type of the \verb|x| argument to the \verb|apply| method.
type of the \verb|x| argument to the \verb|apply| method.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\verb|vmold| & \verb|class(psb_|\emph{x}\verb|_base_vect_type), intent(in), optional|. \\
@ -1023,20 +894,17 @@ type of the \verb|x| argument to the \verb|apply| method.
\subsubsection{Method: free\_wrk}
\begin{center}
\verb|call p%free_wrk(info)|\\
\end{center}
\noindent
Deallocate internal work vectors.
Deallocate internal work vectors.
{\vskip1.5\baselineskip\noindent\large\bfseries Arguments} \smallskip
\begin{tabular}{p{1.2cm}p{12cm}}
%\verb|p| & \verb|type(mld_|\emph{x}\verb|prec_type), intent(inout)|.\\
% & The preconditioner data structure. Note that \emph{x} must be chosen according
% to the real/complex, single/double precision version of MLD2P4 under use.\\
\verb|info| & \verb|integer, intent(out)|.\\
& Error code. If no error, 0 is returned. See Section~\ref{sec:errors} for details.\\
\end{tabular}
@ -1045,7 +913,7 @@ Deallocate internal work vectors.
%%% Local Variables:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "userguide"
%%% End:
%%% End:

Loading…
Cancel
Save