From a71492cc024dcbf58a28fd4938ab1054dc29bc26 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <github@naumov.de> Date: Tue, 27 Jun 2023 18:12:00 +0200 Subject: [PATCH] [PL/DS] Use unordered set for faster search --- ProcessLib/CreateDeactivatedSubdomain.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/ProcessLib/CreateDeactivatedSubdomain.cpp b/ProcessLib/CreateDeactivatedSubdomain.cpp index 47fa3e0f778..32cec4d861c 100644 --- a/ProcessLib/CreateDeactivatedSubdomain.cpp +++ b/ProcessLib/CreateDeactivatedSubdomain.cpp @@ -91,7 +91,7 @@ static std::vector<std::vector<std::size_t>> extractElementsAlongOuterNodes( static DeactivatedSubdomainMesh createDeactivatedSubdomainMesh( MeshLib::Mesh const& mesh, - std::vector<int> const& deactivated_subdomain_material_ids) + std::unordered_set<int> const& deactivated_subdomain_material_ids) { // An element is active if its material id matches one of the deactivated // subdomain material ids. @@ -99,11 +99,8 @@ static DeactivatedSubdomainMesh createDeactivatedSubdomainMesh( [&deactivated_subdomain_material_ids, &material_ids = *materialIDs(mesh)](std::size_t element_id) { - int const element_material_id = material_ids[element_id]; - return std::any_of(begin(deactivated_subdomain_material_ids), - end(deactivated_subdomain_material_ids), - [&](int const material_id) - { return material_id == element_material_id; }); + return deactivated_subdomain_material_ids.contains( + material_ids[element_id]); }; auto const& elements = mesh.getElements(); @@ -271,7 +268,8 @@ DeactivatedSubdomain createDeactivatedSubdomain( auto deactivated_subdomain_material_ids = //! \ogs_file_param{prj__process_variables__process_variable__deactivated_subdomains__deactivated_subdomain__material_ids} - config.getConfigParameter("material_ids", std::vector<int>{}); + config.getConfigParameter("material_ids", std::vector<int>{}) | + ranges::to<std::unordered_set>(); if (deactivated_subdomain_material_ids.empty()) { @@ -280,9 +278,6 @@ DeactivatedSubdomain createDeactivatedSubdomain( "program terminates now."); } - std::sort(deactivated_subdomain_material_ids.begin(), - deactivated_subdomain_material_ids.end()); - if (materialIDs(mesh) == nullptr) { OGS_FATAL( -- GitLab