<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- Converted with LaTeX2HTML 2017.2 (Released Jan 23, 2017) -->
< HTML >
< HEAD >
< TITLE > Getting Started< / TITLE >
< META NAME = "description" CONTENT = "Getting Started" >
< META NAME = "keywords" CONTENT = "userhtml" >
< META NAME = "resource-type" CONTENT = "document" >
< META NAME = "distribution" CONTENT = "global" >
< META NAME = "Generator" CONTENT = "LaTeX2HTML v2017.2" >
< META HTTP-EQUIV = "Content-Style-Type" CONTENT = "text/css" >
< LINK REL = "STYLESHEET" HREF = "userhtml.css" >
< LINK REL = "next" HREF = "node18.html" >
< LINK REL = "previous" HREF = "node12.html" >
< LINK REL = "up" HREF = "userhtml.html" >
< LINK REL = "next" HREF = "node17.html" >
< / HEAD >
< BODY >
< DIV CLASS = "navigation" > <!-- Navigation Panel -->
< A NAME = "tex2html283"
HREF="node17.html">
< IMG WIDTH = "37" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "next" SRC = "next.png" > < / A >
< A NAME = "tex2html279"
HREF="userhtml.html">
< IMG WIDTH = "26" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "up" SRC = "up.png" > < / A >
< A NAME = "tex2html273"
HREF="node15.html">
< IMG WIDTH = "63" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "previous" SRC = "prev.png" > < / A >
< A NAME = "tex2html281"
HREF="node2.html">
< IMG WIDTH = "65" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "contents" SRC = "contents.png" > < / A >
< BR >
< B > Next:< / B > < A NAME = "tex2html284"
HREF="node17.html">Examples< / A >
< B > Up:< / B > < A NAME = "tex2html280"
HREF="userhtml.html">userhtml< / A >
< B > Previous:< / B > < A NAME = "tex2html274"
HREF="node15.html">Smoothers and coarsest-level solvers< / A >
< B > < A NAME = "tex2html282"
HREF="node2.html">Contents< / A > < / B >
< BR >
< BR > < / DIV >
<!-- End of Navigation Panel -->
< H1 > < A NAME = "SECTION00070000000000000000" > < / A > < A NAME = "sec:started" > < / A >
< BR >
Getting Started
< / H1 > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < / BIG > < / BIG >
< P >
< BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > We describe the basics for building and applying MLD2P4 one-level and multilevel
(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS [< A
HREF="node36.html#PSBLASGUIDE">13< / A > ].
The following steps are required:
< / BIG > < / BIG > < / BIG >
< OL >
< LI > < SPAN CLASS = "textit" > Declare the preconditioner data structure< / SPAN > . It is a derived data type,
< code > mld_< / code > < SPAN CLASS = "textit" > x< / SPAN > < code > prec_< / code > < code > type< / code > , where < SPAN CLASS = "textit" > x< / SPAN > may be < code > s< / code > , < code > d< / code > , < code > c< / code >
or < code > z< / code > , according to the basic data type of the sparse matrix
(< code > s< / code > = real single precision; < code > d< / code > = real double precision;
< code > c< / code > = complex single precision; < code > z< / code > = complex double precision).
This data structure is accessed by the user only through the MLD2P4 routines,
following an object-oriented approach.
< / LI >
< LI > < SPAN CLASS = "textit" > Allocate and initialize the preconditioner data structure, according to
a preconditioner type chosen by the user< / SPAN > . This is performed by the routine
< code > init< / code > , which also sets defaults for each preconditioner
type selected by the user. The preconditioner types and the defaults associated
with them are given in Table < A HREF = "#tab:precinit" > 1< / A > , where the strings used by
< code > init< / code > to identify the preconditioner types are also given.
Note that these strings are valid also if uppercase letters are substituted by
corresponding lowercase ones.
< / LI >
< LI > < SPAN CLASS = "textit" > Modify the selected preconditioner type, by properly setting
preconditioner parameters.< / SPAN > This is performed by the routine < code > set< / code > .
This routine must be called only if the user wants to modify the default values
of the parameters associated with the selected preconditioner type, to obtain a variant
of that preconditioner. Examples of use of < code > set< / code > are given in
Section < A HREF = "node17.html#sec:examples" > 5.1< / A > ; a complete list of all the
preconditioner parameters and their allowed and default values is provided in
Section < A HREF = "node18.html#sec:userinterface" > 6< / A > , Tables < A HREF = "#tab:p_cycle" > 2< / A > -< A HREF = "#tab:p_smoother_1" > 8< / A > .
< / LI >
< LI > < SPAN CLASS = "textit" > Build the preconditioner for a given matrix< / SPAN > . If the selected preconditioner
is multilevel, then two steps must be performed, as specified next.
< DL COMPACT >
< DT > 4.1< / DT >
< DD > < SPAN CLASS = "textit" > Build the aggregation hierarchy for a given matrix.< / SPAN > This is
performed by the routine < code > hierarchy_build< / code > .
< / DD >
< DT > 4.2< / DT >
< DD > < SPAN CLASS = "textit" > Build the preconditioner for a given matrix.< / SPAN > This is performed
by the routine < code > smoothers_build< / code > .
< / DD >
< / DL >
If the selected preconditioner is one-level, it is built in a single step,
performed by the routine < code > bld< / code > .
< / LI >
< LI > < SPAN CLASS = "textit" > Apply the preconditioner at each iteration of a Krylov solver.< / SPAN >
This is performed by the method < code > apply< / code > . When using the PSBLAS Krylov solvers,
this step is completely transparent to the user, since < code > apply< / code > is called
by the PSBLAS routine implementing the Krylov solver (< code > psb_krylov< / code > ).
< / LI >
< LI > < SPAN CLASS = "textit" > Free the preconditioner data structure< / SPAN > . This is performed by
the routine < code > free< / code > . This step is complementary to step 1 and should
be performed when the preconditioner is no more used.
< / LI >
< / OL > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < / BIG > < / BIG >
< P >
< BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > All the previous routines are available as methods of the preconditioner object.
A detailed description of them is given in Section < A HREF = "node18.html#sec:userinterface" > 6< / A > .
Examples showing the basic use of MLD2P4 are reported in Section < A HREF = "node17.html#sec:examples" > 5.1< / A > .
< / BIG > < / BIG > < / BIG >
< P >
< BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < / BIG > < / BIG >
< BR > < P > < / P >
< DIV ALIGN = "CENTER" > < A NAME = "904" > < / A >
< TABLE >
< CAPTION > < STRONG > Table 1:< / STRONG >
Preconditioner types, corresponding strings and default choices.
< / CAPTION >
< TR > < TD >
< DIV ALIGN = "CENTER" >
< TABLE CELLPADDING = 3 BORDER = "1" ALIGN = "CENTER" >
< TR > < TD ALIGN = "LEFT" > < SMALL > TYPE< / SMALL > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < SMALL > STRING< / SMALL > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > < SMALL > DEFAULT PRECONDITIONER< / SMALL > < / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > No preconditioner< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'NONE'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > Considered to use the PSBLAS
Krylov solvers with no preconditioner.< / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > Diagonal< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'DIAG'< / code > or < code > 'JACOBI'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > Diagonal preconditioner.
For any zero diagonal entry of the matrix to be preconditioned,
the corresponding entry of the preconditioner is set to 1.< / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > Gauss-Seidel< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'GS'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > Hybrid Gauss-Seidel (forward), that is,
global block Jacobi with
Gauss-Seidel as local solver.< / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > Symmetrized Gauss-Seidel< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'FBGS'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > Symmetrized hybrid Gauss-Seidel,that is,
forward Gauss-Seidel followed by
backward Gauss-Seidel.< / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > Block Jacobi< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'BJAC'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > Block-Jacobi with ILU(0) on the local blocks.< / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > Additive Schwarz< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'AS'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > Additive Schwarz (AS),
with overlap 1 and ILU(0) on the local blocks.< / TD >
< / TR >
< TR > < TD ALIGN = "LEFT" > Multilevel< / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 51 > < code > 'ML'< / code > < / TD >
< TD ALIGN = "LEFT" VALIGN = "TOP" WIDTH = 232 > V-cycle with one hybrid forward Gauss-Seidel
(GS) sweep as pre-smoother and one hybrid backward
GS sweep as post-smoother, basic smoothed aggregation
as coarsening algorithm, and LU (plus triangular solve)
as coarsest-level solver. See the default values in
Tables < A HREF = "#tab:p_cycle" > 2< / A > -< A HREF = "#tab:p_smoother_1" > 8< / A >
for further details of the preconditioner.< / TD >
< / TR >
< / TABLE >
< / DIV > < / TD > < / TR >
< / TABLE >
< / DIV > < P > < / P >
< BR > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < / BIG > < / BIG >
< P >
< BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > Note that the module < code > mld_prec_mod< / code > , containing the definition of the
preconditioner data type and the interfaces to the routines of MLD2P4,
must be used in any program calling such routines.
The modules < code > psb_base_mod< / code > , for the sparse matrix and communication descriptor
data types, and < code > psb_krylov_mod< / code > , for interfacing with the
Krylov solvers, must be also used (see Section < A HREF = "node17.html#sec:examples" > 5.1< / A > ).
< BR > < / BIG > < / BIG > < / BIG >
< P >
< BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < SPAN CLASS = "textbf" > Remark 1.< / SPAN > Coarsest-level solvers based on the LU factorization,
such as those implemented in UMFPACK, MUMPS, SuperLU, and SuperLU_Dist,
usually lead to smaller numbers of preconditioned Krylov
iterations than inexact solvers, when the linear system comes from
a standard discretization of basic scalar elliptic PDE problems. However,
this does not necessarily correspond to the smallest execution time
on parallel computers.
< / BIG > < / BIG > < / BIG >
< P >
< BIG CLASS = "LARGE" > < BIG CLASS = "LARGE" > < / BIG > < / BIG >
< BR > < HR >
<!-- Table of Child - Links -->
< A NAME = "CHILD_LINKS" > < STRONG > Subsections< / STRONG > < / A >
< UL CLASS = "ChildLinks" >
< LI > < A NAME = "tex2html285"
HREF="node17.html">Examples< / A >
< / UL >
<!-- End of Table of Child - Links -->
< DIV CLASS = "navigation" > < HR >
<!-- Navigation Panel -->
< A NAME = "tex2html283"
HREF="node17.html">
< IMG WIDTH = "37" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "next" SRC = "next.png" > < / A >
< A NAME = "tex2html279"
HREF="userhtml.html">
< IMG WIDTH = "26" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "up" SRC = "up.png" > < / A >
< A NAME = "tex2html273"
HREF="node15.html">
< IMG WIDTH = "63" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "previous" SRC = "prev.png" > < / A >
< A NAME = "tex2html281"
HREF="node2.html">
< IMG WIDTH = "65" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "contents" SRC = "contents.png" > < / A >
< BR >
< B > Next:< / B > < A NAME = "tex2html284"
HREF="node17.html">Examples< / A >
< B > Up:< / B > < A NAME = "tex2html280"
HREF="userhtml.html">userhtml< / A >
< B > Previous:< / B > < A NAME = "tex2html274"
HREF="node15.html">Smoothers and coarsest-level solvers< / A >
< B > < A NAME = "tex2html282"
HREF="node2.html">Contents< / A > < / B > < / DIV >
<!-- End of Navigation Panel -->
< / BODY >
< / HTML >