Features Download
From: Jed Brown <jed-/HVN1ckE1P4 <at> public.gmane.org>
Subject: Re: Question about Hypre boomerAMG
Newsgroups: gmane.comp.mathematics.libmesh.user
Date: Friday 12th February 2010 12:34:56 UTC (over 8 years ago)
Hi John, I'm CCing the list because I think this is an important, and
potentially dangerous, issue.

On Thu, 11 Feb 2010 17:16:21 -0600, John Peterson
> Hi Jed,
> I was hoping you could elaborate slightly on the point you made here:
> http://www.mail-archive.com/[email protected]/msg01372.html
> "Since BoomerAMG [1] and ML fail when naively given indefinite

Multigrid in general breaks down for indefinite systems unless you are
very careful about choosing smoothers and coarse spaces that respect the
indefiniteness, and even when you do, they tend not to be nearly as
robust as the analogues for definite systems.  The same applies to
multilevel domain decomposition (2-level Schwarz, BDDC/FETI-DP) which
are closely related to multigrid.

> AMG definitely fails if used for libmesh's example 13 (Navier-Stokes),
> but by "fails" I mean "gets the wrong answer".  It still definitely
> gets an answer though, and the linear solver "converges" beautifully
> on the Newton iterations.  Can you explain why it would converge to a
> wrong answer?  I was kind of under the (evidently wrong) impression
> that preconditioning controls how quickly you get an answer, but
> doesn't really change the answer you'll actually get.

The problem is that this preconditioner ends up being singular.  In
particular, it's null space contains fields that are not
divergence-free.  Run with -ksp_monitor_true_residual and you'll see
that the true residual stagnates, so it's not converging to anything

Residuals decrease by a huge amount at first due to the penalty
boundaries, (which most preconditioners can hide), but then don't go any
further.  If you strip out the adaptive linear solve tolerances from the
example (this message will be much clearer if you follow along, perhaps
by applying the attached patches), and run

  ./ex13-dbg -ksp_monitor_true_residual -ksp_converged_reason -ksp_rtol
1e-15 -ksp_gmres_restart 300 -pc_type ilu

you'll see that ILU stagnates eventually as well, but this is just due
to numerical instabilities and with -ksp_gmres_modifiedgramschmidt, you
can get 12 digits (relative to the initial residual).  Also note that
the penalty no longer causes huge residuals after the first solve.
Since the available precision (12 digits) is so close to the current
penalty (1e10), we really ought to decrease the penalty just to
determine that the first solve has worked.  For the following, I have
decreased it to 1e5, so although the boundary conditions won't be
well-satisfied, we can check to high precision whether we're actually
converging in the interior.

  ./ex13-dbg -ksp_monitor_true_residual -ksp_converged_reason -ksp_rtol
1e-15 -ksp_gmres_modifiedgramschmidt -ksp_gmres_restart 300 -pc_type ilu

This converges to 1e-7, which is good (12 digits) and it keeps getting
better on subsequent solves.  On the other hand

  ./ex13-dbg -ksp_monitor_true_residual -ksp_converged_reason -ksp_rtol
1e-15 -ksp_gmres_modifiedgramschmidt -ksp_gmres_restart 300 -pc_type hypre

only converges to 3.5e-2, pretty much the same as when the penalty was
much bigger.  The preconditioned residual keeps falling reliably, but
the unpreconditioned residual stagnates quickly, and doesn't even drop
on subsequent iterations.  The preconditioner is essentially singular,
which means that despite converging fantastically in the preconditioned
norm, we're not actually getting divergence-free fields, so precondioned
residuals are meaningless.

If we use right preconditioning, then the norms are all
unpreconditioned.  (Note that this means you need to use really tight
tolerances when using penalty boundary conditions!)  So here we converge
nicely, and the penaly is pretty much taken care of in the first

  ./ex13-dbg -ksp_type fgmres -ksp_monitor -ksp_converged_reason -ksp_rtol
1e-15 -ksp_gmres_modifiedgramschmidt -ksp_gmres_restart 300 -pc_type ilu

But here we obviously don't converge at all

  ./ex13-dbg -ksp_type fgmres -ksp_monitor -ksp_converged_reason -ksp_rtol
1e-15 -ksp_gmres_modifiedgramschmidt -ksp_gmres_restart 300 -pc_type hypre

Indeed, we stagnate after only 1 iteration, and the residual is the same
size as after one application of ILU, and only a little smaller than
after one applicaion of Jacobi.  So apparently BoomerAMG is *only*
satisfying the penalty boundary conditions, and this solution is
completely worthless.

CD: 4ms