[petsc-users] Preallocating a matrix with the d_nnz and o_nnz arrays

Patrick Alken patrick.alken at geomag.info
Mon Aug 22 11:12:34 CDT 2022


Thank you, I have read that document. I have changed my criteria to:


if (j >= first && (j - first) < m) {

   /*diagonal*/

else

   /*off-diagonal*/


It seems to be working better. I don't know how to get the c1 and c2 
columns referred to by the documentation.


Patrick



On 8/22/22 10:03, Zhang, Hong wrote:
> See 
> https://petsc.org/release/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html#MatMPIAIJSetPreallocation
> MatMPIAIJSetPreallocation - PETSc 
> <https://petsc.org/release/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html#MatMPIAIJSetPreallocation>
> MatMPIAIJSetPreallocation Preallocates memory for a sparse parallel 
> matrix in AIJ format (the default parallel PETSc format). For good 
> matrix assembly performance the user should preallocate the matrix 
> storage by setting the parameters d_nz (or d_nnz) and o_nz (or o_nnz).
> petsc.org
>
> if you use mpiaij matrix.
> Hong
> ------------------------------------------------------------------------
> *From:* petsc-users <petsc-users-bounces at mcs.anl.gov> on behalf of 
> Patrick Alken <patrick.alken at geomag.info>
> *Sent:* Monday, August 22, 2022 10:56 AM
> *To:* petsc-users <petsc-users at mcs.anl.gov>
> *Subject:* [petsc-users] Preallocating a matrix with the d_nnz and 
> o_nnz arrays
> I am looping through all the non-zero elements of my matrix to count the
> diagonal and off-diagonal terms in order to pre-allocate the matrix.
> However, what is the criteria for knowing if a given element is in the
> diagonal portion or off-diagonal portion? It seems that it will depend
> on row, column, and also processor. I was doing something like this:
>
> MatGetLocalSize(A, &m, &n);
>
> MatGetOwnershipRange(A, &first, &last);
>
> for (i = first; i < last; ++i) {
>
>      for (j = 0; j < N; ++j) {
>
>          if (abs(i - j) < m)
>
>              ++d_nnz[i - first];
>
>          else
>
>              ++o_nnz[i - first];
>
>      }
>
> }
>
> However, the criteria: abs(i - j) < m is not correct. I think the
> correct criteria will include the processor number also. Does anyone
> know the correct criteria to use?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220822/a8c13014/attachment-0001.html>


More information about the petsc-users mailing list