Skip to content
Snippets Groups Projects
Commit 20368df1 authored by Norihiro Watanabe's avatar Norihiro Watanabe
Browse files

add NodeSearch, ElementSearch, RemoveMeshComponents

parent 745705e6
No related branches found
No related tags found
No related merge requests found
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "MeshLib/Node.h" #include "MeshLib/Node.h"
#include "MeshLib/Elements/Element.h" #include "MeshLib/Elements/Element.h"
#include "MeshLib/MeshGenerators/MeshGenerator.h" #include "MeshLib/MeshGenerators/MeshGenerator.h"
#include "MeshLib/MeshSearcher.h" #include "MeshLib/MeshSearch/NodeSearch.h"
#include "MeshGeoToolsLib/MeshNodeSearcher.h" #include "MeshGeoToolsLib/MeshNodeSearcher.h"
#include "MeshGeoToolsLib/HeuristicSearchLength.h" #include "MeshGeoToolsLib/HeuristicSearchLength.h"
#include "MeshGeoToolsLib/BoundaryElementsSearcher.h" #include "MeshGeoToolsLib/BoundaryElementsSearcher.h"
...@@ -151,7 +151,11 @@ TEST_F(MeshLibBoundaryElementSearchInSimpleHexMesh, SurfaceSearch) ...@@ -151,7 +151,11 @@ TEST_F(MeshLibBoundaryElementSearchInSimpleHexMesh, SurfaceSearch)
double sum_area_b = std::accumulate(found_faces_sfc_b.begin(), found_faces_sfc_b.end(), 0.0, double sum_area_b = std::accumulate(found_faces_sfc_b.begin(), found_faces_sfc_b.end(), 0.0,
[](double v, MeshLib::Element*e){return v+e->getContent();}); [](double v, MeshLib::Element*e){return v+e->getContent();});
ASSERT_EQ(_geometric_size*_geometric_size, sum_area_b); ASSERT_EQ(_geometric_size*_geometric_size, sum_area_b);
auto connected_nodeIDs_b = MeshLib::getConnectedNodeIDs(found_faces_sfc_b); MeshLib::NodeSearch ns(*_hex_mesh);
std::vector<std::size_t> found_faces_sfc_b_ids;
for (auto e : found_faces_sfc_b) found_faces_sfc_b_ids.push_back(e->getID());
ns.searchByElementIDs(found_faces_sfc_b_ids);
auto& connected_nodeIDs_b = ns.getSearchedNodeIDs();
ASSERT_EQ(n_nodes_2d, connected_nodeIDs_b.size()); ASSERT_EQ(n_nodes_2d, connected_nodeIDs_b.size());
for (auto nodeID : connected_nodeIDs_b) for (auto nodeID : connected_nodeIDs_b)
ASSERT_EQ(0.0, (*_hex_mesh->getNode(nodeID))[2]); // check z coordinates ASSERT_EQ(0.0, (*_hex_mesh->getNode(nodeID))[2]); // check z coordinates
...@@ -162,7 +166,11 @@ TEST_F(MeshLibBoundaryElementSearchInSimpleHexMesh, SurfaceSearch) ...@@ -162,7 +166,11 @@ TEST_F(MeshLibBoundaryElementSearchInSimpleHexMesh, SurfaceSearch)
double sum_area_f = std::accumulate(found_faces_sfc_f.begin(), found_faces_sfc_f.end(), 0.0, double sum_area_f = std::accumulate(found_faces_sfc_f.begin(), found_faces_sfc_f.end(), 0.0,
[](double v, MeshLib::Element*e){return v+e->getContent();}); [](double v, MeshLib::Element*e){return v+e->getContent();});
ASSERT_EQ(_geometric_size*_geometric_size, sum_area_f); ASSERT_EQ(_geometric_size*_geometric_size, sum_area_f);
auto connected_nodeIDs_f = MeshLib::getConnectedNodeIDs(found_faces_sfc_f); MeshLib::NodeSearch ns_f(*_hex_mesh);
std::vector<std::size_t> found_faces_sfc_f_ids;
for (auto e : found_faces_sfc_f) found_faces_sfc_f_ids.push_back(e->getID());
ns_f.searchByElementIDs(found_faces_sfc_f_ids);
auto& connected_nodeIDs_f = ns_f.getSearchedNodeIDs();
ASSERT_EQ(n_nodes_2d, connected_nodeIDs_f.size()); ASSERT_EQ(n_nodes_2d, connected_nodeIDs_f.size());
for (auto nodeID : connected_nodeIDs_f) for (auto nodeID : connected_nodeIDs_f)
ASSERT_EQ(0.0, (*_hex_mesh->getNode(nodeID))[1]); // check y coordinates ASSERT_EQ(0.0, (*_hex_mesh->getNode(nodeID))[1]); // check y coordinates
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include "MeshLib/Node.h" #include "MeshLib/Node.h"
#include "Elements/Element.h" #include "Elements/Element.h"
#include "MeshEditing/DuplicateMeshComponents.h" #include "MeshEditing/DuplicateMeshComponents.h"
#include "MeshEditing/removeMeshNodes.h" #include "MeshEditing/RemoveMeshComponents.h"
#include "MeshGenerators/MeshGenerator.h" #include "MeshGenerators/MeshGenerator.h"
#include "MeshQuality/MeshValidation.h" #include "MeshQuality/MeshValidation.h"
#include "MathTools.h" #include "MathTools.h"
...@@ -38,14 +38,14 @@ TEST(MeshLib, Duplicate) ...@@ -38,14 +38,14 @@ TEST(MeshLib, Duplicate)
ASSERT_EQ (mesh->getNNodes(), new_mesh.getNNodes()); ASSERT_EQ (mesh->getNNodes(), new_mesh.getNNodes());
std::vector<std::size_t> del_idx(1,1); std::vector<std::size_t> del_idx(1,1);
MeshLib::removeMeshNodes(*mesh, del_idx); std::unique_ptr<MeshLib::Mesh> mesh2(MeshLib::removeNodes(*mesh, del_idx, "mesh2"));
ASSERT_EQ (mesh->getNElements(), new_mesh.getNElements()-2); ASSERT_EQ (mesh2->getNElements(), new_mesh.getNElements()-2);
ASSERT_EQ (mesh->getNNodes(), new_mesh.getNNodes()-2); ASSERT_EQ (mesh2->getNNodes(), new_mesh.getNNodes()-2);
ASSERT_DOUBLE_EQ (4.0, MathLib::sqrDist(*mesh->getNode(0), *new_mesh.getNode(0))); ASSERT_DOUBLE_EQ (4.0, MathLib::sqrDist(*mesh2->getNode(0), *new_mesh.getNode(0)));
ASSERT_DOUBLE_EQ (0.0, MathLib::sqrDist(*mesh->getNode(0), *new_mesh.getNode(2))); ASSERT_DOUBLE_EQ (0.0, MathLib::sqrDist(*mesh2->getNode(0), *new_mesh.getNode(2)));
ASSERT_DOUBLE_EQ (4.0, MathLib::sqrDist(*mesh->getElement(0)->getNode(0), *new_mesh.getElement(0)->getNode(0))); ASSERT_DOUBLE_EQ (4.0, MathLib::sqrDist(*mesh2->getElement(0)->getNode(0), *new_mesh.getElement(0)->getNode(0)));
ASSERT_DOUBLE_EQ (0.0, MathLib::sqrDist(*mesh->getElement(0)->getNode(0), *new_mesh.getElement(2)->getNode(0))); ASSERT_DOUBLE_EQ (0.0, MathLib::sqrDist(*mesh2->getElement(0)->getNode(0), *new_mesh.getElement(2)->getNode(0)));
} }
/**
* @file TestDuplicate.cpp
* @author Karsten Rink
* @date 2013-03-25
* @brief Tests for Duplicate functions
*
* @copyright
* Copyright (c) 2012-2015, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License.
* See accompanying file LICENSE.txt or
* http://www.opengeosys.org/LICENSE.txt
*/
#include <memory>
#include "gtest/gtest.h"
#include "Mesh.h"
#include "MeshLib/Node.h"
#include "Elements/Element.h"
#include "MeshEditing/RemoveMeshComponents.h"
#include "MeshGenerators/MeshGenerator.h"
#include "MeshQuality/MeshValidation.h"
#include "MathTools.h"
TEST(MeshLib, RemoveNodes)
{
auto mesh = std::unique_ptr<MeshLib::Mesh>{
MeshLib::MeshGenerator::generateLineMesh(1.0, 9)};
std::vector<std::size_t> removed_node_ids;
for (std::size_t i=0; i<5; i++)
removed_node_ids.push_back(i);
auto new_mesh = std::unique_ptr<MeshLib::Mesh>{
MeshLib::removeNodes(*mesh, removed_node_ids, "")};
ASSERT_EQ(5u, new_mesh->getNNodes());
ASSERT_EQ(5u, new_mesh->getNBaseNodes());
ASSERT_EQ(4u, new_mesh->getNElements());
for (std::size_t i=0; i<new_mesh->getNNodes(); i++)
ASSERT_TRUE(*mesh->getNode(5+i) == *new_mesh->getNode(i));
}
TEST(MeshLib, RemoveElements)
{
auto mesh = std::unique_ptr<MeshLib::Mesh>{
MeshLib::MeshGenerator::generateLineMesh(1.0, 9)};
std::vector<std::size_t> removed_ele_ids;
for (std::size_t i=0; i<5; i++)
removed_ele_ids.push_back(i);
auto new_mesh = std::unique_ptr<MeshLib::Mesh>{
MeshLib::removeElements(*mesh, removed_ele_ids, "")};
ASSERT_EQ(5u, new_mesh->getNNodes());
ASSERT_EQ(5u, new_mesh->getNBaseNodes());
ASSERT_EQ(4u, new_mesh->getNElements());
for (std::size_t i=0; i<new_mesh->getNNodes(); i++)
ASSERT_TRUE(*mesh->getNode(5+i) == *new_mesh->getNode(i));
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment