From 5b8649eb69e7c36c1a5d304b9aeaa7a96459ff2d Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <github@naumov.de> Date: Thu, 31 May 2018 23:11:52 +0200 Subject: [PATCH] [PL] Update BCs and STs for MeshSubsets removal. --- .../BoundaryCondition/BoundaryCondition.cpp | 17 +++++++---------- .../GenericNaturalBoundaryCondition-impl.h | 13 +++++-------- .../GenericNaturalBoundaryCondition.h | 2 -- ...ricNonuniformNaturalBoundaryCondition-impl.h | 3 +-- .../NormalTractionBoundaryCondition-impl.h | 10 +++------- ProcessLib/SourceTerms/SourceTermBuilder.cpp | 17 +++++++---------- 6 files changed, 23 insertions(+), 39 deletions(-) diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp index ead1f9bbc2b..d9a9ad8c761 100644 --- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp @@ -106,16 +106,13 @@ BoundaryConditionBuilder::createDirichletBoundaryCondition( // Sorted ids of all mesh_subsets. std::vector<std::size_t> sorted_nodes_ids; - auto const& mesh_subsets = - dof_table.getMeshSubsets(variable_id, *config.component_id); - for (auto const& mesh_subset : mesh_subsets) - { - auto const& nodes = mesh_subset->getNodes(); - sorted_nodes_ids.reserve(sorted_nodes_ids.size() + nodes.size()); - std::transform(std::begin(nodes), std::end(nodes), - std::back_inserter(sorted_nodes_ids), - [](MeshLib::Node* const n) { return n->getID(); }); - } + auto const& mesh_subset = + dof_table.getMeshSubset(variable_id, *config.component_id); + auto const& nodes = mesh_subset.getNodes(); + sorted_nodes_ids.reserve(sorted_nodes_ids.size() + nodes.size()); + std::transform(std::begin(nodes), std::end(nodes), + std::back_inserter(sorted_nodes_ids), + [](MeshLib::Node* const n) { return n->getID(); }); std::sort(std::begin(sorted_nodes_ids), std::end(sorted_nodes_ids)); auto ids_new_end_iterator = std::end(ids); diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h index 44f6ad81fa8..a65f5a0de03 100644 --- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h +++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition-impl.h @@ -52,19 +52,16 @@ GenericNaturalBoundaryCondition<BoundaryConditionData, DBUG("Found %d nodes for Natural BCs for the variable %d and component %d", nodes.size(), variable_id, component_id); - auto const& mesh_subsets = - dof_table_bulk.getMeshSubsets(variable_id, component_id); + auto const& mesh_subset = + dof_table_bulk.getMeshSubset(variable_id, component_id); - // TODO extend the node intersection to all parts of mesh_subsets, i.e. - // to each of the MeshSubset in the mesh_subsets. - _mesh_subset_all_nodes.reset( - mesh_subsets.getMeshSubset(0).getIntersectionByNodes(nodes)); - MeshLib::MeshSubsets all_mesh_subsets{_mesh_subset_all_nodes.get()}; + MeshLib::MeshSubset bc_mesh_subset = + mesh_subset.getIntersectionByNodes(nodes); // Create local DOF table from intersected mesh subsets for the given // variable and component ids. _dof_table_boundary.reset(dof_table_bulk.deriveBoundaryConstrainedMap( - variable_id, {component_id}, std::move(all_mesh_subsets), _elements)); + variable_id, {component_id}, std::move(bc_mesh_subset), _elements)); createLocalAssemblers<LocalAssemblerImplementation>( global_dim, _elements, *_dof_table_boundary, shapefunction_order, diff --git a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h index 1955f8579fc..4cc07be9aac 100644 --- a/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h +++ b/ProcessLib/BoundaryCondition/GenericNaturalBoundaryCondition.h @@ -55,8 +55,6 @@ private: /// defined. std::vector<MeshLib::Element*> _elements; - std::unique_ptr<MeshLib::MeshSubset const> _mesh_subset_all_nodes; - /// Local dof table, a subset of the global one restricted to the /// participating #_elements of the boundary condition. std::unique_ptr<NumLib::LocalToGlobalIndexMap> _dof_table_boundary; diff --git a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h index 6d262a0e052..28bbbb89415 100644 --- a/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h +++ b/ProcessLib/BoundaryCondition/GenericNonuniformNaturalBoundaryCondition-impl.h @@ -72,8 +72,7 @@ void GenericNonuniformNaturalBoundaryCondition< _mesh_subset_all_nodes.reset( new MeshLib::MeshSubset(*_boundary_mesh, &_boundary_mesh->getNodes())); - std::vector<MeshLib::MeshSubsets> all_mesh_subsets{ - _mesh_subset_all_nodes.get()}; + std::vector<MeshLib::MeshSubset> all_mesh_subsets{*_mesh_subset_all_nodes}; std::vector<int> vec_var_n_components{1}; diff --git a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h index be32b566921..ce4475b2c8b 100644 --- a/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h +++ b/ProcessLib/BoundaryCondition/NormalTractionBoundaryCondition-impl.h @@ -41,13 +41,9 @@ NormalTractionBoundaryCondition<LocalAssemblerImplementation>:: // Assume that the mesh subsets are equal for all components of the // variable. - auto const& mesh_subsets = dof_table_bulk.getMeshSubsets(variable_id, 0); + auto const& mesh_subset = dof_table_bulk.getMeshSubset(variable_id, 0); - // TODO extend the node intersection to all parts of mesh_subsets, i.e. - // to each of the MeshSubset in the mesh_subsets. - _mesh_subset_all_nodes.reset( - mesh_subsets.getMeshSubset(0).getIntersectionByNodes(nodes)); - MeshLib::MeshSubsets all_mesh_subsets{_mesh_subset_all_nodes.get()}; + auto bc_mesh_subset = mesh_subset.getIntersectionByNodes(nodes); // Create component ids vector for the current variable. auto const& number_of_components = @@ -58,7 +54,7 @@ NormalTractionBoundaryCondition<LocalAssemblerImplementation>:: // Create local DOF table from intersected mesh subsets for the given // variable and component ids. _dof_table_boundary.reset(dof_table_bulk.deriveBoundaryConstrainedMap( - variable_id, component_ids, std::move(all_mesh_subsets), _elements)); + variable_id, component_ids, std::move(bc_mesh_subset), _elements)); createLocalAssemblers<LocalAssemblerImplementation>( global_dim, _elements, *_dof_table_boundary, shapefunction_order, diff --git a/ProcessLib/SourceTerms/SourceTermBuilder.cpp b/ProcessLib/SourceTerms/SourceTermBuilder.cpp index 156bb4c9eca..9f2bfeb5c0d 100644 --- a/ProcessLib/SourceTerms/SourceTermBuilder.cpp +++ b/ProcessLib/SourceTerms/SourceTermBuilder.cpp @@ -62,16 +62,13 @@ std::unique_ptr<NodalSourceTerm> SourceTermBuilder::createNodalSourceTerm( // Sorted ids of all mesh_subsets. std::vector<std::size_t> sorted_nodes_ids; - auto const& mesh_subsets = - dof_table.getMeshSubsets(variable_id, *config.component_id); - for (auto const& mesh_subset : mesh_subsets) - { - auto const& nodes = mesh_subset->getNodes(); - sorted_nodes_ids.reserve(sorted_nodes_ids.size() + nodes.size()); - std::transform(std::begin(nodes), std::end(nodes), - std::back_inserter(sorted_nodes_ids), - [](MeshLib::Node* const n) { return n->getID(); }); - } + auto const& mesh_subset = + dof_table.getMeshSubset(variable_id, *config.component_id); + auto const& nodes = mesh_subset.getNodes(); + sorted_nodes_ids.reserve(sorted_nodes_ids.size() + nodes.size()); + std::transform(std::begin(nodes), std::end(nodes), + std::back_inserter(sorted_nodes_ids), + [](MeshLib::Node* const n) { return n->getID(); }); std::sort(std::begin(sorted_nodes_ids), std::end(sorted_nodes_ids)); auto ids_new_end_iterator = std::end(ids); -- GitLab