Skip to content

Commit a9f8bdc

Browse files
committed
Change some ASSERT to PARSE_ERROR for cyl_wedge
Better errors from input files.
1 parent 8f4dbda commit a9f8bdc

File tree

3 files changed

+110
-9
lines changed

3 files changed

+110
-9
lines changed

src/Domain/DomainHelpers.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,15 +1069,20 @@ cyl_wedge_coord_map_surrounding_blocks(
10691069
using Wedge2D = domain::CoordinateMaps::Wedge<2>;
10701070
using Wedge3DPrism =
10711071
domain::CoordinateMaps::ProductOf2Maps<Wedge2D, Interval>;
1072-
ASSERT(radial_distribution.size() == 1 + radial_partitioning.size(),
1073-
"Specify a radial distribution for every cylindrical shell. You "
1074-
"specified "
1075-
<< radial_distribution.size() << " items, but the domain has "
1076-
<< 1 + radial_partitioning.size() << " shells.");
1077-
ASSERT(radial_distribution.front() ==
1078-
domain::CoordinateMaps::Distribution::Linear,
1079-
"The innermost shell must have a 'Linear' radial distribution because "
1080-
"it changes in circularity.");
1072+
if (radial_distribution.size() != 1 + radial_partitioning.size()) {
1073+
PARSE_ERROR(
1074+
options_context,
1075+
"Specify a radial distribution for every cylindrical shell. You "
1076+
"specified "
1077+
<< radial_distribution.size() << " items, but the domain has "
1078+
<< 1 + radial_partitioning.size() << " shells.");
1079+
}
1080+
if (radial_distribution.front() !=
1081+
domain::CoordinateMaps::Distribution::Linear) {
1082+
PARSE_ERROR(options_context,
1083+
"The innermost shell must have a 'Linear' radial distribution "
1084+
"because it changes in circularity.");
1085+
}
10811086
std::vector<Wedge3DPrism> maps{};
10821087
double temp_inner_circularity{};
10831088
double temp_inner_radius{};

tests/Unit/Domain/Creators/Test_Cylinder.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,6 +1254,48 @@ void test_cylinder_wedge_parse_errors() {
12541254
Catch::Matchers::ContainsSubstring(
12551255
"The radius of the outer surface must be greater than the radius of "
12561256
"the inner surface."));
1257+
{
1258+
const std::vector<double> radial_partitioning_more{1.5};
1259+
const std::vector<double> partitioning_in_z_more{};
1260+
const std::vector<domain::CoordinateMaps::Distribution>
1261+
radial_distribution_missing{
1262+
domain::CoordinateMaps::Distribution::Linear};
1263+
const std::vector<domain::CoordinateMaps::Distribution>
1264+
distribution_in_z_more{domain::CoordinateMaps::Distribution::Linear};
1265+
CHECK_THROWS_WITH(
1266+
[&]() {
1267+
auto invalid_cylinder = creators::Cylinder(
1268+
1.0, 2.0, lower_z_bound, upper_z_bound, false, refinement_level,
1269+
grid_points, false, radial_partitioning_more,
1270+
partitioning_in_z_more, radial_distribution_missing,
1271+
distribution_in_z_more, Options::Context{false, {}, 1, 1});
1272+
invalid_cylinder.create_domain();
1273+
}(),
1274+
Catch::Matchers::ContainsSubstring(
1275+
"Specify a 'RadialDistribution' for every cylindrical shell."));
1276+
}
1277+
{
1278+
const std::vector<double> radial_partitioning_more{1.5};
1279+
const std::vector<double> partitioning_in_z_more{};
1280+
const std::vector<domain::CoordinateMaps::Distribution>
1281+
radial_distribution_non_linear{
1282+
domain::CoordinateMaps::Distribution::Logarithmic,
1283+
domain::CoordinateMaps::Distribution::Linear};
1284+
const std::vector<domain::CoordinateMaps::Distribution>
1285+
distribution_in_z_more{domain::CoordinateMaps::Distribution::Linear};
1286+
CHECK_THROWS_WITH(
1287+
[&]() {
1288+
auto invalid_cylinder = creators::Cylinder(
1289+
1.0, 2.0, lower_z_bound, upper_z_bound, false, refinement_level,
1290+
grid_points, false, radial_partitioning_more,
1291+
partitioning_in_z_more, radial_distribution_non_linear,
1292+
distribution_in_z_more, Options::Context{false, {}, 1, 1});
1293+
invalid_cylinder.create_domain();
1294+
}(),
1295+
Catch::Matchers::ContainsSubstring(
1296+
"The 'RadialDistribution' must be 'Linear' for the innermost "
1297+
"shell because it changes in circularity."));
1298+
}
12571299
}
12581300

