From c3adda46fa269b5ee0b0ae744e425b7192f9dec4 Mon Sep 17 00:00:00 2001 From: Denis Davydov Date: Mon, 19 Mar 2018 15:10:51 +0100 Subject: [PATCH] check that size of ArrayView in internal::all_reduce() is the same across the given communicator --- include/deal.II/base/mpi.templates.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/deal.II/base/mpi.templates.h b/include/deal.II/base/mpi.templates.h index 8302d7cdc9..09473cf03d 100644 --- a/include/deal.II/base/mpi.templates.h +++ b/include/deal.II/base/mpi.templates.h @@ -120,6 +120,21 @@ namespace Utilities #ifdef DEAL_II_WITH_MPI if (job_supports_mpi()) { +#ifdef DEBUG + { + const unsigned int rank = this_mpi_process(mpi_communicator); + const int size = values.size(); + int size_min = 0; + int size_max = 0; + int ierr2 = 0; + ierr2 = MPI_Reduce(&size, &size_min, 1, MPI_INT, MPI_MIN, 0, mpi_communicator); + AssertThrowMPI(ierr2); + ierr2 = MPI_Reduce(&size, &size_max, 1, MPI_INT, MPI_MAX, 0, mpi_communicator); + AssertThrowMPI(ierr2); + if (rank==0) + Assert (size_min == size_max, ExcMessage("values has different size across MPI processes.")); + } +#endif const int ierr = MPI_Allreduce (values != output ? -- 2.39.5