From fd2b4f73ef060b2af645085c9c88444333b83dde Mon Sep 17 00:00:00 2001 From: Daniel Schwen Date: Tue, 13 Sep 2022 13:52:24 -0600 Subject: [PATCH] Build boundary node multimap (#3385) --- src/mesh/mesh_tools.C | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/mesh/mesh_tools.C b/src/mesh/mesh_tools.C index c66de46eb74..673de1465d4 100644 --- a/src/mesh/mesh_tools.C +++ b/src/mesh/mesh_tools.C @@ -537,7 +537,7 @@ MeshTools::find_block_boundary_nodes(const MeshBase & mesh) // mark them as true in on_boundary. for (const auto & elem : mesh.active_element_ptr_range()) for (auto s : elem->side_index_range()) - if (elem->neighbor_ptr(s) && (elem->neighbor_ptr(s)->subdomain_id() != elem->subdomain_id())) + if (elem->neighbor_ptr(s) && elem->neighbor_ptr(s)->subdomain_id() > elem->subdomain_id()) { auto nodes_on_side = elem->nodes_on_side(s); @@ -549,6 +549,31 @@ MeshTools::find_block_boundary_nodes(const MeshBase & mesh) } +std::multimap> +MeshTools::build_block_boundary_node_map(const MeshBase & mesh) +{ + std::multimap> block_boundary_node_map; + + // Loop over elements, find those on boundary, and + // mark them as true in on_boundary. + for (const auto & elem : mesh.active_element_ptr_range()) + { + const auto id1 = elem->subdomain_id(); + for (auto s : elem->side_index_range()) + { + const auto id2 = elem->neighbor_ptr(s)->subdomain_id(); + if (elem->neighbor_ptr(s) && id2 > id1) + { + auto nodes_on_side = elem->nodes_on_side(s); + + for (auto & local_id : nodes_on_side) + block_boundary_node_map.emplace(elem->node_ptr(local_id)->id(), id1, id2); + } + } + + return block_boundary_node_map; +} + libMesh::BoundingBox MeshTools::create_bounding_box (const MeshBase & mesh)