12591301
} // namespace

tests/Unit/Domain/Test_DomainHelpers.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "Domain/CoordinateMaps/ProductMaps.hpp"
2424
#include "Domain/CoordinateMaps/ProductMaps.tpp"
2525
#include "Domain/CoordinateMaps/Wedge.hpp"
26+
#include "Domain/CoordinateMaps/Interval.hpp"
2627
#include "Domain/Domain.hpp"
2728
#include "Domain/DomainHelpers.hpp"
2829
#include "Domain/Structure/BlockNeighbors.hpp"
@@ -337,6 +338,57 @@ void test_wedge_errors() {
337338
"ShellWedges::All."));
338339
}
339340

341+
void test_cyl_wedge_surrounding_blocks_radial_distribution_size_error() {
342+
INFO("cyl wedge radial distribution size parse error");
343+
const Options::Context context{false, "CylWedge.CylindricalShell.DistSize"};
344+
const double inner_radius = 0.4;
345+
const double outer_radius = 1.2;
346+
const double lower_z_bound = -0.8;
347+
const double upper_z_bound = 0.8;
348+
const std::vector<double> radial_partitioning{0.9};
349+
const std::vector<double> partitioning_in_z{};
350+
const std::vector<domain::CoordinateMaps::Distribution> radial_distribution{
351+
domain::CoordinateMaps::Distribution::Linear};
352+
const std::vector<domain::CoordinateMaps::Distribution> distribution_in_z{
353+
domain::CoordinateMaps::Distribution::Linear};
354+
CHECK_THROWS_WITH(
355+
([&]() {
356+
static_cast<void>(cyl_wedge_coord_map_surrounding_blocks(
357+
inner_radius, outer_radius, lower_z_bound, upper_z_bound, false,
358+
context, 0.0, radial_partitioning, partitioning_in_z,
359+
radial_distribution, distribution_in_z,
360+
CylindricalDomainParityFlip::none));
361+
}()),
362+
Catch::Matchers::ContainsSubstring(
363+
"Specify a radial distribution for every cylindrical shell"));
364+
}
365+
366+
void test_cyl_wedge_surrounding_blocks_radial_distribution_linear_error() {
367+
INFO("cyl wedge radial distribution linear parse error");
368+
const Options::Context context{false, "CylWedge.CylindricalShell.Linear"};
369+
const double inner_radius = 0.4;
370+
const double outer_radius = 1.2;
371+
const double lower_z_bound = -0.8;
372+
const double upper_z_bound = 0.8;
373+
const std::vector<double> radial_partitioning{0.9};
374+
const std::vector<double> partitioning_in_z{};
375+
const std::vector<domain::CoordinateMaps::Distribution> radial_distribution{
376+
domain::CoordinateMaps::Distribution::Logarithmic,
377+
domain::CoordinateMaps::Distribution::Linear};
378+
const std::vector<domain::CoordinateMaps::Distribution> distribution_in_z{
379+
domain::CoordinateMaps::Distribution::Linear};
380+
CHECK_THROWS_WITH(
381+
([&]() {
382+
static_cast<void>(cyl_wedge_coord_map_surrounding_blocks(
383+
inner_radius, outer_radius, lower_z_bound, upper_z_bound, false,
384+
context, 0.0, radial_partitioning, partitioning_in_z,
385+
radial_distribution, distribution_in_z,
386+
CylindricalDomainParityFlip::none));
387+
}()),
388+
Catch::Matchers::ContainsSubstring(
389+
"The innermost shell must have a 'Linear' radial distribution"));
390+
}
391+
340392
void test_six_wedge_directions_equiangular() {
341393
INFO("Default six wedge directions equiangular");
342394
const double inner_radius = 1.2;
@@ -1621,6 +1673,8 @@ SPECTRE_TEST_CASE("Unit.Domain.DomainHelpers", "[Domain][Unit]") {
16211673
test_periodic_different_blocks();
16221674
test_wedge_map_generation();
16231675
test_wedge_errors();
1676+
test_cyl_wedge_surrounding_blocks_radial_distribution_size_error();
1677+
test_cyl_wedge_surrounding_blocks_radial_distribution_linear_error();
16241678
test_all_frustum_directions();
16251679
test_frustrum_errors();
16261680
test_shell_graph();

0 commit comments

Comments
 (0)