From 8e198df9907031916b33dd326bc4975797e2bdea Mon Sep 17 00:00:00 2001 From: Timo Heister Date: Sun, 6 Feb 2011 16:38:39 +0000 Subject: [PATCH] implement mean_value() for PETScWrappers::MPI::Vector. git-svn-id: https://svn.dealii.org/trunk@23297 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/source/lac/petsc_vector_base.cc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/deal.II/source/lac/petsc_vector_base.cc b/deal.II/source/lac/petsc_vector_base.cc index 5b39a8318b..18efed8d5f 100644 --- a/deal.II/source/lac/petsc_vector_base.cc +++ b/deal.II/source/lac/petsc_vector_base.cc @@ -414,13 +414,21 @@ namespace PETScWrappers PetscScalar VectorBase::mean_value () const { - Assert(dynamic_cast(this) == 0, - ExcMessage ("::mean_value() not implemented for MPI::Vector.")); + int ierr; + // We can only use our more efficient + // routine in the serial case. + if (dynamic_cast(this) != 0) + { + PetscScalar sum; + ierr = VecSum( vector, &sum); + AssertThrow (ierr == 0, ExcPETScError(ierr)); + return sum/size(); + } // get a representation of the vector and // loop over all the elements PetscScalar *start_ptr; - int ierr = VecGetArray (vector, &start_ptr); + ierr = VecGetArray (vector, &start_ptr); AssertThrow (ierr == 0, ExcPETScError(ierr)); PetscScalar mean = 0; -- 2.39.5