diff --git a/Solver/linearSystemPETSc.hpp b/Solver/linearSystemPETSc.hpp
index 73af243fa2a0ec4ad48448977bcc7c7e34d6ae6a..dc66e630410d5f8b6559ef603f243cbfd394b304 100644
--- a/Solver/linearSystemPETSc.hpp
+++ b/Solver/linearSystemPETSc.hpp
@@ -103,7 +103,9 @@ void linearSystemPETSc<scalar>::allocate(int nbRows)
     _try(MatAppendOptionsPrefix(_a, this->_parameters["petscPrefix"].c_str()));
   _try(MatSetFromOptions(_a));
   _try(MatGetOwnershipRange(_a, &_localRowStart, &_localRowEnd));
-  _try(MatGetSize(_a, &_globalSize, &_localSize));
+  int nbColumns;
+  _localSize = _localRowEnd - _localRowStart;
+  _try(MatGetSize(_a, &_globalSize, &nbColumns));
   // preallocation option must be set after other options
   _try(VecCreate(PETSC_COMM_WORLD, &_x));
   _try(VecSetSizes(_x, nbRows, PETSC_DETERMINE));