// get cell weights for a weighted repartitioning.
const std::vector<unsigned int> 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<dim, spacedim> partition_weights(cell_weights);
// attach (temporarily) a pointer to the cell weights through
// get cell weights for a weighted repartitioning.
const std::vector<unsigned int> 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<dim, spacedim> partition_weights(cell_weights);
// attach (temporarily) a pointer to the cell weights through
// ---------------------------------------------------------------------
//
-// 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.
//
// 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 =
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
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