> On 12 Feb 2016, at 15:20, Paul T. Bauman <ptbau...@gmail.com> wrote:
> 
> Hi Barry,
> 
> On Thu, Feb 11, 2016 at 2:45 PM, Barry Smith <bsm...@mcs.anl.gov> wrote:
> 
> > On Feb 11, 2016, at 1:36 PM, Boris Boutkov <boris...@buffalo.edu> wrote:
> >
> > Hello All,
> >
> > I'm currently working on hooking into the PETSc multi-grid infrastructure 
> > by creating my own DMShell and providing my own interpolation and injection 
> > operators. The issue I am currently facing is that while PCSetUp_MG is 
> > running, PETSc begins by attempting to create an interpolation (through 
> > DMCreateInterpolation) for the finest grid that I am passing it.
> >
> > What would be a good way to try and let the PCSetUp_MG procedure know the 
> > first mesh it is receiving is the finest one, so there should be no 
> > interpolation provided to it?
> 
>   Boris,
> 
>   I do not understand the question, perhaps it is a matter of language.
> Say you have two levels total: call them coarse and fine. the PCSetUp_MG will 
> try to create a single interpolation "for/to the fine grid" FROM the coarse 
> grid. This is necessary to do the geometric multigrid. You would then through 
> your DMSHELL provide the function that creates the interpolation matrix.  The 
> PCSetUp_MG will not attempt to create an interpolation "for the coarse mesh" 
> since there is no mesh coarser than the coarse mesh. So
> PCSetUp_MG() should be trying to create only the needed interpolations, so 
> you should not need to tell them not to try to create certain ones.
> 
> The information I think we're missing is, more or less, the order of 
> operations during the MG setup and how PETSc is expecting us to behave with 
> our DMShell implementation. I'll stick with your coarse and fine grid. On our 
> side, we can construct the coarse and the fine grids, supplying the DMs and 
> accompanying PetscSections, at simulation setup time since we know what our 
> grid hierarchy is (we're focusing on hierarchical meshes to start with). 
> Then, for DMRefine and DMCoarsen, we can just return the correct DM that 
> we've built. (Maybe this the wrong way to do it?) We also have 
> implementations of DMCreateInterpolation and DMCreateInjection for moving 
> between each of the levels.
> 
> Our main confusion is, once we've set up of all that, which of the DMs we've 
> constructed do we go ahead and give to SNES? The fine or the coarse? Is it 
> expected that we should be checking the DM supplied to, e.g., 
> DMCreateInterpolation for which of the operators PETSc is wanting? We were 
> guessing that we should supply the fine DM to SNES (and then not expecting 
> DMCreateInterpolation to be called yet).
> 
> Clearly, there's some setup steps we're missing or we're just going about 
> this all the wrong way. Is there an existing example of setting up a problem 
> using a DMShell? I poked a little but couldn't find one.

AIUI, PETSc needs to know how many refinements generated the fine DM that is 
attached to the operator inside the PC.  That means, I think, you need to call 
DMRefine on the coarse DM (and so on all the way down until you get to the fine 
DM).

Cheers,

Lawrence

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to