[petsc-dev] BDDC code
Stefano Zampini
stefano.zampini at gmail.com
Tue Jan 31 05:12:06 CST 2012
2012/1/31 Jed Brown <jedbrown at mcs.anl.gov>
> On Thu, Jan 26, 2012 at 04:04, Stefano Zampini <stefano.zampini at gmail.com>wrote:
>
>> I'm partially refactoring BDDC code I contributed to petsc-dev, trying to
>> limit the extent of hand-written code and to exploit already existing PETSc
>> code. I want to know if there are DM objects in PETSc suitable to store
>> informations related to the local to global map of MATIS objects which I
>> can use to manage communications between different levels (through
>> DMCoarsen, DMGetInterpolation and DMGetMatrix). DMMesh can do the job?
>>
>
> Sorry for the slow reply. The question, I think, is how to produce a
> Galerkin coarse grid operator of type MATIS. I think we can write
> MatPtAP_IS without too much trouble, although I don't know how it would
> perform.
>
> I don't see how there is enough information in a MATIS to define
> coarsening and interpolation algebraically.
>
But maybe you are thinking of making PCBDDC algebraically construct a grid
> hierarchy? I would not be inclined to put that into DM, instead, I would
> call PCMG functions directly.
>
About DMMesh, here is my idea: you can attach the adjacency matrix of
subdomain connectivity through faces to a DMMesh object. Then, DM should be
able to manage one level coarsening using MatPartitioning interface. All
stuffs needed to manage communications between levels will then be hidden
in the DM interface.
I thought about wrapping PCBDDC into PCMG: it can be done, but you will
need to apply PCMG inside a PCIS preconditioner. The problem is that BDDC
per se (see PCBDDCApplyInterfacePreconditioner) is a 2 level additive
method (and this can be wrapped easily into PCMG) applied on a
statically-condensed corrected residual (see PCApply_BDDC) (same correction
is applied also for PCNN in PETSc). In order to wrap properly PCBDDC into
PCMG, I think you will first need to call PCApply_IS (with the same code of
the actual PCApply_BDDC, very similar to PCApply_NN), and inside this call
PCApplyInterfacePreconditioner_BDDC (or PCApplyInterfacePreconditioner_NN).
This will also imply that you can select BDDC (and NN) only by calls of the
type
KSPGetPC(ksp,&pc);
PCSetType(pc,PCIS);
PCISSetType(pc,PCBDDC); (or PCNN)
Am I wrong?
--
Stefano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120131/6180349d/attachment.html>
More information about the petsc-dev
mailing list