From f80012cdd9c37395ad8b1d4c0cafee9ae58a4d6d Mon Sep 17 00:00:00 2001
From: Tuomas Karna <tuomas.karna@uclouvain.be>
Date: Fri, 1 Oct 2010 15:31:34 +0000
Subject: [PATCH] linearSystemPETSc sequential fix

---
 Solver/linearSystemPETSc.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/Solver/linearSystemPETSc.cpp b/Solver/linearSystemPETSc.cpp
index 6d485cc1a1..b2f6a800dc 100644
--- a/Solver/linearSystemPETSc.cpp
+++ b/Solver/linearSystemPETSc.cpp
@@ -91,13 +91,17 @@ void linearSystemPETSc<fullMatrix<PetscScalar> >::allocate(int nbRows)
   //_try(PetscOptionsInsertString("-ksp_monitor_true_residual -ksp_rtol 1e-10"));
   _try(MatCreate(PETSC_COMM_WORLD, &_a)); 
   _try(MatSetSizes(_a,nbRows * _blockSize, nbRows * _blockSize, PETSC_DETERMINE, PETSC_DETERMINE));
-  //_try(MatSetType(_a, MATSEQBAIJ));
-  _try(MatSetType(_a, MATMPIBAIJ));
+  if (Msg::GetCommSize() > 1) {
+    _try(MatSetType(_a, MATMPIBAIJ));
+    _try(MatSetFromOptions(_a));
+    _try(MatMPIBAIJSetPreallocation(_a, _blockSize, 5, NULL, 0, NULL));
+  } else {
+    _try(MatSetType(_a, MATSEQBAIJ));
+    _try(MatSetFromOptions(_a));
+    _try(MatSeqBAIJSetPreallocation(_a, _blockSize, 5, NULL)); //todo preAllocate off-diagonal part
+  }
   // override the default options with the ones from the option
   // database (if any)
-  _try(MatSetFromOptions(_a));
-  _try(MatMPIBAIJSetPreallocation(_a, _blockSize, 5, NULL, 0, NULL));
-  //_try(MatMPIBAIJSetPreallocation(_a, _blockSize, 4, NULL, 0, NULL)); //todo preAllocate off-diagonal part
   _try(VecCreate(PETSC_COMM_WORLD, &_x));
   _try(VecSetSizes(_x, nbRows * _blockSize, PETSC_DETERMINE));
   // override the default options with the ones from the option
-- 
GitLab