3#define DOCTEST_CONFIG_IMPLEMENT
5#include "doctest_utils.h"
11DOCTEST_TEST_CASE(
"BLConductanceModel check blc values") {
18 std::vector<uint> UUID_1;
19 UUID_1.push_back(
context.addPatch());
20 UUID_1.push_back(
context.addPatch());
21 UUID_1.push_back(
context.addPatch());
22 UUID_1.push_back(
context.addPatch());
24 context.setPrimitiveData(UUID_1,
"air_temperature", Ta);
25 context.setPrimitiveData(UUID_1,
"temperature", TL);
26 context.setPrimitiveData(UUID_1,
"wind_speed", U);
30 blc.disableMessages();
32 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(UUID_1.at(0),
"Pohlhausen"));
33 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(UUID_1.at(1),
"InclinedPlate"));
34 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(UUID_1.at(2),
"Sphere"));
35 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(UUID_1.at(3),
"Ground"));
38 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(UUID_1.at(3),
"InvalidModel"));
41 DOCTEST_CHECK_NOTHROW(blc.run());
43 std::vector<float> gH(UUID_1.size());
45 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUID_1.at(0),
"boundarylayer_conductance"));
46 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUID_1.at(1),
"boundarylayer_conductance"));
47 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUID_1.at(2),
"boundarylayer_conductance"));
48 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUID_1.at(3),
"boundarylayer_conductance"));
50 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID_1.at(0),
"boundarylayer_conductance", gH.at(0)));
51 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID_1.at(1),
"boundarylayer_conductance", gH.at(1)));
52 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID_1.at(2),
"boundarylayer_conductance", gH.at(2)));
53 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID_1.at(3),
"boundarylayer_conductance", gH.at(3)));
55 DOCTEST_CHECK(gH.at(0) == doctest::Approx(0.20914112f).epsilon(err_tol));
56 DOCTEST_CHECK(gH.at(1) == doctest::Approx(0.135347f).epsilon(err_tol));
57 DOCTEST_CHECK(gH.at(2) == doctest::Approx(0.087149f).epsilon(err_tol));
58 DOCTEST_CHECK(gH.at(3) == doctest::Approx(0.465472f).epsilon(err_tol));
61DOCTEST_TEST_CASE(
"Default values handling") {
66 blc.disableMessages();
67 blc.setBoundaryLayerModel(UUID_default,
"Pohlhausen");
70 float default_gH = -1.f;
71 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUID_default,
"boundarylayer_conductance"));
72 context.getPrimitiveData(UUID_default,
"boundarylayer_conductance", default_gH);
73 DOCTEST_CHECK(default_gH > 0);
76DOCTEST_TEST_CASE(
"Single-sided primitive handling") {
83 context.setPrimitiveData(UUID,
"air_temperature", Ta);
84 context.setPrimitiveData(UUID,
"temperature", TL);
85 context.setPrimitiveData(UUID,
"wind_speed", U);
86 context.setPrimitiveData(UUID,
"twosided_flag", 0u);
89 blc.disableMessages();
90 blc.setBoundaryLayerModel(UUID,
"Pohlhausen");
94 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUID,
"boundarylayer_conductance"));
95 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
96 DOCTEST_CHECK(gH == doctest::Approx(0.104571f).epsilon(err_tol));
99DOCTEST_TEST_CASE(
"Message flag tests") {
103 DOCTEST_CHECK_NOTHROW(blc.enableMessages());
105 DOCTEST_CHECK_NOTHROW(blc.disableMessages());
108DOCTEST_TEST_CASE(
"setBoundaryLayerModel for all primitives") {
114 blc.disableMessages();
116 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(
"Pohlhausen"));
118 context.setPrimitiveData({u1, u2},
"air_temperature", 290.f);
119 context.setPrimitiveData({u1, u2},
"temperature", 300.f);
120 context.setPrimitiveData({u1, u2},
"wind_speed", 0.6f);
125 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(u1,
"boundarylayer_conductance", gH1));
126 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(u2,
"boundarylayer_conductance", gH2));
127 DOCTEST_CHECK(gH1 == doctest::Approx(0.20914112f).epsilon(err_tol));
128 DOCTEST_CHECK(gH2 == doctest::Approx(0.20914112f).epsilon(err_tol));
130 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(
"InclinedPlate"));
132 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(u1,
"boundarylayer_conductance", gH1));
133 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(u2,
"boundarylayer_conductance", gH2));
134 DOCTEST_CHECK(gH1 == doctest::Approx(0.135347f).epsilon(err_tol));
135 DOCTEST_CHECK(gH2 == doctest::Approx(0.135347f).epsilon(err_tol));
138 blc.enableMessages();
139 DOCTEST_CHECK_NOTHROW(blc.setBoundaryLayerModel(
"InvalidModel"));
143DOCTEST_TEST_CASE(
"Subset run") {
149 std::vector<uint> UUIDs;
150 UUIDs.push_back(
context.addPatch());
151 UUIDs.push_back(
context.addPatch());
152 UUIDs.push_back(
context.addPatch());
154 context.setPrimitiveData(UUIDs,
"air_temperature", Ta);
155 context.setPrimitiveData(UUIDs,
"temperature", TL);
156 context.setPrimitiveData(UUIDs,
"wind_speed", U);
159 blc.disableMessages();
161 blc.setBoundaryLayerModel(UUIDs[0],
"Pohlhausen");
162 blc.setBoundaryLayerModel(UUIDs[1],
"InclinedPlate");
163 blc.setBoundaryLayerModel(UUIDs[2],
"Sphere");
165 std::vector<uint> subsetUUIDs = {UUIDs[0], UUIDs[2]};
166 DOCTEST_CHECK_NOTHROW(blc.run(subsetUUIDs));
168 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUIDs[0],
"boundarylayer_conductance"));
169 DOCTEST_CHECK(!
context.doesPrimitiveDataExist(UUIDs[1],
"boundarylayer_conductance"));
170 DOCTEST_CHECK(
context.doesPrimitiveDataExist(UUIDs[2],
"boundarylayer_conductance"));
173 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUIDs[0],
"boundarylayer_conductance", gH0));
174 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUIDs[2],
"boundarylayer_conductance", gH2));
176 DOCTEST_CHECK(gH0 == doctest::Approx(0.20914112f).epsilon(err_tol));
177 DOCTEST_CHECK(gH2 == doctest::Approx(0.087149f).epsilon(err_tol));
180DOCTEST_TEST_CASE(
"Missing parameters and zero inputs") {
183 blc.disableMessages();
186 context.setPrimitiveData(UUID,
"atmospheric_pressure", 100000.f);
187 context.setPrimitiveData(UUID,
"object_length", 0.1f);
188 context.setPrimitiveData(UUID,
"inclination", 0.5f);
191 DOCTEST_CHECK_NOTHROW(blc.run());
193 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
194 DOCTEST_CHECK(gH > 0);
197 context.setPrimitiveData(UUID,
"object_length", 0.f);
198 DOCTEST_CHECK_NOTHROW(blc.run());
199 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
200 DOCTEST_CHECK(gH != 0.f);
203 context.setPrimitiveData(UUID,
"object_length", 0.1f);
204 context.setPrimitiveData(UUID,
"wind_speed", 0.f);
206 blc.setBoundaryLayerModel(UUID,
"Pohlhausen");
207 DOCTEST_CHECK_NOTHROW(blc.run());
208 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
209 DOCTEST_CHECK(gH == 0.f);
211 blc.setBoundaryLayerModel(UUID,
"InclinedPlate");
212 DOCTEST_CHECK_NOTHROW(blc.run());
213 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
214 DOCTEST_CHECK(gH > 0);
216 blc.setBoundaryLayerModel(UUID,
"Sphere");
217 DOCTEST_CHECK_NOTHROW(blc.run());
218 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
219 DOCTEST_CHECK(gH > 0.f);
221 blc.setBoundaryLayerModel(UUID,
"Ground");
222 DOCTEST_CHECK_NOTHROW(blc.run());
223 DOCTEST_CHECK_NOTHROW(
context.getPrimitiveData(UUID,
"boundarylayer_conductance", gH));
224 DOCTEST_CHECK(gH > 0.f);
228 return helios::runDoctestWithValidation(argc, argv);