From a32484a671d98bea803fd8da8d43ea8f08dc3bba Mon Sep 17 00:00:00 2001 From: Marc Fehling Date: Fri, 11 Mar 2022 20:14:09 -0700 Subject: [PATCH] cell_weight: check that global sum of weights is larger than 0. --- source/distributed/tria.cc | 27 +++++++++++++++++++++++++++ source/grid/grid_tools.cc | 24 ++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/source/distributed/tria.cc b/source/distributed/tria.cc index c879f53d9a..617c9ec3b6 100644 --- a/source/distributed/tria.cc +++ b/source/distributed/tria.cc @@ -3361,6 +3361,20 @@ namespace parallel // get cell weights for a weighted repartitioning. const std::vector cell_weights = get_cell_weights(); +# ifdef DEBUG + // verify that the global sum of weights is larger than 0 + const auto local_weights_sum = + std::accumulate(cell_weights.begin(), + cell_weights.end(), + std::uint64_t(0)); + const auto global_weights_sum = + Utilities::MPI::sum(local_weights_sum, this->mpi_communicator); + Assert(global_weights_sum > 0, + ExcMessage( + "The global sum of weights over all active cells " + "is zero. Please verify how you generate weights.")); +# endif + PartitionWeights partition_weights(cell_weights); // attach (temporarily) a pointer to the cell weights through @@ -3529,6 +3543,19 @@ namespace parallel // get cell weights for a weighted repartitioning. const std::vector cell_weights = get_cell_weights(); +# ifdef DEBUG + // verify that the global sum of weights is larger than 0 + const auto local_weights_sum = std::accumulate(cell_weights.begin(), + cell_weights.end(), + std::uint64_t(0)); + const auto global_weights_sum = + Utilities::MPI::sum(local_weights_sum, this->mpi_communicator); + Assert(global_weights_sum > 0, + ExcMessage( + "The global sum of weights over all active cells " + "is zero. Please verify how you generate weights.")); +# endif + PartitionWeights partition_weights(cell_weights); // attach (temporarily) a pointer to the cell weights through diff --git a/source/grid/grid_tools.cc b/source/grid/grid_tools.cc index a88f8047e0..a9566e6d7a 100644 --- a/source/grid/grid_tools.cc +++ b/source/grid/grid_tools.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2001 - 2021 by the deal.II authors +// Copyright (C) 2001 - 2022 by the deal.II authors // // This file is part of the deal.II library. // @@ -3832,7 +3832,7 @@ namespace GridTools // If this is a parallel triangulation, we then need to also // get the weights for all other cells. We have asserted above // that this function can't be used for - // parallel::distribute::Triangulation objects, so the only + // parallel::distributed::Triangulation objects, so the only // ones we have to worry about here are // parallel::shared::Triangulation if (const auto shared_tria = @@ -3841,6 +3841,16 @@ namespace GridTools Utilities::MPI::sum(cell_weights, shared_tria->get_communicator(), cell_weights); + +#ifdef DEBUG + // verify that the global sum of weights is larger than 0 + const auto global_cell_sum = std::accumulate(cell_weights.begin(), + cell_weights.end(), + std::uint64_t(0)); + Assert(global_cell_sum > 0, + ExcMessage("The global sum of weights over all active cells " + "is zero. Please verify how you generate weights.")); +#endif } // Call the other more general function @@ -3935,6 +3945,16 @@ namespace GridTools Utilities::MPI::sum(cell_weights, shared_tria->get_communicator(), cell_weights); + +#ifdef DEBUG + // verify that the global sum of weights is larger than 0 + const auto global_cell_sum = std::accumulate(cell_weights.begin(), + cell_weights.end(), + std::uint64_t(0)); + Assert(global_cell_sum > 0, + ExcMessage("The global sum of weights over all active cells " + "is zero. Please verify how you generate weights.")); +#endif } // Call the other more general function -- 2.39.5