Skip to content

Commit 081b1bb

Browse files
Allow reading of states and increments for structured columns (#52)
1 parent 169ebb7 commit 081b1bb

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

src/monio/Monio.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ void monio::Monio::readState(atlas::FieldSet& localFieldSet,
6060
atlas::Field globalField = utilsatlas::getGlobalField(localField);
6161
if (mpiCommunicator_.rank() == mpiRankOwner_) {
6262
auto& functionSpace = globalField.functionspace();
63-
auto& grid = atlas::functionspace::NodeColumns(functionSpace).mesh().grid();
63+
auto grid = utilsatlas::getGridFromFunctionSpace(functionSpace);
6464
// Initialise file
65-
int variableConvention = initialiseFile(grid.name(), filePath, true);
65+
int variableConvention = initialiseFile(grid, filePath, true);
6666
// getFileData returns a copy of FileData (with required LFRic mesh data), so read data
6767
// is discarded when FileData goes out-of-scope for reading subsequent fields.
6868
FileData fileData = getFileData(grid.name());
@@ -120,10 +120,10 @@ void monio::Monio::readIncrements(atlas::FieldSet& localFieldSet,
120120
atlas::Field globalField = utilsatlas::getGlobalField(localField);
121121
if (mpiCommunicator_.rank() == mpiRankOwner_) {
122122
auto& functionSpace = globalField.functionspace();
123-
auto& grid = atlas::functionspace::NodeColumns(functionSpace).mesh().grid();
123+
auto grid = utilsatlas::getGridFromFunctionSpace(functionSpace);
124124

125125
// Initialise file
126-
int variableConvention = initialiseFile(grid.name(), filePath);
126+
int variableConvention = initialiseFile(grid, filePath);
127127
// getFileData returns a copy of FileData (with required LFRic mesh data), so read data
128128
// is discarded when FileData goes out-of-scope for reading subsequent fields.
129129
FileData fileData = getFileData(grid.name());
@@ -172,7 +172,7 @@ void monio::Monio::writeIncrements(const atlas::FieldSet& localFieldSet,
172172
if (filePath.length() != 0) {
173173
try {
174174
auto& functionSpace = localFieldSet[0].functionspace();
175-
auto& grid = atlas::functionspace::NodeColumns(functionSpace).mesh().grid();
175+
auto grid = utilsatlas::getGridFromFunctionSpace(functionSpace);
176176
FileData fileData = getFileData(grid.name());
177177
cleanFileData(fileData); // Remove metadata required for reading, but not for writing.
178178
if (isLfricConvention == false) {
@@ -235,7 +235,7 @@ void monio::Monio::writeState(const atlas::FieldSet& localFieldSet,
235235
if (filePath.length() != 0) {
236236
try {
237237
auto& functionSpace = localFieldSet[0].functionspace();
238-
auto& grid = atlas::functionspace::NodeColumns(functionSpace).mesh().grid();
238+
auto grid = utilsatlas::getGridFromFunctionSpace(functionSpace);
239239
FileData fileData = getFileData(grid.name());
240240
cleanFileData(fileData); // Remove metadata required for reading, but not for writing.
241241
if (isLfricConvention == false) {
@@ -390,7 +390,7 @@ monio::FileData monio::Monio::getFileData(const std::string& gridName) {
390390
return FileData(); // This function is called by all PEs. A return is essential.
391391
}
392392

393-
void monio::Monio::createLfricAtlasMap(FileData& fileData, const atlas::CubedSphereGrid& grid) {
393+
void monio::Monio::createLfricAtlasMap(FileData& fileData, const atlas::Grid& grid) {
394394
oops::Log::trace() << "Monio::createLfricAtlasMap()" << std::endl;
395395
if (mpiCommunicator_.rank() == mpiRankOwner_) {
396396
if (fileData.getLfricAtlasMap().size() == 0) {

src/monio/Monio.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class Monio {
8989
FileData getFileData(const std::string& gridName);
9090

9191
/// \brief Creates and stores a map between Atlas and LFRic horizontal ordering.
92-
void createLfricAtlasMap(FileData& fileData, const atlas::CubedSphereGrid& grid);
92+
void createLfricAtlasMap(FileData& fileData, const atlas::Grid& grid);
9393

9494
/// \brief Creates and stores date-times from a state file.
9595
void createDateTimes(FileData& fileData,

src/monio/UtilsAtlas.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,19 @@ atlas::FieldSet getGlobalFieldSet(const atlas::FieldSet& fieldSet) {
165165
}
166166
}
167167

168+
atlas::Grid getGridFromFunctionSpace(const atlas::FunctionSpace& functionSpace) {
169+
auto nc = atlas::functionspace::NodeColumns(functionSpace);
170+
auto sc = atlas::functionspace::StructuredColumns(functionSpace);
171+
if (nc) {
172+
return nc.mesh().grid();
173+
} else if (sc) {
174+
return sc.grid();
175+
} else {
176+
utils::throwException("Monio::readState()> FunctionSpace not an accepted type. "
177+
"Accepted types: NodeColumns, StructuredColumns");
178+
}
179+
}
180+
168181
atlas::idx_t getHorizontalSize(const atlas::Field& field) {
169182
atlas::Field ghostField = field.functionspace().ghost();
170183
atlas::idx_t size = 0;

src/monio/UtilsAtlas.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ namespace utilsatlas {
4343

4444
atlas::Field getGlobalField(const atlas::Field& field);
4545

46+
atlas::Grid getGridFromFunctionSpace(const atlas::FunctionSpace& functionSpace);
47+
4648
atlas::idx_t getHorizontalSize(const atlas::Field& field); // Just 2D size. Any field.
4749
atlas::idx_t getGlobalDataSize(const atlas::Field& field); // Full 3D size of global field.
4850

0 commit comments

Comments
 (0)