[petsc-dev] [petsc-users] Multigrid with defect correction

Matthew Knepley knepley at gmail.com
Mon Mar 6 05:38:15 CST 2017


On Sun, Mar 5, 2017 at 6:02 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:

>
> > On Mar 5, 2017, at 11:18 AM, Jed Brown <jed at jedbrown.org> wrote:
> >
> > Barry Smith <bsmith at mcs.anl.gov> writes:
> >
> >>   I've looked at the code again and I'm afraid that just "adding a
> second DM" is not trivial. The DMKSP/SNES/TS stuff is all built around a
> single DM and has stuff like ->dmoriginal in it (do we have two dmoriginal
> with all its complications?).
> >>
> >>   Perhaps the entire KSPSetComputeOperators() model was misguided and
> >>   I should have stuck with the "you fill up all the needed
> >>   information for the levels of PCMG" before you do the multigrid
> >>   setup instead of providing callbacks that can fill it them up on
> >>   the fly "as needed".
> >
> > How would this work when the PCMG is deeply nested and you want to
> > rediscretize on coarse grids?
>
>     So, for example, a PCFIELDSPLIT with a PCMG on one of the fields.
>
>     Good point, but I don't think anyone can actually do this now without
> having Jed hold our hand and write more obscure hook code. (And any design
> that requires the knowledge of a single guru is not a good design).
>
>  PCFieldSplitSetDefaults() does have the possibility of calling
> DMCreateFieldDecomposition() or DMCreateSubDM() but, for example, neither
> DMCreateSubDM_DA() nor DMCreateFieldDecomposition_DA() know anything
> about DMKSP so the subDM that would be associated with the PCMG cannot do
> rediscretize since it won't know what functions to use, in addition the
> subdomain doesn't get the "field" of the "current solution" that needs to
> be linearized around. It looks like DMCreateFieldDecomposition() and or
> DMCreateSubDM() need have hooks added for them, (there are currently
> subdomain, refine, and coarsen hooks, but none for "fields"). Even with the
> addition of the hooks there is no API for the user to provide a "linearize
> on a particular field" to SNES to  be passed down through the hooks; so
> that has to added. What about linearization on a particular field of a
> particular field for when PCFIELDSPLIT is used inside a PCFIELDSPLIT, etc,
> how are we going to support that generally?
>
>  Backing up to the case that is supported, PCMG, note that
> SNESSetUpMatrices() has the code
>   {
>     KSP ksp;
>     ierr = SNESGetKSP(snes,&ksp);CHKERRQ(ierr);
>     ierr = KSPSetComputeOperators(ksp,KSPComputeOperators_SNES,snes)
> ;CHKERRQ(ierr);
>     ierr = DMCoarsenHookAdd(snes >dm,DMCoarsenHook_SNESVecSol,
> DMRestrictHook_SNESVecSol,snes);CHKERRQ(ierr);
>   }
>
> so SNES essentially knows about PCMG already; true it doesn't loop over
> the levels directly and compute the "current solution", that is handled by
> the DMRestrictHook_SNESVecSol, but is it really so different? It is in the
> snes.c file. SNES knows about the PCMG pattern! Are we going to have to
> "teach" SNES the same kind of thing for the other more complicated
> situations like a PCFIELDSPLIT with a PCMG, with tons of specific hooks for
> the different situations?
>
> I find the use of the hooks and DMGetDMKSPWrite() stuff already confusing
> and yet we still only do a very simple case with it. How can we manage the
> complexity once we use it more generally?
>
>
> Perhaps the solution is to deprecate the KSPSetOperators, SNESSetFunction,
> SNESSetJacobian, TSSetIFunction etc and instead directly use
> DMKSPSetComputeOperators(); you need to remind me again why you need to
> have a DMKSP instead of just putting the function pointers into the DM?
> Would this vastly simplify things?
>

The DMSNES and friends are the parts that are solver specific, since a
given DM can be associated with several solvers.That is why the
resolution-dependent information can go there. You could have stuck all
that info in the solver I guess, but perhaps Jed has a good reason not to
do that (maybe to make it easier to pass around, or maybe extensible to
different DMs).

I am not against deprecation there, but we have to preserve an easy way for
people to just feed there crap in, meaning no creating a DMSHELL or other
setup.

   Matt


> Perhaps we need to revisit what DM is? Looking at the struct _p_DM is
> rather scary.
>
>
>
>
> >
> >>   We could possibly throwout all the coarsen/refine hook stuff and
> >>   the DMKSP construct.
> >
> > I don't think the coarsen or refine stuff is specific to KSP?  How would
> > you intend to do coarse levels for FAS as a nonlinear preconditioner?
> >
> >>   Essentially we'd only be requiring SNESComputeJacobian to know
> >>   about the PCMG API to provide the coarser grid operators. The
> >>   coarsen/refine hook stuff seems to be there only to hide from the
> >>   SNESComputeJacobian the PCMG API. At lot of complication for what
> >>   real benefit besides our programming egos?
> >
> > Why just PCMG, not every possible nesting of PCMG inside other PCs?
>
>


-- 
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20170306/f2728c52/attachment.html>


More information about the petsc-dev mailing list