diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp index 4365f48f8328824344c95310da63293da6755fa7..270433a5725e896e8ded14746dc265291edfbf13 100644 --- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp @@ -56,6 +56,26 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition( // is defined. std::vector<std::size_t> ids = mesh_node_searcher.getMeshNodeIDs(config.geometry); + // Filter out ids, which are not part of mesh subsets corresponding to + // the variable_id and component_id. + auto const& mesh_subsets = + dof_table.getMeshSubsets(variable_id, config.component_id); + auto ids_new_end_iterator = std::end(ids); + for (auto const& mesh_subset : mesh_subsets) + { + auto const& nodes = mesh_subset->getNodes(); + ids_new_end_iterator = std::remove_if(std::begin(ids), ids_new_end_iterator, + [&nodes](std::size_t const node_id) + { + return std::end(nodes) == std::find_if( + std::begin(nodes), std::end(nodes), + [&node_id](MeshLib::Node* const node) + { + return node->getID() == node_id; + }); + }); + } + ids.erase(ids_new_end_iterator, std::end(ids)); return createDirichletBoundaryCondition( config.config, std::move(ids), dof_table, mesh.getID(), variable_id,