From 359fc6ae0166e78d54b7118d3f1b1fac4bf591ec Mon Sep 17 00:00:00 2001 From: program-- Date: Wed, 3 Jul 2024 10:52:05 -0700 Subject: [PATCH 1/2] refactor(ForcingsEngineDataProvider): move time and init members into protected scope --- include/forcing/ForcingsEngineDataProvider.hpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/include/forcing/ForcingsEngineDataProvider.hpp b/include/forcing/ForcingsEngineDataProvider.hpp index 5dcf8f8f69..f5c0d58ee1 100644 --- a/include/forcing/ForcingsEngineDataProvider.hpp +++ b/include/forcing/ForcingsEngineDataProvider.hpp @@ -200,10 +200,6 @@ struct ForcingsEngineDataProvider //! Output variable names std::vector var_output_names_{}; - private: - //! Initialization config file path - std::string init_; - //! Calendar time for simulation beginning clock_type::time_point time_begin_{}; @@ -212,6 +208,9 @@ struct ForcingsEngineDataProvider //! Duration of a single simulation tick clock_type::duration time_step_{}; + + //! Initialization config file path + std::string init_; }; } // namespace data_access From 110b9bbc97b769dd32954a0d475676fac714fde0 Mon Sep 17 00:00:00 2001 From: program-- Date: Wed, 3 Jul 2024 10:52:42 -0700 Subject: [PATCH 2/2] feat(ForcingsEngineDataProvider): add ensure_variable member for aliasing variable names to forcings engine names --- .../forcing/ForcingsEngineDataProvider.hpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/forcing/ForcingsEngineDataProvider.hpp b/include/forcing/ForcingsEngineDataProvider.hpp index f5c0d58ee1..ddeba17a98 100644 --- a/include/forcing/ForcingsEngineDataProvider.hpp +++ b/include/forcing/ForcingsEngineDataProvider.hpp @@ -194,6 +194,27 @@ struct ForcingsEngineDataProvider var_output_names_ = bmi_->GetOutputVarNames(); } + std::string ensure_variable(std::string name, const std::string& suffix = "_ELEMENT") const + { + // TODO: use get_available_var_names() once const + auto vars = boost::span{var_output_names_}; + + if (std::find(vars.begin(), vars.end(), name) != vars.end()) { + return name; + } + + auto suffixed_name = std::move(name) + suffix; + if (std::find(vars.begin(), vars.end(), suffixed_name) != vars.end()) { + return suffixed_name; + } + + throw std::runtime_error{ + "ForcingsEngineDataProvider: neither variable `" + + suffixed_name.substr(0, suffixed_name.size() - suffix.size()) + + "` nor `" + suffixed_name + "` exist." + }; + } + //! Forcings Engine instance std::shared_ptr bmi_ = nullptr;