I am working on fixing this in Newton, getting the DM. I've tested and it
seems to work. Just need to craft a Proustian comment message for Herr
Commandant.
PetscErrorCode SNESSetWorkVecs(SNES snes,PetscInt nw)
{
PetscErrorCode ierr;
DM dm;
PetscFunctionBegin;
if (snes->work) {ierr =
VecDestroyVecs(snes->nwork,&snes->work);CHKERRQ(ierr);}
snes->nwork = nw;
ierr = SNESGetDM(snes,&dm);CHKERRQ(ierr);
if (dm){
Vec vec;
ierr = DMCreateGlobalVector(dm,&vec);CHKERRQ(ierr);
ierr = VecDuplicateVecs(vec,snes->nwork,&snes->work);CHKERRQ(ierr);
ierr = VecDestroy(&vec);CHKERRQ(ierr);
}
else if (snes->vec_sol) {
ierr =
VecDuplicateVecs(snes->vec_sol,snes->nwork,&snes->work);CHKERRQ(ierr);
}
else {
SETERRQ(PetscObjectComm((PetscObject)snes),PETSC_ERR_SUP,"Can not create
work vectors.");
}
ierr = PetscLogObjectParents(snes,nw,snes->work);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
On Oct 11, 2013, at 2:11 PM, Matthew Knepley <[email protected]> wrote:
> On Thu, Oct 10, 2013 at 2:41 PM, Barry Smith <[email protected]> wrote:
>
> On Oct 10, 2013, at 2:37 PM, "Mark F. Adams" <[email protected]> wrote:
>
> >>
> >> That's what I suggested below. I can test this now if you like.
> >>
> >> Excellent. I just pushed to next.
> >
> > It is almost done but SNESSetWorkVecs tries to use vec_sol to create work
> > vectors.
> >
>
> If SNES has a DM then it should be trying to get its work vectors from
> that.
>
> Now a SNES always has a DM. Changed.
>
> Matt
>
>
> Barry
>
>
>
>
> --
> 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