From 5dad421220961e629a53aad9d87d1dda9017ddc1 Mon Sep 17 00:00:00 2001 From: phlndrwd Date: Thu, 30 Nov 2023 15:20:23 +0000 Subject: [PATCH 1/6] Minor modifications to Monio::readState for HofX. This use-case has not previously been approached with Monio directly before current work in LFRic-JEDI. --- src/monio/Monio.cc | 20 ++++++++++++-------- src/monio/Utils.cc | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/monio/Monio.cc b/src/monio/Monio.cc index 85dd8dc..346cf3e 100644 --- a/src/monio/Monio.cc +++ b/src/monio/Monio.cc @@ -61,7 +61,6 @@ void monio::Monio::readState(atlas::FieldSet& localFieldSet, if (mpiCommunicator_.rank() == mpiRankOwner_) { auto& functionSpace = globalField.functionspace(); auto& grid = atlas::functionspace::NodeColumns(functionSpace).mesh().grid(); - // Initialise file int variableConvention = initialiseFile(grid.name(), filePath, true); // getFileData returns a copy of FileData (with required LFRic mesh data), so read data @@ -72,13 +71,18 @@ void monio::Monio::readState(atlas::FieldSet& localFieldSet, if (variableConvention == consts::eJediConvention) { readName = fieldMetadata.jediName; } - oops::Log::debug() << "Monio::readState() processing data for> \"" << - readName << "\"..." << std::endl; - // Read fields into memory - reader_.readDatumAtTime(fileData, readName, dateTime, - std::string(consts::kTimeDimName)); - atlasReader_.populateFieldWithFileData(globalField, fileData, fieldMetadata, readName, - variableConvention == consts::eLfricConvention); + if (utils::findInVector(consts::kMissingVariableNames, readName) == false) { + oops::Log::debug() << "Monio::readState() processing data for> \"" << + readName << "\"..." << std::endl; + // Read fields into memory + reader_.readDatumAtTime(fileData, readName, dateTime, + std::string(consts::kTimeDimName)); + atlasReader_.populateFieldWithFileData(globalField, fileData, fieldMetadata, readName, + variableConvention == consts::eLfricConvention); + } else { + oops::Log::info() << "Monio::readState()> Variable \"" + fieldMetadata.jediName + + "\" not defined in LFRic. Skipping read..." << std::endl; + } } auto& functionSpace = globalField.functionspace(); functionSpace.scatter(globalField, localField); diff --git a/src/monio/Utils.cc b/src/monio/Utils.cc index 78dc8b3..08ef005 100644 --- a/src/monio/Utils.cc +++ b/src/monio/Utils.cc @@ -54,7 +54,7 @@ bool strToBool(std::string input) { (cleanStr.size() == 5 && cleanStr == "false")) { return false; } else { - throw std::invalid_argument("ERROR> Input value of \"" + input + "\" is not valid."); + throw std::invalid_argument("utils::strToBool> Input value of \"" + input + "\" is not valid."); } } From af19057ffeee17a766c8587de40738a164df9067 Mon Sep 17 00:00:00 2001 From: phlndrwd Date: Fri, 1 Dec 2023 09:17:19 +0000 Subject: [PATCH 2/6] Coding norms. --- src/monio/Monio.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/monio/Monio.cc b/src/monio/Monio.cc index 346cf3e..28d8567 100644 --- a/src/monio/Monio.cc +++ b/src/monio/Monio.cc @@ -78,7 +78,7 @@ void monio::Monio::readState(atlas::FieldSet& localFieldSet, reader_.readDatumAtTime(fileData, readName, dateTime, std::string(consts::kTimeDimName)); atlasReader_.populateFieldWithFileData(globalField, fileData, fieldMetadata, readName, - variableConvention == consts::eLfricConvention); + variableConvention == consts::eLfricConvention); } else { oops::Log::info() << "Monio::readState()> Variable \"" + fieldMetadata.jediName + "\" not defined in LFRic. Skipping read..." << std::endl; From c9b3d02e6cf12801bd1f542662e3e726c4afefa1 Mon Sep 17 00:00:00 2001 From: phlndrwd Date: Tue, 12 Dec 2023 17:10:24 +0000 Subject: [PATCH 3/6] Added exec function to execute system commands and return output in a std::string. --- src/monio/Utils.cc | 17 +++++++++++++++++ src/monio/Utils.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/src/monio/Utils.cc b/src/monio/Utils.cc index 08ef005..24a2293 100644 --- a/src/monio/Utils.cc +++ b/src/monio/Utils.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include "AttributeBase.h" #include "DataContainerBase.h" @@ -58,6 +59,22 @@ bool strToBool(std::string input) { } } +std::string exec(const std::string& cmd) { + std::array buffer; + std::string result; + + std::string extCmd = "sh -c '" + cmd + "' 2>&1"; + + std::unique_ptr pipe(popen(extCmd.c_str(), "r"), pclose); + if (!pipe) { + throw std::runtime_error("popen() failed!"); + } + while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { + result += buffer.data(); + } + return result; +} + bool fileExists(std::string path) { std::ifstream f(path.c_str()); return f.good(); diff --git a/src/monio/Utils.h b/src/monio/Utils.h index bcf11fc..b1fcd1e 100644 --- a/src/monio/Utils.h +++ b/src/monio/Utils.h @@ -27,6 +27,8 @@ namespace utils { bool strToBool(std::string input); bool fileExists(std::string path); + std::string exec(const std::string& cmd); + template std::vector extractKeys(std::map const& inputMap); From 08cf4f2a45b9e663226705664c3eb1dfcd6a840d Mon Sep 17 00:00:00 2001 From: phlndrwd Date: Tue, 12 Dec 2023 18:06:58 +0000 Subject: [PATCH 4/6] Coding norms. --- src/monio/Utils.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/monio/Utils.cc b/src/monio/Utils.cc index 24a2293..5a3cee3 100644 --- a/src/monio/Utils.cc +++ b/src/monio/Utils.cc @@ -8,10 +8,11 @@ ******************************************************************************/ #include "Utils.h" +#include + #include #include #include -#include #include "AttributeBase.h" #include "DataContainerBase.h" From ebd2310081d9adf254f2a7411eca1b16bb48e0a1 Mon Sep 17 00:00:00 2001 From: phlndrwd Date: Wed, 13 Dec 2023 15:27:25 +0000 Subject: [PATCH 5/6] Added missing include. --- src/monio/Utils.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/monio/Utils.cc b/src/monio/Utils.cc index 5a3cee3..8c2a844 100644 --- a/src/monio/Utils.cc +++ b/src/monio/Utils.cc @@ -11,6 +11,7 @@ #include #include +#include #include #include From d65ea1f8160158e4b1d1f592090061511b71487b Mon Sep 17 00:00:00 2001 From: phlndrwd Date: Wed, 13 Dec 2023 16:35:11 +0000 Subject: [PATCH 6/6] Removed whitespace. --- src/monio/Utils.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/monio/Utils.cc b/src/monio/Utils.cc index 8c2a844..193f04f 100644 --- a/src/monio/Utils.cc +++ b/src/monio/Utils.cc @@ -64,9 +64,7 @@ bool strToBool(std::string input) { std::string exec(const std::string& cmd) { std::array buffer; std::string result; - std::string extCmd = "sh -c '" + cmd + "' 2>&1"; - std::unique_ptr pipe(popen(extCmd.c_str(), "r"), pclose); if (!pipe) { throw std::runtime_error("popen() failed!");