Skip to content

Commit

Permalink
Add errors for healpix grid when ordering is not 'ring'
Browse files Browse the repository at this point in the history
  • Loading branch information
wdeconinck committed Oct 20, 2023
1 parent 752d82f commit 2c558fc
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/atlas/grid/StructuredGrid.cc
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,6 @@ inline const HealpixGrid::grid_t* healpix_grid(const Grid::Implementation* grid)

HealpixGrid::HealpixGrid(const Grid& grid): StructuredGrid(grid), grid_(healpix_grid(get())) {}

HealpixGrid::HealpixGrid(int N): HealpixGrid(Grid(new HealpixGrid::grid_t(N))) {}
HealpixGrid::HealpixGrid(int N, const std::string& ordering): HealpixGrid(Grid(new HealpixGrid::grid_t(N, ordering))) {}

} // namespace atlas
2 changes: 1 addition & 1 deletion src/atlas/grid/StructuredGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ class HealpixGrid : public StructuredGrid {

public:
HealpixGrid(const Grid&);
HealpixGrid(int N);
HealpixGrid(int N, const std::string& ordering = "ring");

operator bool() const { return valid(); }

Expand Down
20 changes: 13 additions & 7 deletions src/atlas/grid/detail/grid/Healpix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <iomanip>
#include <limits>
#include <ostream>
#include <sstream>

#include "atlas/grid/Spacing.h"
#include "atlas/grid/StructuredGrid.h"
Expand Down Expand Up @@ -42,16 +43,17 @@ static class HealpixGridBuilder : GridBuilder {
int id;
std::vector<std::string> matches;
if (match(name, matches, id)) {
int N = std::stoi(matches[0]);
return new detail::grid::Healpix(N);
int N = std::stoi(matches[0]);
std::string ordering = config.getString("ordering", "ring");
return new detail::grid::Healpix(N, ordering);
}
return nullptr;
}

const Grid::Implementation* create(const Grid::Config& config) const override {
long N;
config.get("N", N);
return new detail::grid::Healpix(N);
long N = config.getLong("N", 0);
std::string ordering = config.getString("ordering", "ring");
return new detail::grid::Healpix(N, ordering);
}

} healpix_builder_;
Expand Down Expand Up @@ -110,8 +112,12 @@ Healpix::YSpace healpix_yspace(long N) {
return new spacing::CustomSpacing(y.size(), y.data());
}

Healpix::Healpix(long N):
Structured("H" + std::to_string(N), healpix_xspace(N), healpix_yspace(N), Projection(), GlobalDomain()) {}
Healpix::Healpix(long N, const std::string& ordering):
Structured("H" + std::to_string(N), healpix_xspace(N), healpix_yspace(N), Projection(), GlobalDomain()) {
if (ordering != "ring") {
ATLAS_THROW_EXCEPTION("atlas Healpix Grid is only supported with ring ordering");
}
}


Healpix::Config Healpix::meshgenerator() const {
Expand Down
2 changes: 1 addition & 1 deletion src/atlas/grid/detail/grid/Healpix.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace grid {
class Healpix : public Structured {
public:
using Structured::Structured;
Healpix(long N);
Healpix(long N, const std::string& ordering = "ring");
Config meshgenerator() const override;
Config partitioner() const override;
static std::string static_type() { return "healpix"; }
Expand Down
20 changes: 20 additions & 0 deletions src/tests/mesh/test_healpixmeshgen.cc
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,30 @@ CASE("test_create_healpix_mesh") {

//-----------------------------------------------------------------------------

CASE("construction by config") {
EXPECT(Grid(util::Config("type", "healpix")("N", 3)) == Grid("H3"));
}

CASE("construction by integer") {
EXPECT(HealpixGrid(3) == Grid("H3"));
}

CASE("construction by integer and ordering") {
EXPECT(HealpixGrid(3, "ring") == Grid("H3"));
}

CASE("failing construction by integer and unsupported ordering") {
EXPECT_THROWS(HealpixGrid grid(3, "nested"));
}

CASE("failing construction by config with unsupported ordering") {
EXPECT_THROWS(Grid grid(util::Config("name", "H3")("ordering", "nested")));
}

CASE("failing construction by config with unsupported ordering") {
EXPECT_THROWS(Grid grid(util::Config("type", "healpix")("N", 3)("ordering", "nested")));
}

//-----------------------------------------------------------------------------

CASE("matching mesh partitioner") {
Expand Down

0 comments on commit 2c558fc

Please sign in to comment.