[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