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