preCICE v3.2.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MappingConfigurationTest.cpp
Go to the documentation of this file.
1#include <memory>
2#include <string>
3#include <vector>
4#include "logging/Logger.hpp"
5#include "mapping/Mapping.hpp"
11#include "testing/Testing.hpp"
12#include "xml/XMLTag.hpp"
13
14using namespace precice;
15using namespace precice::mapping;
16
17BOOST_AUTO_TEST_SUITE(MappingTests)
18BOOST_AUTO_TEST_SUITE(Configuration)
19
22{
24
25 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
26 std::string file(pathToTests + "mapping-config.xml");
27 using xml::XMLTag;
28 XMLTag tag = xml::getRootTag();
30 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
31 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
33
34 BOOST_TEST(meshConfig->meshes().size() == 3);
35 BOOST_TEST(mappingConfig.mappings().size() == 3);
36 BOOST_TEST(mappingConfig.mappings().at(0).fromMesh == meshConfig->meshes().at(0));
37 BOOST_TEST(mappingConfig.mappings().at(0).toMesh == meshConfig->meshes().at(2));
38 BOOST_TEST(mappingConfig.mappings().at(0).direction == MappingConfiguration::WRITE);
39
40 BOOST_TEST(mappingConfig.mappings().at(1).fromMesh == meshConfig->meshes().at(2));
41 BOOST_TEST(mappingConfig.mappings().at(1).toMesh == meshConfig->meshes().at(1));
42 BOOST_TEST(mappingConfig.mappings().at(1).direction == MappingConfiguration::READ);
43
44 BOOST_TEST(mappingConfig.mappings().at(2).fromMesh == meshConfig->meshes().at(1));
45 BOOST_TEST(mappingConfig.mappings().at(2).toMesh == meshConfig->meshes().at(0));
46 BOOST_TEST(mappingConfig.mappings().at(2).direction == MappingConfiguration::WRITE);
47}
48
50BOOST_AUTO_TEST_CASE(RBFDirectConfiguration)
51{
53
54 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
55 std::string file(pathToTests + "mapping-rbf-direct-config.xml");
56 using xml::XMLTag;
57 XMLTag tag = xml::getRootTag();
59 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
60 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
62
63 BOOST_TEST(meshConfig->meshes().size() == 13);
64 BOOST_TEST(mappingConfig.mappings().size() == 12);
65 for (unsigned int i = 0; i < mappingConfig.mappings().size(); ++i) {
66 BOOST_TEST(mappingConfig.mappings().at(i).mapping != nullptr);
67 BOOST_TEST(mappingConfig.mappings().at(i).fromMesh == meshConfig->meshes().at(i + 1));
68 BOOST_TEST(mappingConfig.mappings().at(i).toMesh == meshConfig->meshes().at(i));
69 BOOST_TEST(mappingConfig.mappings().at(i).direction == MappingConfiguration::READ);
70 BOOST_TEST(mappingConfig.mappings().at(i).requiresBasisFunction == true);
71 BOOST_TEST(mappingConfig.mappings().at(i).configuredWithAliasTag == false);
72 }
73 {
74 // last configured RBF
75 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::GlobalDirect;
76 BOOST_TEST(solverSelection);
77 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::OFF;
78 BOOST_TEST(poly);
79 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[0] == true);
80 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[1] == false);
81 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[2] == true);
82 BOOST_TEST(mappingConfig.rbfConfig().solverRtol == 1e-9);
83 }
84}
85
87BOOST_AUTO_TEST_CASE(RBFPUMConfiguration)
88{
90
91 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
92 std::string file(pathToTests + "mapping-rbf-pum-direct-config.xml");
93 using xml::XMLTag;
94 XMLTag tag = xml::getRootTag();
96 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
97 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
99
100 BOOST_TEST(meshConfig->meshes().size() == 13);
101 BOOST_TEST(mappingConfig.mappings().size() == 12);
102 for (unsigned int i = 0; i < mappingConfig.mappings().size(); ++i) {
103 BOOST_TEST(mappingConfig.mappings().at(i).mapping != nullptr);
104 BOOST_TEST(mappingConfig.mappings().at(i).fromMesh == meshConfig->meshes().at(i + 1));
105 BOOST_TEST(mappingConfig.mappings().at(i).toMesh == meshConfig->meshes().at(i));
106 BOOST_TEST(mappingConfig.mappings().at(i).direction == MappingConfiguration::READ);
107 BOOST_TEST(mappingConfig.mappings().at(i).requiresBasisFunction == true);
108 BOOST_TEST(mappingConfig.mappings().at(i).configuredWithAliasTag == false);
109 }
110 {
111 // last configured RBF
112 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::PUMDirect;
113 BOOST_TEST(solverSelection);
114 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::OFF;
115 BOOST_TEST(poly);
116 BOOST_TEST(mappingConfig.rbfConfig().solverRtol == 1e-9);
117 BOOST_TEST(mappingConfig.rbfConfig().verticesPerCluster == 10);
118 BOOST_TEST(mappingConfig.rbfConfig().relativeOverlap == 0.4);
119 BOOST_TEST(mappingConfig.rbfConfig().projectToInput == true);
120 }
121}
122
123#ifndef PRECICE_NO_PETSC
124
125PRECICE_TEST_SETUP(1_rank, Require::PETSc)
126BOOST_AUTO_TEST_CASE(RBFIterativeConfiguration)
127{
128 PRECICE_TEST();
129
130 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
131 std::string file(pathToTests + "mapping-rbf-iterative-config.xml");
132 using xml::XMLTag;
133 XMLTag tag = xml::getRootTag();
135 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
136 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
138
139 BOOST_TEST(meshConfig->meshes().size() == 13);
140 BOOST_TEST(mappingConfig.mappings().size() == 12);
141 for (unsigned int i = 0; i < mappingConfig.mappings().size(); ++i) {
142 BOOST_TEST(mappingConfig.mappings().at(i).mapping != nullptr);
143 BOOST_TEST(mappingConfig.mappings().at(i).fromMesh == meshConfig->meshes().at(i + 1));
144 BOOST_TEST(mappingConfig.mappings().at(i).toMesh == meshConfig->meshes().at(i));
145 BOOST_TEST(mappingConfig.mappings().at(i).direction == MappingConfiguration::WRITE);
146 BOOST_TEST(mappingConfig.mappings().at(i).requiresBasisFunction == true);
147 BOOST_TEST(mappingConfig.mappings().at(i).configuredWithAliasTag == false);
148 }
149 {
150 // last configured RBF
151 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::GlobalIterative;
152 BOOST_TEST(solverSelection);
153 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::OFF;
154 BOOST_TEST(poly);
155 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[0] == true);
156 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[1] == false);
157 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[2] == true);
158 BOOST_TEST(mappingConfig.rbfConfig().solverRtol == 1e-6);
159 }
160}
161#endif
162
163PRECICE_TEST_SETUP(1_rank, Require::PETSc)
164BOOST_AUTO_TEST_CASE(RBFAliasConfiguration)
165{
166 PRECICE_TEST();
167
168 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
169 std::string file(pathToTests + "mapping-rbf-alias-config.xml");
170 using xml::XMLTag;
171 XMLTag tag = xml::getRootTag();
173 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
174 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
176
177 BOOST_TEST(meshConfig->meshes().size() == 3);
178 BOOST_TEST(mappingConfig.mappings().size() == 2);
179 BOOST_TEST(mappingConfig.mappings().at(0).mapping != nullptr);
180 BOOST_TEST(mappingConfig.mappings().at(0).fromMesh == meshConfig->meshes().at(0));
181 BOOST_TEST(mappingConfig.mappings().at(0).toMesh == meshConfig->meshes().at(2));
182 BOOST_TEST(mappingConfig.mappings().at(0).direction == MappingConfiguration::WRITE);
183 BOOST_TEST(mappingConfig.mappings().at(0).requiresBasisFunction == true);
184 BOOST_TEST(mappingConfig.mappings().at(0).configuredWithAliasTag == true);
185
186 // The second mapping
187 BOOST_TEST(mappingConfig.mappings().at(1).mapping != nullptr);
188 BOOST_TEST(mappingConfig.mappings().at(1).fromMesh == meshConfig->meshes().at(2));
189 BOOST_TEST(mappingConfig.mappings().at(1).toMesh == meshConfig->meshes().at(1));
190 BOOST_TEST(mappingConfig.mappings().at(1).direction == MappingConfiguration::READ);
191 BOOST_TEST(mappingConfig.mappings().at(1).requiresBasisFunction == true);
192 BOOST_TEST(mappingConfig.mappings().at(1).configuredWithAliasTag == true);
193 {
194 // last configured RBF
195 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::PUMDirect;
196 BOOST_TEST(solverSelection);
197 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::SEPARATE;
198 BOOST_TEST(poly);
199 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[0] == false);
200 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[1] == false);
201 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[2] == false);
202 BOOST_TEST(mappingConfig.rbfConfig().verticesPerCluster == 100);
203 BOOST_TEST(mappingConfig.rbfConfig().relativeOverlap == 0.3);
204 BOOST_TEST(mappingConfig.rbfConfig().projectToInput == true);
205 }
206}
207
208#ifndef PRECICE_NO_GINKGO
209
210#ifdef PRECICE_WITH_CUDA
211// This test mostly runs the configuration path, but it does not test the actual
212// setting in the Ginkgo solver class (being a cuda executor), since the mapping
213// configuration does not expose this information
214PRECICE_TEST_SETUP(1_rank)
215BOOST_AUTO_TEST_CASE(RBFGinkgoCudaConfiguration)
216{
217 PRECICE_TEST();
218
219 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
220 std::string file(pathToTests + "mapping-rbf-cuda-config.xml");
221 using xml::XMLTag;
222 XMLTag tag = xml::getRootTag();
224 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
225 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
227
228 BOOST_TEST(meshConfig->meshes().size() == 3);
229 BOOST_TEST(mappingConfig.mappings().size() == 2);
230 for (unsigned int i = 0; i < mappingConfig.mappings().size(); ++i) {
231 BOOST_TEST(mappingConfig.mappings().at(i).mapping != nullptr);
232 BOOST_TEST(mappingConfig.mappings().at(i).fromMesh == meshConfig->meshes().at(i + 1));
233 BOOST_TEST(mappingConfig.mappings().at(i).toMesh == meshConfig->meshes().at(i));
234 BOOST_TEST(mappingConfig.mappings().at(i).direction == MappingConfiguration::READ);
235 BOOST_TEST(mappingConfig.mappings().at(i).requiresBasisFunction == true);
236 BOOST_TEST(mappingConfig.mappings().at(i).configuredWithAliasTag == false);
237 }
238 {
239 // last configured RBF
240 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::GlobalIterative;
241 BOOST_TEST(solverSelection);
242 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::OFF;
243 BOOST_TEST(poly);
244 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[0] == true);
245 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[1] == false);
246 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[2] == true);
247 BOOST_TEST(mappingConfig.rbfConfig().solverRtol == 1e-6);
248 }
249}
250#endif
251
252#ifdef PRECICE_WITH_HIP
253// This test mostly runs the configuration path, but it does not test the actual
254// setting in the Ginkgo solver class (being a hip executor), since the mapping
255// configuration does not expose this information
256PRECICE_TEST_SETUP(1_rank)
257BOOST_AUTO_TEST_CASE(RBFGinkgoHipConfiguration)
258{
259 PRECICE_TEST();
260
261 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
262 std::string file(pathToTests + "mapping-rbf-hip-config.xml");
263 using xml::XMLTag;
264 XMLTag tag = xml::getRootTag();
266 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
267 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
269
270 BOOST_TEST(meshConfig->meshes().size() == 3);
271 BOOST_TEST(mappingConfig.mappings().size() == 2);
272 for (unsigned int i = 0; i < mappingConfig.mappings().size(); ++i) {
273 BOOST_TEST(mappingConfig.mappings().at(i).mapping != nullptr);
274 BOOST_TEST(mappingConfig.mappings().at(i).fromMesh == meshConfig->meshes().at(i + 1));
275 BOOST_TEST(mappingConfig.mappings().at(i).toMesh == meshConfig->meshes().at(i));
276 BOOST_TEST(mappingConfig.mappings().at(i).direction == MappingConfiguration::READ);
277 BOOST_TEST(mappingConfig.mappings().at(i).requiresBasisFunction == true);
278 BOOST_TEST(mappingConfig.mappings().at(i).configuredWithAliasTag == false);
279 }
280 {
281 // last configured RBF
282 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::GlobalIterative;
283 BOOST_TEST(solverSelection);
284 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::OFF;
285 BOOST_TEST(poly);
286 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[0] == true);
287 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[1] == false);
288 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[2] == true);
289 BOOST_TEST(mappingConfig.rbfConfig().solverRtol == 1e-6);
290 }
291}
292#endif
293
294#ifdef PRECICE_WITH_OPENMP
295// This test mostly runs the configuration path, but it does not test the actual
296// setting in the Ginkgo solver class (being an OpenMP executor), since the mapping
297// configuration does not expose this information
298PRECICE_TEST_SETUP(1_rank)
299BOOST_AUTO_TEST_CASE(RBFGinkgoOMPConfiguration)
300{
301 PRECICE_TEST();
302
303 std::string pathToTests = testing::getPathToSources() + "/mapping/tests/";
304 std::string file(pathToTests + "mapping-rbf-omp-config.xml");
305 using xml::XMLTag;
306 XMLTag tag = xml::getRootTag();
308 mesh::PtrMeshConfiguration meshConfig(new mesh::MeshConfiguration(tag, dataConfig));
309 mapping::MappingConfiguration mappingConfig(tag, meshConfig);
311
312 BOOST_TEST(meshConfig->meshes().size() == 2);
313 BOOST_TEST(mappingConfig.mappings().size() == 1);
314 for (unsigned int i = 0; i < mappingConfig.mappings().size(); ++i) {
315 BOOST_TEST(mappingConfig.mappings().at(i).mapping != nullptr);
316 BOOST_TEST(mappingConfig.mappings().at(i).fromMesh == meshConfig->meshes().at(i + 1));
317 BOOST_TEST(mappingConfig.mappings().at(i).toMesh == meshConfig->meshes().at(i));
318 BOOST_TEST(mappingConfig.mappings().at(i).direction == MappingConfiguration::WRITE);
319 BOOST_TEST(mappingConfig.mappings().at(i).requiresBasisFunction == true);
320 BOOST_TEST(mappingConfig.mappings().at(i).configuredWithAliasTag == false);
321 }
322 {
323 // last configured RBF
324 bool solverSelection = mappingConfig.rbfConfig().solver == MappingConfiguration::RBFConfiguration::SystemSolver::GlobalIterative;
325 BOOST_TEST(solverSelection);
326 bool poly = mappingConfig.rbfConfig().polynomial == Polynomial::OFF;
327 BOOST_TEST(poly);
328 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[0] == true);
329 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[1] == false);
330 BOOST_TEST(mappingConfig.rbfConfig().deadAxis[2] == true);
331 BOOST_TEST(mappingConfig.rbfConfig().solverRtol == 1e-6);
332 }
333}
334#endif
335#endif
336
BOOST_AUTO_TEST_CASE(Configuration)
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
Performs XML configuration and holds configured mappings.
const std::vector< ConfiguredMapping > & mappings()
Returns all configured mappings.
const RBFConfiguration & rbfConfig() const
Performs and provides configuration for Data objects from XML files.
Represents an XML tag to be configured automatically.
Definition XMLTag.hpp:28
contains data mapping from points to meshes.
std::string getPathToSources()
Returns the base path to the sources.
Definition Testing.cpp:33
XMLTag getRootTag()
Returns an empty root tag with name "configuration".
Definition XMLTag.cpp:278
std::string configure(XMLTag &tag, const precice::xml::ConfigurationContext &context, std::string_view configurationFilename)
Configures the given configuration from file configurationFilename.
Definition XMLTag.cpp:284
Main namespace of the precice library.
T size(T... args)
Tightly coupled to the parameters of Participant()
Definition XMLTag.hpp:21