From 2e19676d0b671b22fd49bfb893aec66c1176bbe2 Mon Sep 17 00:00:00 2001 From: heister Date: Tue, 6 Mar 2012 23:17:06 +0000 Subject: [PATCH] Fixed: TrilinosWrappers::Vector::all_zero() in parallel. git-svn-id: https://svn.dealii.org/trunk@25215 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/doc/news/changes.h | 4 ++++ deal.II/source/lac/trilinos_vector_base.cc | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/deal.II/doc/news/changes.h b/deal.II/doc/news/changes.h index 92fc9e9ffa..dca8d9240f 100644 --- a/deal.II/doc/news/changes.h +++ b/deal.II/doc/news/changes.h @@ -145,6 +145,10 @@ enabled due to a missing include file in file

Specific improvements

    +
  1. Fixed: TrilinosWrappers::Vector::all_zero() in parallel. +
    +(Timo Heister, Jörg Frohne, 2012/03/06) +
  2. New: GridGenerator::quarter_hyper_shell() in 3d.
    (Thomas Geenen, 2012/03/05) diff --git a/deal.II/source/lac/trilinos_vector_base.cc b/deal.II/source/lac/trilinos_vector_base.cc index 2a535f881c..8b6ec7a97e 100644 --- a/deal.II/source/lac/trilinos_vector_base.cc +++ b/deal.II/source/lac/trilinos_vector_base.cc @@ -270,18 +270,28 @@ namespace TrilinosWrappers TrilinosScalar *start_ptr = (*vector)[0]; const TrilinosScalar *ptr = start_ptr, *eptr = start_ptr + local_size(); - bool flag = true; + unsigned int flag = 0; while (ptr != eptr) { if (*ptr != 0) { - flag = false; + flag = 1; break; } ++ptr; } - return flag; +#ifdef DEAL_II_COMPILER_SUPPORTS_MPI + // in parallel, check that the vector + // is zero on _all_ processors. + const Epetra_MpiComm *mpi_comm + = dynamic_cast(&vector->Map().Comm()); + unsigned int num_nonzero = Utilities::MPI::sum(flag, mpi_comm->Comm()); + return num_nonzero == 0; +#else + return flag == 0; +#endif + } -- 2.39.5