[petsc-users] Understanding preallocation for MPI
Florian Lindner
mailinglists at xgm.de
Fri Jul 7 04:31:45 CDT 2017
Hello,
I'm having some struggle understanding the preallocation for MPIAIJ matrices, especially when a value is in off-diagonal
vs. diagonal block.
The small example program is at https://pastebin.com/67dXnGm3
In general it should be parallel, but right now I just run it in serial.
According to my understanding of
http://www.mcs.anl.gov/petsc/petsc-3.7/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html
a entry is in the diagonal submatrix, if its row is in the OwnershipRange and its column is in OwnershipRangeColumn.
That also means that in a serial run, there is only a diagonal submatrix.
However, having MAT_NEW_NONZERO_ALLOCATION_ERR set, I get an error when
Inserting 6 elements in row 2, though I have exactly
2 o_nnz = 0, d_nnz = 6 (means 6 elements allocated in the diagonal submatrix of row 2)
Error is:
[0]PETSC ERROR: Argument out of range
[0]PETSC ERROR: New nonzero at (2,5) caused a malloc
Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check
What is wrong with my understanding?
Thanks,
Florian
More information about the petsc-users
mailing list