[petsc-dev] PCBDDCSetNullSpace

Barry Smith bsmith at mcs.anl.gov
Wed Sep 19 10:08:15 CDT 2012


On Sep 19, 2012, at 8:42 AM, Stefano Zampini <stefano.zampini at gmail.com> wrote:

> 
> 
> 
> > Uh, the PC shouldn't be putting any contribution in the null space of the operator.
> >
> 
> The partially subassembled problem which defines the BDDC preconditioner inherits the kernel from the problem. This null space should propagate completely to the coarse problem and not on the dual space. To take care of, you only need to use a pseudo-inverse for the coarse solution, thus the choice of removing the coarse null space before and after the coarse solution step. At present, the outcome of PCApply_BDDC could have a nonzero component on the null space. In my experiences, this does not have an impact on the Krylov convergence, except for the fact that you need to use KSP_NORM_NATURAL for KSP tests (see src/ksp/ksp/examples/tutorials/ex59.c).

   This KSP_NORM_NATURAL  is a symptom of the problem,  I think you really do want to also have the usual removal of the null space after applying the preconditioner (for left preconditioning) like all other pre conditioners.

   Barry

>  
> 
> >
> > You have to do basically the same thing on coarse levels of multigrid. I guess what you're saying is that a side-effect of this treatment in BDDC is that the preconditioner already has zero component in the direction of the null space so the explicit removal is not necessary? If we're just trying to avoid the explicit projection in KSP_PCApply*, I would prefer to add an attribute to PC saying that it "handles the null space internally".
> >
> > (I hate having new implementation-specific interfaces that basically do the same thing from the user's perspective, thus I want to find a way for MatSetNullSpace() to do the right thing.)
> 
>    We could modify KSP_RemoveNullSpace() to inquire of the PC inside the KSP if the null space should be applied and BDDC could simply say no.
> 
> 
> I agree with your solution. I was already inclined to do that, but I decided to don't change by myself the KSP interface; thus I temporary pass the null space info using PCBDDC APIs.
> 
>  -- 
> Stefano




More information about the petsc-dev mailing list