[petsc-users] Null space and preconditioners

Mark Adams mfadams at lbl.gov
Mon Mar 21 13:10:48 CDT 2022


On Mon, Mar 21, 2022 at 1:51 PM Marco Cisternino <
marco.cisternino at optimad.it> wrote:

>
>
> *From:* Matthew Knepley <knepley at gmail.com>
> *Sent:* lunedì 21 marzo 2022 18:31
> *To:* Marco Cisternino <marco.cisternino at optimad.it>
> *Cc:* Mark Adams <mfadams at lbl.gov>; petsc-users at mcs.anl.gov
> *Subject:* Re: [petsc-users] Null space and preconditioners
>
>
>
> On Mon, Mar 21, 2022 at 1:25 PM Marco Cisternino <
> marco.cisternino at optimad.it> wrote:
>
> Thank you, Matt.
>
>    1. I already set the null space and test it in the toy code
>
> If you set this and it is not working, something is wrong. This will
> remove null space components from each update in the Krylov space.
>
> This is done in an example where I check convergence to the exact
> solution:
> https://gitlab.com/petsc/petsc/-/blob/main/src/snes/tutorials/ex69.c
>
>
>
> Do I have to set a special null space when I use GAMG?
>

No, GAMG does not look at the NULL space. (GAMG can use a _near_ null
space, but that is not needed here_.


> The toy code works for PCNONE and PCILU, giving a zero mean solution the
> first PC and an almost zero mean solution the second one.
> GAMG floats away, quoting Mark.
>

Humm, if it's drifting off then it sounds like the null space is not
getting cleaned by KSP. If you use the svd coarse solver then GAMG should
work.'
You seem to be using KSPFGMRES. Use -ksp_type cg
Maybe try '-info :ksp'. THis will have the KSP print diagnostics. Maybe it
will say something about the null space.

I don't know what you mean by "I get 16 inf elements". If you have a 16
cell problem the parallel coarse grid solver should work .. Oh well press
on. svd is better anyway.

Looking at what I do:
> MatNullSpaceCreate(PETSC_COMM_WORLD, PETSC_TRUE, 0, nullptr, &nullspace);
> MatSetNullSpace(matrix, nullspace);
> it is more or less what you do at lines 3231-3233 of your reference. Am I
> wrong?
> What about lines 3220-3223? What is the difference between nullSpace and
> nullSpacePres?
>
>    1.
>    2. I tried your suggestion: the norm and the mean of the solution
>    using -mg_coarse_pc_type svd with PCGAMG is much closer to the one of
>    PCNONE (the norm is the same up to the 6th digit, the mean is about
>    10e-4 with “svd” PCGAMG and 10e-17 with PCNONE). I’m going to try with the
>    real code and see what happens on larger meshes
>
> This is not perfect since null space components can be introduced by the
> rest of the preconditioner, but when I use range-space smoothers and
>
> local interpolation it tends to be much better for me. Maybe it is just my
> problems.
>
>
>
> Is there a way to set -mg_coarse_pc_type svd with the API into the code?
>

There is not an easy way that I know of. You can insert the option in the
database with:

ierr = PetscOptionsSetValue(NULL,"-mg_coarse_pc_type","svd");CHKERRQ(ierr);


>
>
> Thanks,
>
>
>
> Marco
>
>
>
>   Thanks,
>
>
>
>      Matt
>
>
>
> Thank you all.
>
>
>
> Marco Cisternino
>
>
>
>
>
> *From:* Matthew Knepley <knepley at gmail.com>
> *Sent:* lunedì 21 marzo 2022 18:16
> *To:* Mark Adams <mfadams at lbl.gov>
> *Cc:* Marco Cisternino <marco.cisternino at optimad.it>;
> petsc-users at mcs.anl.gov
> *Subject:* Re: [petsc-users] Null space and preconditioners
>
>
>
> On Mon, Mar 21, 2022 at 12:06 PM Mark Adams <mfadams at lbl.gov> wrote:
>
> The solution for Neumann problems can "float away" if the constant is not
> controlled in some way because floating point errors can introduce it even
> if your RHS is exactly orthogonal to it.
>
>
>
> You should use a special coarse grid solver for GAMG but it seems to be
> working for you.
>
>
>
> I have lost track of the simply way to have the KSP solver clean the
> constant out, which is what you want.
>
>
>
> can someone help Marco?
>
>
>
> I have not had time to look at the code. However, here are two ways we use
> to fix the pure Neumann solution:
>
>
>
> 1) Attach a null space to the operator using
> https://petsc.org/main/docs/manualpages/Mat/MatSetNullSpace.html
>
>
>
> 2) Use a coarse grid solver that does least-squares
>
>
>
>   -mg_coarse_pc_type svd
>
>
>
>   Thanks,
>
>
>
>      Matt
>
>
>
> Mark
>
>
>
>
>
>
>
>
>
>
>
> On Mon, Mar 21, 2022 at 8:18 AM Marco Cisternino <
> marco.cisternino at optimad.it> wrote:
>
> Good morning,
>
> I’m observing an unexpected (to me) behaviour of my code.
>
> I tried to reduce the problem in a toy code here attached.
> The toy code archive contains a small main, a matrix and a rhs.
>
> The toy code solves the linear system and check the norms and the mean of
> the solution.
>
> The problem into the matrix and the rhs is the finite volume
> discretization of the pressure equation of an incompressible NS solver.
>
> It has been cooked as tiny as possible (16 cells!).
>
> It is important to say that it is an elliptic problem with homogeneous
> Neumann boundary conditions only, for this reason the toy code sets a null
> space containing the constant.
>
>
>
> The unexpected (to me) behaviour is evident by launching the code using
> different preconditioners, using -pc-type <pctype>
> I tested using PCNONE (“none”), PCGAMG (“gamg”) and PCILU (“ilu”). The
> default solver is KSPFGMRES.
>
> Using the three PC, I get 3 different solutions. It seems to me that they
> differ in the mean value, but GAMG is impressive.
>
> PCNONE gives me the zero mean solution I expected. What about the others?
>
>
>
> Asking for residuals monitor, the ratio ||r||/||b|| shows convergence for
> PCNONE and PCILU (~10^-16), but it stalls for PCGAMG (~10^-4).
>
> I cannot see why. Am I doing anything wrong or incorrectly thinking about
> the expected behaviour?
>
>
>
> Generalizing to larger mesh the behaviour is similar.
>
>
>
> Thank you for any help.
>
>
>
> Marco Cisternino
>
>
>
>
>
>
>
>
> --
>
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
>
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
>
>
>
>
> --
>
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
>
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220321/4f55c08c/attachment-0001.html>


More information about the petsc-users mailing list