On Jan 25, 2019, at 4:51 PM, Sajid Ali via petsc-users 
<petsc-users@mcs.anl.gov<mailto:petsc-users@mcs.anl.gov>> wrote:

Hi,

If I have a linear time dependent equation I'm trying to solve using TS, I can 
use :
TSSetProblemType(ts,TS_LINEAR);
TSSetRHSFunction(ts,NULL,TSComputeRHSFunctionLinear,NULL);
TSSetRHSJacobian(ts,A,A,YourComputeRHSJacobian, &appctx);

If the matrix that's being evaluated by YourComputeRHSJacobian is such that the 
non-zero structure stays the same and only the diagonal changes with time, is 
there a way to optimize the function so that it doesn't create the whole matrix 
from scratch each time ?

The matrix A should be created only once before TSSetRHSJacobian() is called. 
YourComputeRHSJacobian() does not need to create the whole matrix each time; it 
updates the values in A and assembles it.

Naively I can make a dummy matrix and store the copy from t=0 and change the 
diagonal at each iteration but that unnecessarily doubles the memory 
consumption, is there a better way?

A is the working matrix storing the Jacobian. The matrix passed to 
YourComputeRHSJacobian() is actually A. There is no need to save an extra copy.

Hong (Mr.)


Thank You,
Sajid Ali
Applied Physics
Northwestern University

Reply via email to