[petsc-users] Allocating the diagonal for MatMPIAIJSetPreallocation

Matthew Knepley knepley at gmail.com
Fri Apr 1 11:33:50 CDT 2022


On Fri, Apr 1, 2022 at 12:27 PM Samuel Estes <samuelestes91 at gmail.com>
wrote:

> Hi,
>
> I have a problem in which I know (roughly) the number of non-zero entries
> for each row of a matrix but I don't have a convenient way of determining
> whether they belong to the diagonal or off-diagonal part of the parallel
> matrix. Is there some way I can just allocate the total number of non-zeros
> in a row regardless of which part they belong to? I'm assuming that this is
> not possible but I just wanted to check. It seems like it should be
> possible in principle since the matrix is only split by the rows but the
> columns of a row are all on the same processor (at least as I understand
> it). Thanks!
>

In serial, the matrix is stored by rows. In parallel, it is split into a
diagonal and off-diagonal block, so that we can overlap communication and
computation in the matvec.

However, we have a convenience structure for figuring this out, called
MatPreallocator,
https://petsc.org/main/docs/manualpages/Mat/MATPREALLOCATOR.html
In my code, I wrote a loop around the code that filled up my matrix, which
executed twice. On the first pass, I fed in the MatPreallocator matrix.
When this finished
you can call
https://petsc.org/main/docs/manualpages/Mat/MatPreallocatorPreallocate.html#MatPreallocatorPreallocate
on your system amtrix, then on the second
pass use the system matrix. This was only a few extra lines of code for me.
If you want to optimize further, you can have a flag that only computes the
values on the
second pass.

  Thanks,

      Matt

Sam
>
-- 
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.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220401/fbc868a0/attachment.html>


More information about the petsc-users mailing list