On Fri, Jul 7, 2017 at 2:49 AM, Dave May <dave.mayhe...@gmail.com> wrote:
> On Fri, 7 Jul 2017 at 11:31, Florian Lindner <mailingli...@xgm.de> wrote: > >> 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. > > > When you run this code in serial, the mat type will be MATSEQAIJ. Hence, > the call to MatMPIAIJSetPreallocation() will have no effect because the mat > type does not match MPIAIJ. As a result, your code doesn't perform any > preallocation for SEQAIJ matrices. > > In addition to calling MatMPIAIJSetPreallocation(), add a call to > MatSEQAIJSetPreallocation. > To make it easier we now provide http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatXAIJSetPreallocation.html Matt > Thanks, > Dave > > >> >> 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 >> > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener http://www.caam.rice.edu/~mk51/