From 2ad1e1200ffb5781daf736908a0da37105f52707 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 13 May 2019 18:34:36 +0200 Subject: [PATCH] Fix boundary condition checking in 1D Now checks that each boundary has only one node in parallel and *not* on each processor... --- src/mesh/MeshNodeBoundary.hpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mesh/MeshNodeBoundary.hpp b/src/mesh/MeshNodeBoundary.hpp index 8f3b6362d..5742d0c5d 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); } -- GitLab