Skip to content
Snippets Groups Projects
Commit 1ff8f483 authored by Jonathan Lambrechts's avatar Jonathan Lambrechts
Browse files

petsc : MatXAIJSetPreallocation not available in petsc < 3.3

parent 999753cd
No related branches found
No related tags found
No related merge requests found
...@@ -111,29 +111,38 @@ void linearSystemPETSc<scalar>::preAllocateEntries() ...@@ -111,29 +111,38 @@ void linearSystemPETSc<scalar>::preAllocateEntries()
} }
_sparsity.clear(); _sparsity.clear();
} }
_try(MatXAIJSetPreallocation(_a, blockSize, &nByRowDiag[0], &nByRowOffDiag[0], NULL, NULL)); //MatXAIJSetPreallocation is not available in petsc < 3.3
int commSize = 1;
MPI_Comm_size(_comm, &commSize);
if (commSize == 1){
if (blockSize == 1)
_try(MatSeqAIJSetPreallocation(_a, 0, &nByRowDiag[0]));
else
_try(MatSeqBAIJSetPreallocation(_a, blockSize, 0, &nByRowDiag[0]));
}
else {
if (blockSize == 1)
_try(MatMPIAIJSetPreallocation(_a, 0, &nByRowDiag[0], 0, &nByRowOffDiag[0]));
else
_try(MatMPIBAIJSetPreallocation(_a, blockSize, 0, &nByRowDiag[0], 0, &nByRowOffDiag[0]));
}
_entriesPreAllocated = true; _entriesPreAllocated = true;
} }
template <class scalar> template <class scalar>
void linearSystemPETSc<scalar>::allocate(int nbRows) void linearSystemPETSc<scalar>::allocate(int nbRows)
{ {
#ifdef HAVE_MPI int commSize;
PetscMPIInt commSize; MPI_Comm_size(_comm, &commSize);
MPI_Comm_size(_comm,&commSize);
#endif
int blockSize = _getBlockSizeFromParameters(); int blockSize = _getBlockSizeFromParameters();
clear(); clear();
_try(MatCreate(_comm, &_a)); _try(MatCreate(_comm, &_a));
_try(MatSetSizes(_a, blockSize * nbRows, blockSize * nbRows, PETSC_DETERMINE, PETSC_DETERMINE)); _try(MatSetSizes(_a, blockSize * nbRows, blockSize * nbRows, PETSC_DETERMINE, PETSC_DETERMINE));
if (blockSize > 1) { if (blockSize > 1) {
#ifdef HAVE_MPI
if (commSize > 1) { if (commSize > 1) {
MatSetType(_a, MATMPIBAIJ); MatSetType(_a, MATMPIBAIJ);
} }
else else {
#endif
{
MatSetType(_a, MATSEQBAIJ); MatSetType(_a, MATSEQBAIJ);
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment