[petsc-dev] TS RHS Jacobian caching (shift/scaling) in PETSc
Jed Brown
jed at jedbrown.org
Thu Apr 25 10:06:02 CDT 2019
Can you make a PR with a test to cover this feature?
We desperately need coverage as a CI integration.
Stefano Zampini <stefano.zampini at gmail.com> writes:
> Jed,
>
> It appears that the testsuite does not currently cover a nasty code we have
> to cache RHS Jacobian computation when using the implicit interface. If I
> run the testsuite with the below modification, no tests fail. (my
> continuous adjoint codes instead show some reusage)
>
> This caching mechanism is causing headaches to me and Hong when supporting
> adjoints.
> It would be nice if we can come up with a proper test (try to cover as much
> user cases as possible) and provide a definitive fix for this (even
> erroring if we don't support something, instead of silently doing the wrong
> thing)
>
> I'm pretty sure that when Jacobian computations are performed by TS itself,
> using the proper matrices A,B obtained from TSGetIJacobian(ts,&A,B,...) the
> caching is correct ( I have spent hours on this)
>
> When different matrices are used, TSComputeIJacobian() without an IJacobian
> callback is buggy: note that TSComputeIJacobian() is a public method.
>
>
> diff --git a/src/ts/interface/ts.c b/src/ts/interface/ts.c
> index 4b003c8f6e..02211b62ea 100644
> --- a/src/ts/interface/ts.c
> +++ b/src/ts/interface/ts.c
> @@ -575,6 +575,7 @@ PetscErrorCode TSComputeRHSJacobian(TS ts,PetscReal
> t,Vec U,Mat A,Mat B)
> if (ts->rhsjacobian.time == t && (ts->problem_type == TS_LINEAR ||
> (ts->rhsjacobian.Xid == Uid && ts->rhsjacobian.Xstate == Ustate)) &&
> (rhsfunction != TSComputeRHSFunctionLinear)) {
> /* restore back RHS Jacobian matrices if they have been shifted/scaled
> */
> if (A == ts->Arhs) {
> + PetscPrintf(PetscObjectComm((PetscObject)ts),"REUSE %g
> %g\n",ts->rhsjacobian.shift,ts->rhsjacobian.scale);
> if (ts->rhsjacobian.shift != 0) {
> ierr = MatShift(A,-ts->rhsjacobian.shift);CHKERRQ(ierr);
> }
>
> --
> Stefano
More information about the petsc-dev
mailing list