1#ifndef HYDROBRICKS_SETTINGS_MODEL_H
2#define HYDROBRICKS_SETTINGS_MODEL_H
4#include <yaml-cpp/yaml.h>
27 ContentType fluxType = ContentType::Water;
28 bool isInstantaneous =
false;
29 bool isStatic =
false;
38 vector<Parameter> parameters;
39 vector<VariableType> forcing;
40 vector<OutputSettings> outputs;
47 vector<Parameter> parameters;
48 vector<VariableType> forcing;
49 vector<OutputSettings> outputs;
57 vector<Parameter> parameters;
58 vector<VariableType> forcing;
59 vector<ProcessSettings> processes;
60 bool computedDirectly =
false;
66 vector<BrickSettings> hydroUnitBricks;
67 vector<BrickSettings> subBasinBricks;
68 vecInt landCoverBricks;
69 vecInt surfaceComponentBricks;
70 vector<SplitterSettings> hydroUnitSplitters;
71 vector<SplitterSettings> subBasinSplitters;
95 void SetTimer(
const string& start,
const string& end,
int timeStep,
const string& timeStepUnit);
122 void AddSubBasinBrick(
const string& name,
const std::string& type =
"storage");
154 void AddBrickParameter(
const string& name,
float value,
const std::string& type =
"constant");
195 void AddBrickProcess(
const string& name,
const string& type,
const string& target =
"",
bool log =
false);
204 void AddProcessParameter(
const string& name,
float value,
const std::string& type =
"constant");
228 void AddProcessOutput(
const string& target, ContentType fluxType = ContentType::Water);
277 void AddSplitterParameter(
const string& name,
float value,
const std::string& type =
"constant");
301 void AddSplitterOutput(
const string& target,
const ContentType fluxType = ContentType::Water);
338 const string& throughfallProcess =
"outflow:threshold",
339 const string& interceptionEtProcess =
"et:open_water");
412 void AddSnowRedistribution(
const string& redistributionProcess =
"transport:snow_slide",
bool skipGlaciers =
false);
425 bool rainToSnowpack =
false);
584 bool SetParameterValue(
const string& component,
const string& name,
float value);
625 return _spatialParameterBindings;
639 const vecStr& properties);
647 return _spatialMonthlyParameterBindings;
656 return static_cast<int>(_modelStructures.size());
665 assert(_selectedStructure);
666 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
675 assert(_selectedStructure);
676 return static_cast<int>(_selectedStructure->subBasinBricks.size());
685 assert(_selectedStructure);
686 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
695 assert(_selectedBrick);
696 return static_cast<int>(_selectedBrick->processes.size());
705 assert(_selectedStructure);
706 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
715 assert(_selectedStructure);
716 return static_cast<int>(_selectedStructure->subBasinSplitters.size());
744 assert(_selectedStructure);
745 return _selectedStructure->hydroUnitBricks[index];
755 assert(_selectedStructure);
757 for (
const auto& brick : _selectedStructure->hydroUnitBricks) {
758 if (brick.name == name) {
763 throw std::runtime_error(
"Brick not found.");
773 assert(_selectedStructure);
774 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
775 return _selectedStructure->hydroUnitBricks[brickIndex];
784 assert(_selectedStructure);
785 return _selectedStructure->surfaceComponentBricks;
794 assert(_selectedStructure);
795 return _selectedStructure->landCoverBricks;
819 assert(_selectedStructure);
820 return _selectedStructure->subBasinBricks[index];
830 assert(_selectedBrick);
831 return _selectedBrick->processes[index];
841 assert(_selectedStructure);
842 return _selectedStructure->hydroUnitSplitters[index];
852 assert(_selectedStructure);
853 return _selectedStructure->subBasinSplitters[index];
884 LogDebug(
"Logging all components.");
885 _recordFractions =
true;
887 LogDebug(
"Minimal logging.");
910 _recordFractions = record;
919 return _recordFractions;
928 [[nodiscard]]
bool IsValid()
const;
955 bool _recordFractions;
956 vector<ModelStructure> _modelStructures;
964 std::map<std::pair<string, string>,
string> _spatialParameterBindings;
965 std::map<std::pair<string, string>, vecStr> _spatialMonthlyParameterBindings;
967 bool LogAll(
const YAML::Node& settings);
Definition SettingsModel.h:74
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:451
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:45
void AddSnowpackSublimation(const string &sublimationProcess)
Definition SettingsModel.cpp:601
void AddSplitterParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:333
void AddSubBasinSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:322
void AddSplitterForcing(const string &name)
Definition SettingsModel.cpp:363
int GetHydroUnitSplitterCount() const
Definition SettingsModel.h:704
void AddSnowIceTransformation(const string &transformationProcess="transform:snow_ice_swat")
Definition SettingsModel.cpp:556
int GetHydroUnitBrickCount() const
Definition SettingsModel.h:664
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:943
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:293
vector< Parameter * > GetParametersWithModifier()
Definition SettingsModel.cpp:1186
const vecInt & GetLandCoverBricksIndices() const
Definition SettingsModel.h:793
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:344
void AddProcessOutput(const string &target, ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:270
const std::map< std::pair< string, string >, vecStr > & GetSpatialMonthlyParameterBindings() const
Definition SettingsModel.h:646
bool SetParameterValueInSelectedStructure(const string &component, const string &name, float value)
Definition SettingsModel.cpp:988
Parameter * FindParameterInSelectedStructure(const string &component, const string &name)
Definition SettingsModel.cpp:1054
const SplitterSettings & GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:840
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:154
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:311
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:491
int GetSurfaceComponentBrickCount() const
Definition SettingsModel.h:684
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:209
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:882
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:143
void SelectSubBasinSplitter(int index)
Definition SettingsModel.cpp:786
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:31
void SelectProcess(int index)
Definition SettingsModel.cpp:747
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:766
const BrickSettings & GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:743
vecStr GetSubBasinGenericLogLabels() const
Definition SettingsModel.cpp:931
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:109
void SetCurrentBrickComputedDirectly()
Definition SettingsModel.cpp:138
void GenerateCanopyInterception(const string &coverName, const string &throughfallTarget, const string &throughfallProcess="outflow:threshold", const string &interceptionEtProcess="et:open_water")
Definition SettingsModel.cpp:420
bool SelectSubBasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:716
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess, bool rainToSnowpack=false)
Definition SettingsModel.cpp:626
bool SelectStructure(int id)
Definition SettingsModel.cpp:673
void AddSplitterOutput(const string &target, const ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:384
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:736
void SetSpinupDays(int days)
Definition SettingsModel.cpp:38
void AddSnowpackRefreezing(const string &refreezingProcess="refreeze:degree_day")
Definition SettingsModel.cpp:583
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:724
int GetStructureCount() const
Definition SettingsModel.h:655
int GetProcessCount() const
Definition SettingsModel.h:694
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:792
void SetProcessGateBrick(const string &name)
Definition SettingsModel.cpp:279
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:85
vecStr GetSelectedStructureLandCoverNames() const
Definition SettingsModel.cpp:882
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:285
const std::map< std::pair< string, string >, string > & GetSpatialParameterBindings() const
Definition SettingsModel.h:624
void SetParameterSpatialFromProperty(const string &component, const string &name, const string &property)
Definition SettingsModel.cpp:1143
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:442
int GetSubBasinBrickCount() const
Definition SettingsModel.h:674
void GenerateSnowpacks(const string &snowMeltProcess)
Definition SettingsModel.cpp:541
vecStr GetSubBasinLogLabels() const
Definition SettingsModel.cpp:893
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:783
void AddSnowRedistribution(const string &redistributionProcess="transport:snow_slide", bool skipGlaciers=false)
Definition SettingsModel.cpp:569
void AddBrickProcess(const string &name, const string &type, const string &target="", bool log=false)
Definition SettingsModel.cpp:171
void SetSolver(const string &solverName)
Definition SettingsModel.cpp:27
void SetBrickParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:119
void ChangeSplitterOutputTarget(const string ¤tTarget, const string &newTarget)
Definition SettingsModel.cpp:393
bool RecordsFractions() const
Definition SettingsModel.h:918
void GeneratePrecipitationSplitters(bool withSnow, const string &splitterType="snow_rain:linear")
Definition SettingsModel.cpp:500
bool SetParameterMonthlyValues(const string &component, const string &name, const vecFloat &values)
Definition SettingsModel.cpp:1083
int AddStructure()
Definition SettingsModel.cpp:656
void SetRecordFractions(bool record=true)
Definition SettingsModel.h:909
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:462
const ProcessSettings & GetProcessSettings(int index) const
Definition SettingsModel.h:829
void SetParameterSpatialMonthlyFromProperties(const string &component, const string &name, const vecStr &properties)
Definition SettingsModel.cpp:1162
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:689
bool ChangeSplitterOutputTargetIfFound(const string ¤tTarget, const string &newTarget)
Definition SettingsModel.cpp:407
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:228
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:733
bool SelectSubBasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:804
vecStr GetHydroUnitLogLabels() const
Definition SettingsModel.cpp:828
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:482
void SelectSubBasinBrick(int index)
Definition SettingsModel.cpp:696
void AddSurfaceComponentBrick(const string &name, const string &type)
Definition SettingsModel.cpp:96
void AddSubBasinBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:65
const BrickSettings & GetSubBasinBrickSettings(int index) const
Definition SettingsModel.h:818
void SelectHydroUnitSplitter(int index)
Definition SettingsModel.cpp:780
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:104
bool LogAll() const
Definition SettingsModel.h:897
const BrickSettings & GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:754
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:863
const BrickSettings & GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:772
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:247
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:301
bool IsValid() const
Definition SettingsModel.cpp:1239
int GetSubBasinSplitterCount() const
Definition SettingsModel.h:714
void Validate() const
Definition SettingsModel.cpp:1266
const SplitterSettings & GetSubBasinSplitterSettings(int index) const
Definition SettingsModel.h:851
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:703
Definition SettingsModel.h:52
Definition SettingsModel.h:63
Definition SettingsModel.h:25
Definition SettingsModel.h:32
Definition SettingsModel.h:13
Definition SettingsModel.h:43
Definition SettingsModel.h:17