Hi,

I would like to preallocate my highly sparse matrices to get speed up during 
assembling.

Up to 70000x70000, it works fine in parallel.

But when I exceed around 70000 rows/columns, I receive following error at 
preallocation line;

petsc4py.PETSc.Error: error code 4031
[0] MatMPIAIJSetPreallocation() at 
/home/ekrem/Dev/Venvs/dolfinxcomplex/installation/petsc/src/mat/impls/aij/mpi/mpiaij.c:4039
[0] MatMPIAIJSetPreallocation_MPIAIJ() at 
/home/ekrem/Dev/Venvs/dolfinxcomplex/installation/petsc/src/mat/impls/aij/mpi/mpiaij.c:2845
[0] MatSeqAIJSetPreallocation() at 
/home/ekrem/Dev/Venvs/dolfinxcomplex/installation/petsc/src/mat/impls/aij/seq/aij.c:3963
[0] MatSeqAIJSetPreallocation_SeqAIJ() at 
/home/ekrem/Dev/Venvs/dolfinxcomplex/installation/petsc/src/mat/impls/aij/seq/aij.c:4031
[0] PetscMallocA() at 
/home/ekrem/Dev/Venvs/dolfinxcomplex/installation/petsc/src/sys/memory/mal.c:401
[0] PetscMallocAlign() at 
/home/ekrem/Dev/Venvs/dolfinxcomplex/installation/petsc/src/sys/memory/mal.c:49
[0] MatSeqAIJSetPreallocation_SeqAIJ

I have attached my sparsity pattern as CSR.png.

I use petsc4py for matrix generation, and here are the commands that I am using 
to generate matrix;

row # global row numbers
col = # global column numbers
val = # flattened 2D nonzero array

mat = PETSc.Mat().create(PETSc.COMM_WORLD)
mat.setSizes([(local_size, global_size), (local_size, global_size)])
mat.setType('mpiaij')
ONNZ = len(row)*np.ones(local_size,dtype=np.int32)
mat.setPreallocationNNZ([ONNZ,ONNZ]) # This line throws the error above
mat.setOption(PETSc.Mat.Option.NEW_NONZERO_ALLOCATION_ERR, False)
mat.setUp()
mat.setValues(row, col, val, addv=PETSc.InsertMode.ADD_VALUES)
mat.assemblyBegin()
mat.assemblyEnd()

Many thanks for your response in advance,

Kind regards

Reply via email to