[petsc-dev] TSComputeRHSJacobian
Stefano Zampini
stefano.zampini at gmail.com
Fri Sep 8 11:51:23 CDT 2017
I encountered the problem while working on the adjoint code. Here is the
fix I have in my branch
https://bitbucket.org/petsc/petsc/branch/stefano_zampini/feature-continuousadjoint#Lsrc/ts/interface/ts.cT613
However, I'm not sure if this is a problem just with my code. This is why
I'm asking on the list.
2017-09-08 0:02 GMT+03:00 Barry Smith <bsmith at mcs.anl.gov>:
>
> Example that demonstrates the current code is problematic in some cases?
>
> > On Aug 28, 2017, at 11:59 AM, Stefano Zampini <stefano.zampini at gmail.com>
> wrote:
> >
> >
> > I was wondering if the following code in TSComputeRHSJacobian is correct
> when the user pass the reuse flag via TSRHSJacobianReuse
> >
> > if (ts->rhsjacobian.time == t && (ts->problem_type == TS_LINEAR ||
> (ts->rhsjacobian.Xid == Uid && ts->rhsjacobian.Xstate == Ustate)) &&
> (rhsfunction != TSComputeRHSFunctionLinear)) {
> > PetscFunctionReturn(0);
> > }
> >
> > Should the above code be replaced by the following?
> >
> > if (ts->rhsjacobian.time == t && (ts->problem_type == TS_LINEAR ||
> (ts->rhsjacobian.Xid == Uid && ts->rhsjacobian.Xstate == Ustate)) &&
> (rhsfunction != TSComputeRHSFunctionLinear)) {
> > if (ts->rhsjacobian.reuse) {
> > ierr = MatShift(A,-ts->rhsjacobian.shift);CHKERRQ(ierr);
> > ierr = MatScale(A,1./ts->rhsjacobian.scale);CHKERRQ(ierr);
> > if (B && A != B) {
> > ierr = MatShift(B,-ts->rhsjacobian.shift);CHKERRQ(ierr);
> > ierr = MatScale(B,1./ts->rhsjacobian.scale);CHKERRQ(ierr);
> > }
> > ts->rhsjacobian.shift = 0;
> > ts->rhsjacobian.scale = 1.;
> > }
> > PetscFunctionReturn(0);
> > }
> >
> >
> > --
> > Stefano
>
>
--
Stefano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20170908/52afdfa5/attachment.html>
More information about the petsc-dev
mailing list