preCICE v3.2.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ExportVTKTest.cpp
Go to the documentation of this file.
1#include <Eigen/Core>
2#include <algorithm>
3#include <filesystem>
4#include <string>
5#include "io/Export.hpp"
6#include "io/ExportVTK.hpp"
7#include "mesh/Mesh.hpp"
10#include "testing/Testing.hpp"
11
12namespace precice::mesh {
13class Edge;
14class Vertex;
15} // namespace precice::mesh
16
18
19BOOST_AUTO_TEST_SUITE(VTKExport)
20
21using namespace precice;
22
23PRECICE_TEST_SETUP(""_on(1_rank).setupIntraComm())
24BOOST_AUTO_TEST_CASE(ExportScalar)
25{
27 mesh::Mesh mesh("Mesh", 2, testing::nextMeshID());
28 mesh.createVertex(Eigen::Vector2d::Zero());
29 mesh.createVertex(Eigen::Vector2d::Constant(1));
30 mesh::PtrData data = mesh.createData("data", 1, 0_dataID);
31 data->setSampleAtTime(0, time::Sample{1, 2}.setZero());
32
33 io::ExportVTK exportCSV{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
34 exportCSV.doExport(0, 0.0);
35 testing::expectFiles("Mesh-io-VTKExport.init.vtk");
36}
37
38PRECICE_TEST_SETUP(""_on(1_rank).setupIntraComm())
39BOOST_AUTO_TEST_CASE(ExportVector)
40{
42 mesh::Mesh mesh("Mesh", 2, testing::nextMeshID());
43 mesh.createVertex(Eigen::Vector2d::Zero());
44 mesh.createVertex(Eigen::Vector2d::Constant(1));
45 mesh::PtrData data = mesh.createData("data", 2, 0_dataID);
46 data->setSampleAtTime(0, time::Sample{2, 2}.setZero());
47
48 io::ExportVTK exportVTK{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
49 exportVTK.doExport(0, 0.0);
50 testing::expectFiles("Mesh-io-VTKExport.init.vtk");
51}
52
53PRECICE_TEST_SETUP(""_on(1_rank).setupIntraComm())
54BOOST_AUTO_TEST_CASE(ExportMissing)
55{
57 mesh::Mesh mesh("Mesh", 2, testing::nextMeshID());
58 mesh.createVertex(Eigen::Vector2d::Zero());
59 mesh.createVertex(Eigen::Vector2d::Constant(1));
60 mesh::PtrData data = mesh.createData("data", 2, 0_dataID);
61 // no sample
62 io::ExportVTK exportVTK{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
63 exportVTK.doExport(0, 0.0);
64 testing::expectFiles("Mesh-io-VTKExport.init.vtk");
65}
66
68BOOST_AUTO_TEST_CASE(ExportDataWithGradient)
69{
71 int dimensions = 2;
72 // Create mesh to map from
73 mesh::Mesh mesh("Mesh", dimensions, testing::nextMeshID());
74 mesh::PtrData dataScalar = mesh.createData("dataScalar", 1, 0_dataID);
75 mesh::PtrData dataVector = mesh.createData("dataVector", 2, 1_dataID);
76 dataScalar->requireDataGradient();
77 dataVector->requireDataGradient();
78 mesh.createVertex(Eigen::Vector2d::Constant(0.0));
79 mesh.createVertex(Eigen::Vector2d::Constant(1.0));
80
81 time::Sample scalar(1, 2, dimensions);
82 scalar.values.setLinSpaced(0, 1);
83 scalar.gradients.setOnes();
84 dataScalar->setSampleAtTime(0, scalar);
85
86 time::Sample vectorial(dimensions, 2, dimensions);
87 vectorial.values.setLinSpaced(0, 1);
88 vectorial.gradients.setOnes();
89 dataVector->setSampleAtTime(0, vectorial);
90
91 io::ExportVTK exportVTK{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
92 exportVTK.doExport(0, 0.0);
93 exportVTK.doExport(1, 1.0);
94 testing::expectFiles("Mesh-io-VTKExport.init.vtk", "Mesh-io-VTKExport.dt1.vtk");
95}
96
98BOOST_AUTO_TEST_CASE(ExportPolygonalMesh)
99{
100 PRECICE_TEST();
101 int dim = 2;
102 mesh::Mesh mesh("Mesh", dim, testing::nextMeshID());
103 mesh::Vertex &v1 = mesh.createVertex(Eigen::Vector2d::Constant(0.0));
104 mesh::Vertex &v2 = mesh.createVertex(Eigen::Vector2d::Constant(1.0));
105 mesh::Vertex &v3 = mesh.createVertex(Eigen::Vector2d{1.0, 0.0});
106
107 mesh.createEdge(v1, v2);
108 mesh.createEdge(v2, v3);
109 mesh.createEdge(v3, v1);
110
111 io::ExportVTK exportVTK{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
112 exportVTK.doExport(0, 0.0);
113 exportVTK.doExport(1, 1.0);
114 testing::expectFiles("Mesh-io-VTKExport.init.vtk", "Mesh-io-VTKExport.dt1.vtk");
115}
116
117PRECICE_TEST_SETUP(1_rank)
118BOOST_AUTO_TEST_CASE(ExportTriangulatedMesh)
119{
120 PRECICE_TEST();
121 int dim = 3;
122 mesh::Mesh mesh("Mesh", dim, testing::nextMeshID());
123 mesh::Vertex &v1 = mesh.createVertex(Eigen::Vector3d::Constant(0.0));
124 mesh::Vertex &v2 = mesh.createVertex(Eigen::Vector3d::Constant(1.0));
125 mesh::Vertex &v3 = mesh.createVertex(Eigen::Vector3d{1.0, 0.0, 0.0});
126
127 mesh::Edge &e1 = mesh.createEdge(v1, v2);
128 mesh::Edge &e2 = mesh.createEdge(v2, v3);
129 mesh::Edge &e3 = mesh.createEdge(v3, v1);
130 mesh.createTriangle(e1, e2, e3);
131
132 io::ExportVTK exportVTK{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
133 exportVTK.doExport(0, 0.0);
134 exportVTK.doExport(1, 1.0);
135 testing::expectFiles("Mesh-io-VTKExport.init.vtk", "Mesh-io-VTKExport.dt1.vtk");
136}
137
138PRECICE_TEST_SETUP(1_rank)
139BOOST_AUTO_TEST_CASE(ExportTetrahedron)
140{
141 PRECICE_TEST();
142 int dim = 3;
143 mesh::Mesh mesh("Mesh", dim, testing::nextMeshID());
144 mesh::Vertex &v1 = mesh.createVertex(Eigen::Vector3d::Constant(0.0));
145 mesh::Vertex &v2 = mesh.createVertex(Eigen::Vector3d{1.0, 0.0, 0.0});
146 mesh::Vertex &v3 = mesh.createVertex(Eigen::Vector3d{0.0, 1.0, 0.0});
147 mesh::Vertex &v4 = mesh.createVertex(Eigen::Vector3d{0.0, 0.0, 1.0});
148
149 mesh.createTetrahedron(v1, v2, v3, v4);
150
151 io::ExportVTK exportVTK{"io-VTKExport", ".", mesh, io::Export::ExportKind::TimeWindows, 1, context.rank, context.size};
152 exportVTK.doExport(0, 0.0);
153 exportVTK.doExport(1, 1.0);
154 testing::expectFiles("Mesh-io-VTKExport.init.vtk", "Mesh-io-VTKExport.dt1.vtk");
155}
156
157BOOST_AUTO_TEST_SUITE_END() // ExportVTK
158BOOST_AUTO_TEST_SUITE_END() // IOTests
BOOST_AUTO_TEST_CASE(ExportDataWithGradient)
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
Writes polygonal, or triangle meshes to vtk files.
Definition ExportVTK.hpp:16
void doExport(int index, double time) final override
Perform writing to VTK file.
Definition ExportVTK.cpp:30
Linear edge of a mesh, defined by two Vertex objects.
Definition Edge.hpp:15
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
PtrData & createData(const std::string &name, int dimension, DataID id, int waveformDegree=time::Time::DEFAULT_WAVEFORM_DEGREE)
Create only data for vertex.
Definition Mesh.cpp:153
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
T data(T... args)
provides Mesh, Data and primitives.
void expectFiles(Args... args)
Definition Testing.hpp:166
Main namespace of the precice library.
Eigen::MatrixXd gradients
The gradients of the data. Use gradients.col(d*i+k) to get the gradient of vertex i,...
Definition Sample.hpp:67
Sample & setZero()
Sets values and gradients to zero.
Definition Sample.hpp:52
Eigen::VectorXd values
Definition Sample.hpp:64