[petsc-dev] Problem with DMKSP/DMSNES and GMG

Matthew Knepley knepley at gmail.com
Fri Oct 26 10:28:21 CDT 2018


On Fri, Oct 26, 2018 at 11:24 AM Jed Brown <jed at jedbrown.org> wrote:

> Matthew Knepley <knepley at gmail.com> writes:
>
> > On Fri, Oct 26, 2018 at 11:06 AM Jed Brown <jed at jedbrown.org> wrote:
> >
> >> Matthew Knepley <knepley at gmail.com> writes:
> >>
> >> > I am having a problem, and every solution I can think of would seem
> to do
> >> > violence to encapsulation or to DMKSP/DMSNES.
> >> >
> >> > I want to have GMG automatically work on the velocity part of Stokes.
> So
> >> I
> >> > give
> >> >
> >> >   -fieldsplit_velocity_pc_type mg
> >> >
> >> > in SNES ex62. This complains that the KSP has a DM but
> >> > KSPSetComputeOperator() has not been called. It is fine on the global
> >> > system because SNES called that in SNESSetupMatrices(). Thus in
> >> FieldSplit,
> >> > I inserted
> >> >
> >> >           {
> >> >             PetscErrorCode (*func)(KSP,Mat,Mat,void*);
> >> >             void            *ctx;
> >> >
> >> >             ierr = DMKSPGetComputeOperators(pc->dm, &func,
> >> > &ctx);CHKERRQ(ierr);
> >> >             ierr = DMKSPSetComputeOperators(dms[i],  func,
> >> > ctx);CHKERRQ(ierr);
> >> >           }
> >>
> >> Wait, pc->dm is the coupled system while each dms[i] is a component
> >> (like velocity).  It would be awkward to ask the user to write a single
> >> function that would inspect the DM to figure out what sort of problem it
> >> was discretizing (velocity-only, pressure-only,
> >> velocity-pressure-coupled, etc.).  Do you currently have a
> >> ComputeOperators for each sub-problem?
> >>
> >
> > CreateSubDM() returns a DM whose DS only involves the subset of fields.
>
> DS?  That isn't really a DM-level concept; I see you use it in a couple
> utility functions in DMDA, but it isn't part of the solver-related
> functionality.  In any case, the code you wrote above looks to be moving
> the outer ComputeOperators onto a sub-DM, which can't possibly be a
> desirable solution.  Why can't DMCreateSubDM ensure that each sub DM is
> endowed with whatever discretization functionality is known?
>

As I said in my reply, it already does this. HOWEVER, it cannot move the
construction functions from the old DMSNES to the subDMSNES, because it
does not know about SNES.


> > Thus, only
> > the v-v block is present in the subDM, and when the SNES assembly
> functions
> > is called,
> > it forms that block. I just need that function to be called.
>
> Is it really the same function as is used by the outer DM?


Yes.

You are not addressing the question.

   Matt


>   That is not
> a general-purpose solution because users can set
> DMKSPSetComputeOperators/KSPSetComputeOperator to directly call their
> own functions.
>


-- 
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-dev/attachments/20181026/3068a2ed/attachment.html>


More information about the petsc-dev mailing list