[petsc-users] function set by TSSetRHSJacobian() not being called

Scott Dossa doss0032 at umn.edu
Tue Aug 9 15:44:48 CDT 2016


I agree that he meant implicit method. The code works as expected now. I
must have erronously used Forward euler instead of backwards euler.

Thanks again,
Scott Dossa

On Tue, Aug 9, 2016 at 2:34 PM, Hong Zhang <hongzhang at anl.gov> wrote:

> I guess Barry meant “implicit method”.
>
> To use backward Euler, change TSEULER to TSBEULER in the function call of
> TSSetType().
>
> Hong
>
> > On Aug 9, 2016, at 2:13 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> >
> >
> >   The Euler method is an explicit method that does not require the
> Jacobian. Hence the Jacobian you provide is never used.
> >
> >    If you use any implement method, for example backward Euler beuler
> then you will see the Jacobian being used.
> >
> >   Barry
> >
> >> On Aug 9, 2016, at 2:08 PM, Scott Dossa <doss0032 at umn.edu> wrote:
> >>
> >> Hi all,
> >>
> >> I adapted ex13.c from .../ts/examples/tutorials/ex13.c to solve a 1D
> TD PDE (swift-hohenberg).
> >> Long story short: the function which sets the Jacobian is never being
> called despite being assigned by TSSetRHSJacobian().
> >>
> >> I create the TS environment with the following commands (omitting some
> code before and after -- Full code attached):
> >>
> >> ------------------------------------------------------------
> ------------------------------------------------------------
> ---------------------------------------------
> >>  ierr = DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, 15, 1, 1,
> NULL, &da); CHKERRQ(ierr);
> >>
> >>  /*==================================================================
> >>    Let DMDA create vector
> >>    ==================================================================*/
> >>
> >>  ierr = DMCreateGlobalVector(da, &x);CHKERRQ(ierr);
> >>
> >>  /*==================================================================
> >>    Create timestepper context which will use Euler Method
> >>    ==================================================================*/
> >>
> >>  ierr = TSCreate(PETSC_COMM_WORLD,&ts);CHKERRQ(ierr);
> >>  ierr = TSSetDM(ts, da);CHKERRQ(ierr);
> >>  ierr = TSSetType(ts, TSEULER);CHKERRQ(ierr);
> >>
> >>  ierr = TSSetRHSFunction(ts, x, RHSFunction, NULL);CHKERRQ(ierr);
> >>
> >>  /*=================================================================
> >>    Create Jacobian for Euler Method
> >>    =================================================================*/
> >>  ierr = DMSetMatType(da, MATAIJ);CHKERRQ(ierr);
> >>  ierr = DMCreateMatrix(da,&J);CHKERRQ(ierr);
> >>  ierr = TSSetRHSJacobian(ts,J,J,RHSJacobian,NULL); CHKERRQ(ierr)
> >> ------------------------------------------------------------
> ------------------------------------------------------------
> ---------------------------------------------
> >>
> >> I define the function RHSJacobian later, PetscPrintf(PETSC_COMM_WORLD,
> "Jacobian function called") is used to see if the function is ever called.
> >>
> >> Neither is the message ever called, nor is the Jacobian matrix ever
> non-zero. The J matrix is checked with MatView( ). No error messages are
> produced either at compiling nor runtime.
> >>
> >> Has anyone else run into such an issue or have any advice of how best
> to probe the problem?
> >> Thanks so much!
> >> -Scott Dossa
> >>
> >>
> >> <swift.cpp>
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160809/847782c2/attachment-0001.html>


More information about the petsc-users mailing list