diff --git a/src/mesh/MeshNodeBoundary.hpp b/src/mesh/MeshNodeBoundary.hpp index 8f3b6362d827df82c8838bee8936728d40071ac6..5742d0c5d84740f81a9c1f9e6634d58d5f260214 100644 --- a/src/mesh/MeshNodeBoundary.hpp +++ b/src/mesh/MeshNodeBoundary.hpp @@ -162,12 +162,21 @@ MeshFlatNodeBoundary<2>::_checkBoundaryIsFlat(const TinyVector<2, double>& norma template <> template <typename MeshType> PUGS_INLINE TinyVector<1, double> -MeshFlatNodeBoundary<1>::_getNormal(const MeshType&) +MeshFlatNodeBoundary<1>::_getNormal(const MeshType& mesh) { static_assert(MeshType::Dimension == 1); using R = TinyVector<1, double>; - if (m_node_list.size() != 1) { + const size_t number_of_bc_nodes = [&]() { + size_t number_of_bc_nodes = 0; + auto node_is_owned = mesh.connectivity().nodeIsOwned(); + for (size_t i_node = 0; i_node < m_node_list.size(); ++i_node) { + number_of_bc_nodes += (node_is_owned[m_node_list[i_node]]); + } + return parallel::allReduceMax(number_of_bc_nodes); + }(); + + if (number_of_bc_nodes != 1) { perr() << "Node boundaries in 1D require to have exactly 1 node\n"; std::exit(1); }