You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
342 lines
12 KiB
HTML
342 lines
12 KiB
HTML
17 years ago
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||
|
|
||
|
<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
|
||
|
original version by: Nikos Drakos, CBLU, University of Leeds
|
||
|
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
|
||
|
* with significant contributions from:
|
||
|
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
|
||
|
<HTML>
|
||
|
<HEAD>
|
||
|
<TITLE>Examples</TITLE>
|
||
|
<META NAME="description" CONTENT="Examples">
|
||
|
<META NAME="keywords" CONTENT="userhtml">
|
||
|
<META NAME="resource-type" CONTENT="document">
|
||
|
<META NAME="distribution" CONTENT="global">
|
||
|
|
||
|
<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
|
||
|
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
|
||
|
|
||
|
<LINK REL="STYLESHEET" HREF="userhtml.css">
|
||
|
|
||
|
<LINK REL="previous" HREF="node13.html">
|
||
|
<LINK REL="up" HREF="node13.html">
|
||
|
<LINK REL="next" HREF="node15.html">
|
||
|
</HEAD>
|
||
|
|
||
|
<BODY >
|
||
|
<!--Navigation Panel-->
|
||
|
<A NAME="tex2html234"
|
||
|
HREF="node15.html">
|
||
|
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
|
||
|
SRC="file:/usr/share/latex2html/icons/next.png"></A>
|
||
|
<A NAME="tex2html230"
|
||
|
HREF="node13.html">
|
||
|
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
|
||
|
SRC="file:/usr/share/latex2html/icons/up.png"></A>
|
||
|
<A NAME="tex2html226"
|
||
|
HREF="node13.html">
|
||
|
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
|
||
|
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
|
||
|
<A NAME="tex2html232"
|
||
|
HREF="node1.html">
|
||
|
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
|
||
|
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
|
||
|
<BR>
|
||
|
<B> Next:</B> <A NAME="tex2html235"
|
||
|
HREF="node15.html">User Interface</A>
|
||
|
<B> Up:</B> <A NAME="tex2html231"
|
||
|
HREF="node13.html">Getting Started</A>
|
||
|
<B> Previous:</B> <A NAME="tex2html227"
|
||
|
HREF="node13.html">Getting Started</A>
|
||
|
<B> <A NAME="tex2html233"
|
||
|
HREF="node1.html">Contents</A></B>
|
||
|
<BR>
|
||
|
<BR>
|
||
|
<!--End of Navigation Panel-->
|
||
|
|
||
|
<H2><A NAME="SECTION00071000000000000000"></A><A NAME="sec:examples"></A>
|
||
|
<BR>
|
||
|
Examples
|
||
|
</H2>
|
||
|
|
||
|
<P>
|
||
|
The code reported in Figure <A HREF="#fig:ex_default"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A> shows how to set and apply the default
|
||
|
multi-level preconditioner available in the real double precision version
|
||
|
of MLD2P4 (see Table <A HREF="#tab:precinit"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A>). This preconditioner is chosen
|
||
|
by simply specifying <code>'ML'</code> as second argument of <code>mld_precinit</code>
|
||
|
(a call to <code>mld_precset</code> is not needed) and is applied with the BiCGSTAB
|
||
|
solver provided by PSBLAS. As previously observed, the modules <code>psb_base_mod</code>,
|
||
|
<code>mld_prec_mod</code> and <code>psb_krylov_mod</code> must be used by the example program.
|
||
|
|
||
|
<P>
|
||
|
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 <code>mld_dexample_ml.f90</code>,
|
||
|
in the directory <code>examples/fileread</code> of the MLD2P4 tree (see
|
||
|
Section <A HREF="node5.html#sec:building"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A>).
|
||
|
For details on the use of the PSBLAS routines, see the PSBLAS User's
|
||
|
Guide [<A
|
||
|
HREF="node30.html#PSBLASGUIDE">11</A>].
|
||
|
|
||
|
<P>
|
||
|
The setup and application of the default multi-level
|
||
|
preconditioners for the real single precision and the complex, single and double
|
||
|
precision, versions are obtained with straightforward modifications of the previous
|
||
|
example (see Section <A HREF="node15.html#sec:userinterface"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A> for details). If these versions are installed,
|
||
|
the corresponding Fortran 95 codes are available in <code>examples/fileread/</code>.
|
||
|
|
||
|
<P>
|
||
|
|
||
|
<DIV ALIGN="CENTER"><A NAME="fig:ex_default"></A><A NAME="975"></A>
|
||
|
<TABLE>
|
||
|
<CAPTION ALIGN="BOTTOM"><STRONG>Figure:</STRONG>
|
||
|
Setup and application of the default multi-level Schwarz preconditioner.
|
||
|
</CAPTION>
|
||
|
<TR><TD>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV><TABLE WIDTH="90%">
|
||
|
<TR><TD>
|
||
|
<PRE>
|
||
|
use psb_base_mod
|
||
|
use mld_prec_mod
|
||
|
use psb_krylov_mod
|
||
|
... ...
|
||
|
!
|
||
|
! sparse matrix
|
||
|
type(psb_dspmat_type) :: A
|
||
|
! sparse matrix descriptor
|
||
|
type(psb_desc_type) :: desc_A
|
||
|
! preconditioner
|
||
|
type(mld_dprec_type) :: P
|
||
|
! right-hand side and solution vectors
|
||
|
real(kind(1.d0)) :: b(:), x(:)
|
||
|
... ...
|
||
|
!
|
||
|
! initialize the parallel environment
|
||
|
call psb_init(ictxt)
|
||
|
call psb_info(ictxt,iam,np)
|
||
|
... ...
|
||
|
!
|
||
|
! read and assemble the matrix A and the right-hand side b
|
||
|
! using PSBLAS routines for sparse matrix / vector management
|
||
|
... ...
|
||
|
!
|
||
|
! initialize the default multi-level preconditioner, i.e. hybrid
|
||
|
! Schwarz, using RAS (with overlap 1 and ILU(0) on the blocks)
|
||
|
! as post-smoother and 4 block-Jacobi sweeps (with UMFPACK LU
|
||
|
! on the blocks) as distributed coarse-level solver
|
||
|
call mld_precinit(P,'ML',info)
|
||
|
!
|
||
|
! build the preconditioner
|
||
|
call mld_precbld(A,desc_A,P,info)
|
||
|
!
|
||
|
! set the solver parameters and the initial guess
|
||
|
... ...
|
||
|
!
|
||
|
! solve Ax=b with preconditioned BiCGSTAB
|
||
|
call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
|
||
|
... ...
|
||
|
!
|
||
|
! deallocate the preconditioner
|
||
|
call mld_precfree(P,info)
|
||
|
!
|
||
|
! deallocate other data structures
|
||
|
... ...
|
||
|
!
|
||
|
! exit the parallel environment
|
||
|
call psb_exit(ictxt)
|
||
|
stop
|
||
|
</PRE>
|
||
|
</TD></TR>
|
||
|
</TABLE>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
|
||
|
</DIV></TD></TR>
|
||
|
</TABLE>
|
||
|
</DIV>
|
||
|
|
||
|
<P>
|
||
|
Different versions of multi-level preconditioners can be obtained by changing
|
||
|
the default values of the preconditioner parameters. The code reported in
|
||
|
Figure <A HREF="#fig:ex_3lh"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A> shows how to set a three-level hybrid Schwarz
|
||
|
preconditioner, which uses block Jacobi with ILU(0) on the
|
||
|
local blocks as post-smoother, has a coarsest matrix replicated on the processors,
|
||
|
and solves the coarsest-level system with the LU factorization from UMFPACK [<A
|
||
|
HREF="node30.html#UMFPACK">8</A>].
|
||
|
The number of levels is specified by using <code>mld_precinit</code>; the other
|
||
|
preconditioner parameters are set by calling <code>mld_precset</code>. Note that
|
||
|
the type of multilevel framework (i.e. multiplicative among the levels
|
||
|
with post-smoothing only) is not specified since it is the default
|
||
|
set by <code>mld_precinit</code>.
|
||
|
|
||
|
<P>
|
||
|
Figure <A HREF="#fig:ex_3la"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A> shows how to
|
||
|
set a three-level additive Schwarz preconditioner,
|
||
|
which uses RAS, with overlap 1 and ILU(0) on the blocks,
|
||
|
as pre- and post-smoother, and applies five block-Jacobi sweeps, with
|
||
|
the UMFPACK LU factorization on the blocks, as distributed coarsest-level
|
||
|
solver. Again, <code>mld_precset</code> is used only to set
|
||
|
non-default values of the parameters (see Tables <A HREF="#tab:p_type"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A>-<A HREF="#tab:p_coarse"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A>).
|
||
|
In both cases, the construction and the application of the preconditioner
|
||
|
are carried out as for the default multi-level preconditioner.
|
||
|
The code fragments shown in in Figures <A HREF="#fig:ex_3lh"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A>-<A HREF="#fig:ex_3la"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A> are
|
||
|
included in the example program file <code>mld_dexample_ml.f90</code> too.
|
||
|
|
||
|
<P>
|
||
|
Finally, Figure <A HREF="#fig:ex_1l"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
|
||
|
SRC="file:/usr/share/latex2html/icons/crossref.png"></A> shows the setup of a one-level
|
||
|
additive Schwarz preconditioner, i.e. RAS with overlap 2. The corresponding
|
||
|
example program is available in <code>mld_dexample_1lev.f90</code>.
|
||
|
|
||
|
<P>
|
||
|
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 <code>examples/pdegen</code>.
|
||
|
|
||
|
<P>
|
||
|
|
||
|
<DIV ALIGN="CENTER"><A NAME="fig:ex_3lh"></A><A NAME="977"></A>
|
||
|
<TABLE>
|
||
|
<CAPTION ALIGN="BOTTOM"><STRONG>Figure:</STRONG>
|
||
|
Setup of a hybrid three-level Schwarz preconditioner.</CAPTION>
|
||
|
<TR><TD>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV><TABLE WIDTH="90%">
|
||
|
<TR><TD>
|
||
|
<PRE>
|
||
|
... ...
|
||
|
! set a three-level hybrid Schwarz preconditioner, which uses
|
||
|
! block Jacobi (with ILU(0) on the blocks) as post-smoother,
|
||
|
! a coarsest matrix replicated on the processors, and the
|
||
|
! LU factorization from UMFPACK as coarse-level solver
|
||
|
call mld_precinit(P,'ML',info,nlev=3)
|
||
|
call_mld_precset(P,mld_smoother_type_,'BJAC',info)
|
||
|
call mld_precset(P,mld_coarse_mat_,'REPL',info)
|
||
|
call mld_precset(P,mld_coarse_solve_,'UMF',info)
|
||
|
... ...
|
||
|
</PRE>
|
||
|
</TD></TR>
|
||
|
</TABLE>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV>
|
||
|
<P>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV></TD></TR>
|
||
|
</TABLE>
|
||
|
</DIV>
|
||
|
|
||
|
<P>
|
||
|
|
||
|
<DIV ALIGN="CENTER"><A NAME="fig:ex_3la"></A><A NAME="979"></A>
|
||
|
<TABLE>
|
||
|
<CAPTION ALIGN="BOTTOM"><STRONG>Figure:</STRONG>
|
||
|
Setup of an additive three-level Schwarz preconditioner.</CAPTION>
|
||
|
<TR><TD>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV><TABLE WIDTH="90%">
|
||
|
<TR><TD>
|
||
|
<PRE>
|
||
|
... ...
|
||
|
! set a three-level additive Schwarz preconditioner, which uses
|
||
|
! RAS (with overlap 1 and ILU(0) on the blocks) as pre- and
|
||
|
! post-smoother, and 5 block-Jacobi sweeps (with UMFPACK LU
|
||
|
! on the blocks) as distributed coarsest-level solver
|
||
|
call mld_precinit(P,'ML',info,nlev=3)
|
||
|
call mld_precset(P,mld_ml_type_,'ADD',info)
|
||
|
call_mld_precset(P,mld_smoother_pos_,'TWOSIDE',info)
|
||
|
call mld_precset(P,mld_coarse_sweeps_,5,info)
|
||
|
... ...
|
||
|
</PRE>
|
||
|
</TD></TR>
|
||
|
</TABLE>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV>
|
||
|
<P>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV></TD></TR>
|
||
|
</TABLE>
|
||
|
</DIV>
|
||
|
|
||
|
<P>
|
||
|
|
||
|
<DIV ALIGN="CENTER"><A NAME="fig:ex_1l"></A><A NAME="981"></A>
|
||
|
<TABLE>
|
||
|
<CAPTION ALIGN="BOTTOM"><STRONG>Figure:</STRONG>
|
||
|
Setup of a one-level Schwarz preconditioner.</CAPTION>
|
||
|
<TR><TD>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
</DIV><TABLE WIDTH="90%">
|
||
|
<TR><TD>
|
||
|
<PRE>
|
||
|
... ...
|
||
|
! set RAS with overlap 2 and ILU(0) on the local blocks
|
||
|
call mld_precinit(P,'AS',info)
|
||
|
call mld_precset(P,mld_sub_ovr_,2,info)
|
||
|
... ...
|
||
|
</PRE>
|
||
|
</TD></TR>
|
||
|
</TABLE>
|
||
|
<DIV ALIGN="CENTER">
|
||
|
|
||
|
</DIV></TD></TR>
|
||
|
</TABLE>
|
||
|
</DIV>
|
||
|
|
||
|
<P>
|
||
|
|
||
|
<BR><B>Remark 3.</B> Any PSBLAS-based program using the basic preconditioners
|
||
|
implemented in PSBLAS 2.0, i.e. the diagonal and block-Jacobi ones,
|
||
|
can use the diagonal and block-Jacobi preconditioners
|
||
|
implemented in MLD2P4 without any change in the code.
|
||
|
The PSBLAS-based program must be only recompiled
|
||
|
and linked to the MLD2P4 library.
|
||
|
|
||
|
<P>
|
||
|
<HR>
|
||
|
<!--Navigation Panel-->
|
||
|
<A NAME="tex2html234"
|
||
|
HREF="node15.html">
|
||
|
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
|
||
|
SRC="file:/usr/share/latex2html/icons/next.png"></A>
|
||
|
<A NAME="tex2html230"
|
||
|
HREF="node13.html">
|
||
|
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
|
||
|
SRC="file:/usr/share/latex2html/icons/up.png"></A>
|
||
|
<A NAME="tex2html226"
|
||
|
HREF="node13.html">
|
||
|
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
|
||
|
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
|
||
|
<A NAME="tex2html232"
|
||
|
HREF="node1.html">
|
||
|
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
|
||
|
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
|
||
|
<BR>
|
||
|
<B> Next:</B> <A NAME="tex2html235"
|
||
|
HREF="node15.html">User Interface</A>
|
||
|
<B> Up:</B> <A NAME="tex2html231"
|
||
|
HREF="node13.html">Getting Started</A>
|
||
|
<B> Previous:</B> <A NAME="tex2html227"
|
||
|
HREF="node13.html">Getting Started</A>
|
||
|
<B> <A NAME="tex2html233"
|
||
|
HREF="node1.html">Contents</A></B>
|
||
|
<!--End of Navigation Panel-->
|
||
|
<ADDRESS>
|
||
|
Salvatore Filippone
|
||
|
2008-07-22
|
||
|
</ADDRESS>
|
||
|
</BODY>
|
||
|
</HTML>
|