preCICE v3.2.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FilterTest.cpp
Go to the documentation of this file.
1#include <Eigen/Core>
2#include <iosfwd>
3#include <string>
4#include "logging/Logger.hpp"
5#include "mesh/Filter.hpp"
6#include "mesh/Mesh.hpp"
8#include "testing/Testing.hpp"
9
10using namespace precice;
11using namespace Eigen;
12
13BOOST_AUTO_TEST_SUITE(MeshTests)
14BOOST_AUTO_TEST_SUITE(FilterTests)
15
18{
20
21 mesh::Mesh dest("2D dest", 2, testing::nextMeshID());
22 mesh::Mesh src("2D src", 2, testing::nextMeshID());
23
24 auto &v0 = dest.createVertex(Vector2d::Constant(4.0)); // Add dummy data to check additivity
25 auto &v1 = src.createVertex(Vector2d::Constant(3.0));
26 src.createVertex(Vector2d::Constant(2.0));
27
28 v1.tag();
29
30 auto p = [](const mesh::Vertex &v) { return v.isTagged(); };
31
32 mesh::filterMesh(dest, src, p);
33
34 // dest should contain Constante(4) and Constant(3), but not Constant(2)
35 BOOST_TEST(dest.nVertices() == 2);
36 BOOST_TEST(dest.vertex(0) == v0);
37 BOOST_TEST(dest.vertex(1) == v1);
38}
39
42{
44
45 mesh::Mesh dest("3D dest", 3, testing::nextMeshID());
46 mesh::Mesh src("3D src", 3, testing::nextMeshID());
47
48 auto &v0 = dest.createVertex(Vector3d::Constant(4.0)); // Add dummy data to check additivity
49 auto &v1 = src.createVertex(Vector3d::Constant(3.0));
50 src.createVertex(Vector3d::Constant(2.0));
51
52 v1.tag();
53
54 auto p = [](const mesh::Vertex &v) { return v.isTagged(); };
55
56 mesh::filterMesh(dest, src, p);
57
58 // dest should contain Constante(4) and Constant(3), but not Constant(2)
59 BOOST_TEST(dest.nVertices() == 2);
60 BOOST_TEST(dest.vertex(0) == v0);
61 BOOST_TEST(dest.vertex(1) == v1);
62}
63
66{
68
69 mesh::Mesh dest("3D dest", 3, testing::nextMeshID());
70 mesh::Mesh src("3D src", 3, testing::nextMeshID());
71
72 auto &v0 = dest.createVertex(Vector3d::Constant(4.0)); // Add dummy data to check additivity
73 auto &v1 = src.createVertex(Vector3d::Constant(0.0));
74 auto &v2 = src.createVertex(Vector3d::Constant(1.0));
75 auto &v3 = src.createVertex(Vector3d::Constant(2.0));
76
77 auto &e0 = src.createEdge(v1, v2);
78 src.createEdge(v2, v3);
79
80 v1.tag();
81 v2.tag();
82
83 auto p = [](const mesh::Vertex &v) { return v.isTagged(); };
84
85 mesh::filterMesh(dest, src, p);
86
87 BOOST_TEST(dest.nVertices() == 3);
88 BOOST_TEST(dest.vertex(0) == v0);
89 BOOST_TEST(dest.vertex(1) == v1);
90 BOOST_TEST(dest.vertex(2) == v2);
91
92 // Only e0 should survive
93 BOOST_TEST(dest.edges().size() == 1);
94 BOOST_TEST(dest.edges()[0] == e0);
95}
96
99{
100 PRECICE_TEST();
101
102 mesh::Mesh dest("3D dest", 3, testing::nextMeshID());
103 mesh::Mesh src("3D src", 3, testing::nextMeshID());
104
105 dest.createVertex(Vector3d::Constant(4.0)); // Add dummy data to check additivity
106 auto &v1 = src.createVertex(Vector3d::Constant(0.0));
107 auto &v2 = src.createVertex(Vector3d{1.0, 0.0, 0.0});
108 auto &v3 = src.createVertex(Vector3d{0.0, 1.0, 0.0});
109 auto &v4 = src.createVertex(Vector3d{0.0, 0.0, 1.0});
110
111 auto &t1 = src.createTriangle(v1, v2, v3);
112 src.createTriangle(v2, v3, v4);
113
114 v1.tag();
115 v2.tag();
116 v3.tag();
117
118 auto p = [](const mesh::Vertex &v) { return v.isTagged(); };
119
120 mesh::filterMesh(dest, src, p);
121
122 BOOST_TEST(dest.nVertices() == 4);
123
124 // Only t1 should survive (because v4 not passed)
125 BOOST_TEST(dest.triangles().size() == 1);
126 BOOST_TEST(dest.triangles()[0] == t1);
127}
128
129PRECICE_TEST_SETUP(1_rank)
131{
132 PRECICE_TEST();
133
134 mesh::Mesh dest("3D dest", 3, testing::nextMeshID());
135 mesh::Mesh src("3D src", 3, testing::nextMeshID());
136
137 dest.createVertex(Vector3d::Constant(4.0)); // Add dummy data to check additivity
138 auto &v1 = src.createVertex(Vector3d::Constant(0.0));
139 auto &v2 = src.createVertex(Vector3d{1.0, 0.0, 0.0});
140 auto &v3 = src.createVertex(Vector3d{0.0, 1.0, 0.0});
141 auto &v4 = src.createVertex(Vector3d{0.0, 0.0, 1.0});
142 auto &v5 = src.createVertex(Vector3d{0.0, 2.0, 1.0});
143
144 auto &t1 = src.createTetrahedron(v1, v2, v3, v4);
145 src.createTetrahedron(v2, v3, v4, v5);
146
147 v1.tag();
148 v2.tag();
149 v3.tag();
150 v4.tag();
151
152 auto p = [](const mesh::Vertex &v) { return v.isTagged(); };
153
154 mesh::filterMesh(dest, src, p);
155
156 BOOST_TEST(dest.nVertices() == 5);
157
158 // Only t1 should survive (because v5 not passed)
159 BOOST_TEST(dest.tetrahedra().size() == 1);
160 BOOST_TEST(dest.tetrahedra()[0] == t1);
161}
162
BOOST_AUTO_TEST_CASE(Vertices2D)
BOOST_AUTO_TEST_SUITE(PreProcess)
BOOST_AUTO_TEST_SUITE_END()
#define PRECICE_TEST()
Definition Testing.hpp:39
#define PRECICE_TEST_SETUP(...)
Creates and attaches a TestSetup to a Boost test case.
Definition Testing.hpp:29
Container and creator for meshes.
Definition Mesh.hpp:38
Triangle & createTriangle(Edge &edgeOne, Edge &edgeTwo, Edge &edgeThree)
Creates and initializes a Triangle object.
Definition Mesh.cpp:121
Tetrahedron & createTetrahedron(Vertex &vertexOne, Vertex &vertexTwo, Vertex &vertexThree, Vertex &vertexFour)
Creates and initializes a Tetrahedron object.
Definition Mesh.cpp:143
Edge & createEdge(Vertex &vertexOne, Vertex &vertexTwo)
Creates and initializes an Edge object.
Definition Mesh.cpp:113
Vertex & createVertex(const Eigen::Ref< const Eigen::VectorXd > &coords)
Creates and initializes a Vertex object.
Definition Mesh.cpp:105
Vertex of a mesh.
Definition Vertex.hpp:16
void filterMesh(Mesh &destination, const Mesh &source, UnaryPredicate p)
Definition Filter.hpp:16
Main namespace of the precice library.