[petsc-users] Possibility of using out of date Jacobians with TS

Steve stevenbenbow at quintessa.org
Fri Aug 9 09:25:47 CDT 2019


Hi,

I'm experimenting with the use of PETSc to replace a DAE solver in an 
existing code that I use to solve stiff nonlinear problems.  I expect to 
use TSBDF in the final instance, and so am currently playing with it but 
applied to a simpler linear problem - just to get some experience with 
the SNES/KSP/PC controls before diving in to the hard problem.

Below is some output from TSAdapt for the simple linear problem, using 
TSBDF and PCLU, so that the linear algebra solve in the newton loop is 
direct:

     TSAdapt basic bdf 0:2 step   0 accepted t=0          + 1.000e-03 
dt=2.000e-03  wlte=2.51e-07  wltea=   -1 wlter=   -1
         TSResidual...
         TSJacobian... calculate
         TSResidual...
     TSAdapt basic bdf 0:2 step   1 accepted t=0.001      + 2.000e-03 
dt=4.000e-03  wlte=2.83e-07  wltea=   -1 wlter=   -1
         TSResidual...
         TSJacobian... calculate
         TSResidual...
     TSAdapt basic bdf 0:2 step   2 accepted t=0.003      + 4.000e-03 
dt=8.000e-03  wlte=1.22e-07  wltea=   -1 wlter=   -1
         TSResidual...
         TSJacobian... calculate
         TSResidual...

I have added the "TSResidual..." and "TSJacobian..." echoes so that I 
can see when PETSc is requesting residuals and Jacobians to be 
computed.  (This is the Jacobian routine specified via TSSetIJacobian.)

Regarding the above output, it appears that TS / SNES always requests a 
new (I)Jacobian at each new timestep (after the first residual is 
calculated).  I can see mathematically why this would be the default 
choice, but had hoped that it might be possible for out-of-date 
Jacobians to be used until they become inefficient. My reason for 
wanting this is that the Jacobian calculations for the intended 
application are particularly expensive, but for small enough timesteps 
out-of-date Jacobians may be good enough, for a few steps.

Is there any way of specifying that out-of-date (I)Jacobians can be 
tolerated (at the expense of increased Newton iterations, or smaller 
timesteps)?  Alternatively would it make sense to include callbacks to 
TS / SNES from the Jacobian evaluation function to determine whether 
sufficiently few iterations have been used that it might be safe to 
return the previously calculated Jacobian (if I store a copy)?  If so, 
is there any advice on how I should do this?

NB. I see that there is an option for TSRHSJacobianSetReuse(), but this 
only applies to the RHS component of the DAE (the G(t,u) part, using the 
terminology from the manual), but I am not using this as ultimately I 
expect to be solving strongly nonlinear problems with no "slow" G(t,u) part.

Any advice would be greatly appreciated.




More information about the petsc-users mailing list