[petsc-dev] TSSolve web page JED and EMIL READ THIS!
Matthew Knepley
knepley at gmail.com
Sat Feb 7 11:05:02 CST 2015
On Sat, Feb 7, 2015 at 11:00 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> Hmm, we should definitely debug this because SNESComputeFunction()
> should be usable as a stand-alone function. In a quick look at the code I
> cannot see why a SNESSetSolution() call should be needed, nor would I want
> it to be needed in order to use SNESComputeFunction(). How can I reproduce
> your problem?
>
Clone git at bitbucket.org:knepley/magma-dynamics-problems.git
Build it, make magma.dbg
Run some tests, make run_stokes
Let me know if you have problems.
I think I can get it to fail on a small PETSc example, but I will not be
able to confirm before Tuesday. Margarete is in London and I have
Maria until then.
Thanks,
Matt
> PetscErrorCode SNESSetSolution(SNES snes, Vec u)
> {
> DM dm;
> PetscErrorCode ierr;
>
> PetscFunctionBegin;
> PetscValidHeaderSpecific(snes, SNES_CLASSID, 1);
> PetscValidHeaderSpecific(u, VEC_CLASSID, 2);
> ierr = PetscObjectReference((PetscObject) u);CHKERRQ(ierr);
> ierr = VecDestroy(&snes->vec_sol);CHKERRQ(ierr);
>
> snes->vec_sol = u;
>
> ierr = SNESGetDM(snes, &dm);CHKERRQ(ierr);
> ierr = DMShellSetGlobalVector(dm, u);CHKERRQ(ierr);
> PetscFunctionReturn(0);
> }
>
> PetscErrorCode SNESComputeFunction(SNES snes,Vec x,Vec y)
> {
> PetscErrorCode ierr;
> DM dm;
> DMSNES sdm;
>
> PetscFunctionBegin;
> PetscValidHeaderSpecific(snes,SNES_CLASSID,1);
> PetscValidHeaderSpecific(x,VEC_CLASSID,2);
> PetscValidHeaderSpecific(y,VEC_CLASSID,3);
> PetscCheckSameComm(snes,1,x,2);
> PetscCheckSameComm(snes,1,y,3);
> ierr = VecValidValues(x,2,PETSC_TRUE);CHKERRQ(ierr);
>
> ierr = SNESGetDM(snes,&dm);CHKERRQ(ierr);
> ierr = DMGetDMSNES(dm,&sdm);CHKERRQ(ierr);
> if (sdm->ops->computefunction) {
> ierr = PetscLogEventBegin(SNES_FunctionEval,snes,x,y,0);CHKERRQ(ierr);
> ierr = VecLockPush(x);CHKERRQ(ierr);
> PetscStackPush("SNES user function");
> ierr =
> (*sdm->ops->computefunction)(snes,x,y,sdm->functionctx);CHKERRQ(ierr);
> PetscStackPop;
> ierr = VecLockPop(x);CHKERRQ(ierr);
> ierr = PetscLogEventEnd(SNES_FunctionEval,snes,x,y,0);CHKERRQ(ierr);
> } else if (snes->vec_rhs) {
> ierr = MatMult(snes->jacobian, x, y);CHKERRQ(ierr);
> } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE, "Must call
> SNESSetFunction() or SNESSetDM() before SNESComputeFunction(), likely
> called from SNESSolve().");
> if (snes->vec_rhs) {
> ierr = VecAXPY(y,-1.0,snes->vec_rhs);CHKERRQ(ierr);
> }
> snes->nfuncs++;
> ierr = VecValidValues(y,3,PETSC_FALSE);CHKERRQ(ierr);
> PetscFunctionReturn(0);
> }
>
> > On Feb 7, 2015, at 12:53 AM, Matthew Knepley <knepley at gmail.com> wrote:
> >
> > On Fri, Feb 6, 2015 at 9:35 PM, Jed Brown <jed at jedbrown.org> wrote:
> > Barry Smith <bsmith at mcs.anl.gov> writes:
> > > I am not proposing removing the solution from TSSolve() argument
> > > list, far from it. I am proposing removing the TSSetSolution(),
> > > keeping the solution in TSSolve() as the standard approach, but
> > > also allowing a callback for when the user wants the DM passed to
> > > TS to be in charge of creating all the vectors.
> >
> > Oh, that's fine if/when you have a use case for it.
> >
> > I needed SNESSetSolution() so I put it in. Here is the use case.
> >
> > I have a TS (magma dynamics), for which I would like to test the solver.
> I
> > have an explicit solution when I turn some terms off, and I test all
> these.
> > Sometimes I turn off time, so I TSGetSNES() and SNESSetSolution(), and
> > then call SNESComputeFunction(snes, exactSol, res). If I do not
> SetSolution()
> > first, things are not setup correctly and it bombs.
> >
> > Matt
> >
> > --
> > 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
>
>
--
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/20150207/c7a9a99f/attachment.html>
More information about the petsc-dev
mailing list