<div dir="ltr">I can try to excerpt a test case from PETScOpt an add it to PETSc. <div>On the other hand, I really don't know what are all the possible use cases we need to cover, and if we really want to maintain the current caching infrastructure.</div><div>I would be inclined to throw it away (I should still take a look at how many times I am actually reusing the cached matrices) </div><div><br></div><div>It's unbelievable how many things are not under coverage. On average I think I personally fix 10 bugs per week in PETSc.</div><div>For sure, the 5-point stencil Laplacian is bugfree ;-)</div><div><br></div><div>Using petsc4py could be an easy way to extend coverage very quickly.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno gio 25 apr 2019 alle ore 18:06 Jed Brown <<a href="mailto:jed@jedbrown.org">jed@jedbrown.org</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Can you make a PR with a test to cover this feature?<br>
<br>
We desperately need coverage as a CI integration.<br>
<br>
Stefano Zampini <<a href="mailto:stefano.zampini@gmail.com" target="_blank">stefano.zampini@gmail.com</a>> writes:<br>
<br>
> Jed,<br>
><br>
> It appears that the testsuite does not currently cover a nasty code we have<br>
> to cache RHS Jacobian computation when using the implicit interface. If I<br>
> run the testsuite with the below modification, no tests fail. (my<br>
> continuous adjoint codes instead show some reusage)<br>
><br>
> This caching mechanism is causing headaches to me and Hong when supporting<br>
> adjoints.<br>
> It would be nice if we can come up with a proper test (try to cover as much<br>
> user cases as possible) and provide a definitive fix for this (even<br>
> erroring if we don't support something, instead of silently doing the wrong<br>
> thing)<br>
><br>
> I'm pretty sure that when Jacobian computations are performed by TS itself,<br>
> using the proper matrices A,B obtained from TSGetIJacobian(ts,&A,B,...) the<br>
> caching is correct ( I have spent hours on this)<br>
><br>
> When different matrices are used, TSComputeIJacobian() without an IJacobian<br>
> callback  is buggy: note that  TSComputeIJacobian() is a public method.<br>
><br>
><br>
> diff --git a/src/ts/interface/ts.c b/src/ts/interface/ts.c<br>
> index 4b003c8f6e..02211b62ea 100644<br>
> --- a/src/ts/interface/ts.c<br>
> +++ b/src/ts/interface/ts.c<br>
> @@ -575,6 +575,7 @@ PetscErrorCode  TSComputeRHSJacobian(TS ts,PetscReal<br>
> t,Vec U,Mat A,Mat B)<br>
>    if (ts->rhsjacobian.time == t && (ts->problem_type == TS_LINEAR ||<br>
> (ts->rhsjacobian.Xid == Uid && ts->rhsjacobian.Xstate == Ustate)) &&<br>
> (rhsfunction != TSComputeRHSFunctionLinear)) {<br>
>      /* restore back RHS Jacobian matrices if they have been shifted/scaled<br>
> */<br>
>      if (A == ts->Arhs) {<br>
> +      PetscPrintf(PetscObjectComm((PetscObject)ts),"REUSE %g<br>
> %g\n",ts->rhsjacobian.shift,ts->rhsjacobian.scale);<br>
>        if (ts->rhsjacobian.shift != 0) {<br>
>          ierr = MatShift(A,-ts->rhsjacobian.shift);CHKERRQ(ierr);<br>
>        }<br>
><br>
> -- <br>
> Stefano<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Stefano</div>