[petsc-users] Re-use the matrix in petsc

Matthew Knepley knepley at gmail.com
Fri Nov 24 14:56:05 CST 2017

On Fri, Nov 24, 2017 at 3:47 PM, Edoardo alinovi <edoardo.alinovi at gmail.com>

> Dear petsc users,
> I am new to petsc, but I am really enjoying it.
> I am developing a CFD code in fortran and I have a (newby) question for
> you.
> I have a subroutine that assembles the matrices arising from the finite
> volume method. They are sparse and the coefficients change every time step,
> but their sparsity remains unchanged (i.e. non-zeros entries are always in
> the same position).
> In the subroutine, which is called every time step, I am basically
> following the manual and I do something like:
> -  call MatCreate(PETSC_COMM_WORLD,A,ierr)
> -   call MatSetSizes(A,lm,lm,M,M,ierr)
> -   call MatSetType(A, myType,ierr)
> -    call MatMPIAIJSetPreallocation(A,d_nz,PETSC_NULL_INTEGER, o_nz,
>            call MatSetUp(A,ierr)
> -   call MatSetValues
> -   call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)
> -   call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)
> -   Solve the system
> -  call MatDestroy
> Here is my question:
> As you can note, every time step, I allocate the matrix, fill it, use it
> and the destroy it. Is there a way to avoid the matrix preallocation every
> time? I just would like to change matrix the entries and avoid the
> preallocation.

Make the first 5 calls outside your timestep loop. At each step, (after the
first timestep call MatZeroEntries()), MatSetValues() for all your values,
and then matAssemblyBegin/End().
After all your timesteps, call MatDestroy(). If you use a factorization
preconditioner, it will detect that you only change values, not structure.



> Thank you for the help that you can give me,
> Edoardo

What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/~mk51/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171124/9fd273a0/attachment.html>

More information about the petsc-users mailing list