<div dir="ltr">Hi,<div><br></div><div>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.</div><div><br></div><div>A related followup question: Is it good practice to use this function or should I just use the other routines like MatSeqAIJSetPreallocation() and MatMPIAIJSetPreallocation()? </div><div><br></div><div>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?</div><div><br></div><div>I hope that my questions were clear. Let me know if they need clarification and thanks in advance for the help!</div><div><br></div><div>Sam</div></div>