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