12 Feb 13:34 2010

## Re: Question about Hypre boomerAMG

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 <peterson@...> wrote: > Hi Jed, > > I was hoping you could elaborate slightly on the point you made here: > > http://www.mail-archive.com/libmesh-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f <at> public.gmane.org/msg01372.html > > "Since BoomerAMG [1] and ML fail when naively given indefinite matrices..." 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 useful. 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 iteration. ./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. Jed

------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev

_______________________________________________ Libmesh-users mailing list Libmesh-users@... https://lists.sourceforge.net/lists/listinfo/libmesh-users