[petsc-users] Matrix preallocation

Samuel Estes samuelestes91 at gmail.com
Fri Feb 4 22:47:36 CST 2022


Hi,

I have a very basic question about matrix preallocation. I am trying to use
the MatCreate(), MatSetFromOptions(), MatXXXXSetPreallocation() paradigm. I
thought that I should use the MatXAIJSetPreallocation() routine since the
code may be run with a SeqAIJ or MPIAIJ matrix but I do not understand all
of the inputs required for the MatXAIJSetPreallocation routine. In
particular, the dnnzu and onnzu variables don't quite make sense to me. Can
these be NULL? I was basically just hoping for a routine that would
preallocate for either a sequential or parallel matrix depending on what
was given at runtime. This routine seems to be what I want but I don't
understand it very well and the documentation hasn't helped me to figure it
out.

A related followup question: Is it good practice to use this function or
should I just use the other routines like MatSeqAIJSetPreallocation() and
MatMPIAIJSetPreallocation()?

And finally my last question: if I were to use the
MatSeqAIJSetPreallocation()/MatMPIAIJSetPreallocation() routines for
preallocating memory, is it common to just call MatGetType() then call the
appropriate routine depending on whether or not the matrix is parallel or
not? I ask because when I have tested these routines out, it seems
that MatSeqAIJSetPreallocation() works even for parallel matrices which is
a bit confusing. I'm assuming that it just sets the diagonal part of the
matrix?

I hope that my questions were clear. Let me know if they need clarification
and thanks in advance for the help!

Sam
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220204/cacd9255/attachment.html>


More information about the petsc-users mailing list