From: Timo Heister Date: Sun, 6 Feb 2011 16:38:39 +0000 (+0000) Subject: implement mean_value() for PETScWrappers::MPI::Vector. X-Git-Tag: v8.0.0~4400 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e198df9907031916b33dd326bc4975797e2bdea;p=dealii.git implement mean_value() for PETScWrappers::MPI::Vector. git-svn-id: https://svn.dealii.org/trunk@23297 0785d39b-7218-0410-832d-ea1e28bc413d --- 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;