diff --git a/src/mesh/MeshRandomizer.hpp b/src/mesh/MeshRandomizer.hpp index 71827bf2aa850227e5ab42319fae027d4b4000cf..36b3b169d37d27d473e9691242bb7882f993bb62 100644 --- a/src/mesh/MeshRandomizer.hpp +++ b/src/mesh/MeshRandomizer.hpp @@ -102,7 +102,6 @@ class MeshRandomizer void _applyBC(NodeValue<Rd>& shift) const { - std::cout << "applying " << m_boundary_condition_list.size() << " boundary conditions\n"; for (auto&& boundary_condition : m_boundary_condition_list) { std::visit( [&](auto&& bc) { @@ -183,19 +182,22 @@ class MeshRandomizer }); std::sort(&node_numbers_to_node_id[0], &node_numbers_to_node_id[0] + node_numbers_to_node_id.size(), - [](IdCorrespondance& a, IdCorrespondance& b) { return a.first < b.first; }); + [](IdCorrespondance a, IdCorrespondance b) { return a.first < b.first; }); RandomEngine& random_engine = RandomEngine::instance(); + Assert(isSynchronized(random_engine), "seed is not synchronized when entering mesh randomization"); + NodeValue<Rd> shift_r{connectivity}; int i_node_number = 0; for (size_t i = 0; i < node_numbers_to_node_id.size(); ++i) { const auto [node_number, node_id] = node_numbers_to_node_id[i]; - for (; i_node_number < node_number; ++i_node_number) { + while (i_node_number < node_number) { for (size_t j = 0; j < Dimension; ++j) { dis(random_engine.engine()); } + ++i_node_number; } double max_delta = max_delta_xr[node_id]; @@ -214,13 +216,22 @@ class MeshRandomizer parallel::allReduceMax(node_numbers_to_node_id[node_numbers_to_node_id.size() - 1].first); // Advances random engine to preserve CPU random number generators synchronization - for (; i_node_number < max_node_number; ++i_node_number) { + for (; i_node_number <= max_node_number; ++i_node_number) { for (size_t j = 0; j < Dimension; ++j) { dis(random_engine.engine()); } } this->_applyBC(shift_r); + +#ifndef NDEBUG + if (not isSynchronized(shift_r)) { + throw UnexpectedError("randomized mesh coordinates are not synchronized"); + } +#endif // NDEBUG + + Assert(isSynchronized(random_engine), "seed is not synchronized after mesh randomization"); + return shift_r; }