From ce43de0c4caed7b3be1d4224c11bdaca928dcab0 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <github@naumov.de> Date: Sun, 18 Dec 2016 23:33:34 +0100 Subject: [PATCH] [T] MeshComponentMap multicomponent getSubset(). --- Tests/NumLib/TestMeshComponentMap.cpp | 79 +++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/Tests/NumLib/TestMeshComponentMap.cpp b/Tests/NumLib/TestMeshComponentMap.cpp index 3cd9b503014..b6e05c970bf 100644 --- a/Tests/NumLib/TestMeshComponentMap.cpp +++ b/Tests/NumLib/TestMeshComponentMap.cpp @@ -215,3 +215,82 @@ TEST_F(NumLibMeshComponentMapTest, DISABLED_SubsetOfNodesByLocation) cmap_subset.getGlobalIndex(l, comp1_id)); } } + +#ifndef USE_PETSC +TEST_F(NumLibMeshComponentMapTest, MulticomponentVariable) +#else +TEST_F(NumLibMeshComponentMapTest, DISABLED_MulticomponentVariable) +#endif +{ + cmap = + new MeshComponentMap(components, NumLib::ComponentOrder::BY_LOCATION); + + // Select some nodes from the full mesh. + std::array<std::size_t, 3> const ids = {{0, 5, 9}}; + std::vector<MeshLib::Node*> some_nodes; + for (std::size_t id : ids) + some_nodes.push_back(const_cast<MeshLib::Node*>(mesh->getNode(id))); + + MeshLib::MeshSubset some_nodes_mesh_subset(*mesh, &some_nodes); + + auto selected_component = std::unique_ptr<MeshLib::MeshSubsets>{ + new MeshLib::MeshSubsets{&some_nodes_mesh_subset}}; + + // Subset the original cmap. + std::vector<std::size_t> const selected_component_ids = {0, 1}; + MeshComponentMap cmap_subset = + cmap->getSubset(selected_component_ids, *selected_component); + + // Check number of components as selected + ASSERT_EQ(ids.size() * selected_component_ids.size(), + cmap_subset.dofSizeWithGhosts()); + + // .. and the content of the subset. + for (std::size_t id : ids) + { + Location const l(mesh->getID(), MeshItemType::Node, id); + for (auto const& c : selected_component_ids) + EXPECT_EQ(cmap->getGlobalIndex(l, c), + cmap_subset.getGlobalIndex(l, c)); + } +} + +#ifndef USE_PETSC +TEST_F(NumLibMeshComponentMapTest, MulticomponentVariableSingleComponent) +#else +TEST_F(NumLibMeshComponentMapTest, + DISABLED_MulticomponentVariableSingleComponent) +#endif +{ + cmap = + new MeshComponentMap(components, NumLib::ComponentOrder::BY_LOCATION); + + // Select some nodes from the full mesh. + std::array<std::size_t, 3> const ids = {{0, 5, 9}}; + std::vector<MeshLib::Node*> some_nodes; + for (std::size_t id : ids) + some_nodes.push_back(const_cast<MeshLib::Node*>(mesh->getNode(id))); + + MeshLib::MeshSubset some_nodes_mesh_subset(*mesh, &some_nodes); + + auto selected_component = std::unique_ptr<MeshLib::MeshSubsets>{ + new MeshLib::MeshSubsets{&some_nodes_mesh_subset}}; + + // Subset the original cmap. + std::vector<std::size_t> const selected_component_ids = {1}; + MeshComponentMap cmap_subset = + cmap->getSubset(selected_component_ids, *selected_component); + + // Check number of components as selected + ASSERT_EQ(ids.size() * selected_component_ids.size(), + cmap_subset.dofSizeWithGhosts()); + + // .. and the content of the subset. + for (std::size_t id : ids) + { + Location const l(mesh->getID(), MeshItemType::Node, id); + for (auto const& c : selected_component_ids) + EXPECT_EQ(cmap->getGlobalIndex(l, c), + cmap_subset.getGlobalIndex(l, c)); + } +} -- GitLab