From a9205b9a5dcc07a4064210ef85c9afc95f090f70 Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Tue, 14 Jan 2020 16:05:42 +0100 Subject: [PATCH] [DeactivatedSubdomain] Changed the search method --- ProcessLib/DeactivatedSubdomain.cpp | 58 ++++++++++++----------------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/ProcessLib/DeactivatedSubdomain.cpp b/ProcessLib/DeactivatedSubdomain.cpp index 4ea4d7e3e64..1c91a899d55 100644 --- a/ProcessLib/DeactivatedSubdomain.cpp +++ b/ProcessLib/DeactivatedSubdomain.cpp @@ -89,49 +89,39 @@ std::unique_ptr<DeactivatedSubdomain const> createDeactivatedSubdomain( for (auto const ids : deactivated_subdomain_material_ids) { - std::vector<MeshLib::Element*> deactivated_elements; + auto const& nodes = mesh.getNodes(); std::vector<MeshLib::Node*> deactivated_nodes; + for (auto const& node : nodes) + { + const auto& connected_elements = node->getElements(); + + // Check whether this node is in an activated element. + if (std::find_if( + connected_elements.begin(), + connected_elements.end(), + [&](auto const* const connected_elem) -> bool { + return ids != (*material_ids)[connected_elem->getID()]; + }) != connected_elements.end()) + { + continue; + } + else + { + deactivated_nodes.push_back(const_cast<MeshLib::Node*>(node)); + } + } - // temporary vector to enhance node searching. - std::vector<bool> deactivation_flag_of_nodes(mesh.getNumberOfNodes(), - false); - - for (std::size_t i = 0; i < mesh.getNumberOfElements(); i++) + auto const& elements = mesh.getElements(); + std::vector<MeshLib::Element*> deactivated_elements; + for (auto const& element : elements) { - if (ids != (*material_ids)[i]) + if (ids != (*material_ids)[element->getID()]) { continue; } - auto* element = mesh.getElement(i); deactivated_elements.push_back( const_cast<MeshLib::Element*>(element)); - - for (unsigned j = 0; j < element->getNumberOfNodes(); j++) - { - auto const* const node = element->getNode(j); - const auto& connected_elements = node->getElements(); - - if (deactivation_flag_of_nodes[node->getID()]) - { - continue; - } - - // Check whether this node is in an activated element. - if (std::find_if( - connected_elements.begin(), - connected_elements.end(), - [&](auto const* const connected_elem) -> bool { - return ids != - (*material_ids)[connected_elem->getID()]; - }) != connected_elements.end()) - { - continue; - } - - deactivated_nodes.push_back(const_cast<MeshLib::Node*>(node)); - deactivation_flag_of_nodes[node->getID()] = true; - } } auto bc_mesh = MeshLib::createMeshFromElementSelection( -- GitLab