1#ifndef HYDROBRICKS_SETTINGS_MODEL_H
2#define HYDROBRICKS_SETTINGS_MODEL_H
4#include <yaml-cpp/yaml.h>
24 string scheme =
"none";
25 bool routeLocalRunoff =
false;
26 vector<Parameter> parameters;
39 ContentType fluxType = ContentType::Water;
40 bool isInstantaneous =
false;
41 bool isStatic =
false;
50 vector<Parameter> parameters;
51 vector<VariableType> forcing;
52 vector<OutputSettings> outputs;
59 vector<Parameter> parameters;
60 vector<VariableType> forcing;
61 vector<OutputSettings> outputs;
69 vector<Parameter> parameters;
70 vector<VariableType> forcing;
71 vector<ProcessSettings> processes;
72 bool computedDirectly =
false;
79 vector<BrickSettings> hydroUnitBricks;
80 vector<BrickSettings> subbasinBricks;
81 vecInt landCoverBricks;
82 vecInt surfaceComponentBricks;
83 vector<SplitterSettings> hydroUnitSplitters;
84 vector<SplitterSettings> subbasinSplitters;
119 void SetTimer(
const string& start,
const string& end,
int timeStep,
const string& timeStepUnit);
146 void AddSubbasinBrick(
const string& name,
const std::string& type =
"storage");
178 void AddBrickParameter(
const string& name,
float value,
const std::string& type =
"constant");
228 void AddBrickProcess(
const string& name,
const string& type,
const string& target =
"",
bool log =
false);
237 void AddProcessParameter(
const string& name,
float value,
const std::string& type =
"constant");
261 void AddProcessOutput(
const string& target, ContentType fluxType = ContentType::Water);
310 void AddSplitterParameter(
const string& name,
float value,
const std::string& type =
"constant");
334 void AddSplitterOutput(
const string& target,
const ContentType fluxType = ContentType::Water);
371 const string& throughfallProcess =
"outflow:threshold",
372 const string& interceptionEtProcess =
"et:open_water");
445 void AddSnowRedistribution(
const string& redistributionProcess =
"transport:snow_slide",
bool skipGlaciers =
false);
458 bool rainToSnowpack =
false);
617 bool SetParameterValue(
const string& component,
const string& name,
float value);
658 return _spatialParameterBindings;
672 const vecStr& properties);
680 return _spatialMonthlyParameterBindings;
689 assert(_selectedStructure);
690 return _selectedStructure->id;
699 return static_cast<int>(_modelStructures.size());
708 assert(_selectedStructure);
709 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
718 assert(_selectedStructure);
719 return static_cast<int>(_selectedStructure->subbasinBricks.size());
728 assert(_selectedStructure);
729 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
738 assert(_selectedBrick);
739 return static_cast<int>(_selectedBrick->processes.size());
748 assert(_selectedStructure);
749 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
758 assert(_selectedStructure);
759 return static_cast<int>(_selectedStructure->subbasinSplitters.size());
778 return _channelRouting;
797 assert(_selectedStructure);
798 return _selectedStructure->hydroUnitBricks[index];
808 assert(_selectedStructure);
810 for (
const auto& brick : _selectedStructure->hydroUnitBricks) {
811 if (brick.name == name) {
816 throw std::runtime_error(
"Brick not found.");
826 assert(_selectedStructure);
827 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
828 return _selectedStructure->hydroUnitBricks[brickIndex];
837 assert(_selectedStructure);
838 return _selectedStructure->surfaceComponentBricks;
847 assert(_selectedStructure);
848 return _selectedStructure->landCoverBricks;
872 assert(_selectedStructure);
873 return _selectedStructure->subbasinBricks[index];
883 assert(_selectedBrick);
884 return _selectedBrick->processes[index];
894 assert(_selectedStructure);
895 return _selectedStructure->hydroUnitSplitters[index];
905 assert(_selectedStructure);
906 return _selectedStructure->subbasinSplitters[index];
937 LogDebug(
"Logging all components.");
938 _recordFractions =
true;
940 LogDebug(
"Minimal logging.");
963 _recordFractions = record;
972 return _recordFractions;
981 [[nodiscard]]
bool IsValid()
const;
1008 bool _recordFractions;
1009 vector<ModelStructure> _modelStructures;
1018 std::map<std::pair<string, string>,
string> _spatialParameterBindings;
1019 std::map<std::pair<string, string>, vecStr> _spatialMonthlyParameterBindings;
1021 bool LogAll(
const YAML::Node& settings);
Definition SettingsModel.h:87
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:471
int GetSelectedStructureId() const
Definition SettingsModel.h:688
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:60
void AddSnowpackSublimation(const string &sublimationProcess)
Definition SettingsModel.cpp:621
int GetSubbasinSplitterCount() const
Definition SettingsModel.h:757
void AddSplitterParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:353
void AddSplitterForcing(const string &name)
Definition SettingsModel.cpp:383
int GetHydroUnitSplitterCount() const
Definition SettingsModel.h:747
void AddSnowIceTransformation(const string &transformationProcess="transform:snow_ice_swat")
Definition SettingsModel.cpp:576
int GetHydroUnitBrickCount() const
Definition SettingsModel.h:707
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:963
vecStr GetSubbasinGenericLogLabels() const
Definition SettingsModel.cpp:951
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:313
vector< Parameter * > GetParametersWithModifier()
Definition SettingsModel.cpp:1216
const vecInt & GetLandCoverBricksIndices() const
Definition SettingsModel.h:846
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:364
void AddProcessOutput(const string &target, ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:290
const std::map< std::pair< string, string >, vecStr > & GetSpatialMonthlyParameterBindings() const
Definition SettingsModel.h:679
bool SetParameterValueInSelectedStructure(const string &component, const string &name, float value)
Definition SettingsModel.cpp:1018
Parameter * FindParameterInSelectedStructure(const string &component, const string &name)
Definition SettingsModel.cpp:1084
const SplitterSettings & GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:893
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:174
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:331
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:511
int GetSurfaceComponentBrickCount() const
Definition SettingsModel.h:727
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:229
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:935
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:163
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:46
void SelectProcess(int index)
Definition SettingsModel.cpp:767
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:786
const BrickSettings & GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:796
void AddSubbasinBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:80
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:124
void SetCurrentBrickComputedDirectly()
Definition SettingsModel.cpp:153
void GenerateCanopyInterception(const string &coverName, const string &throughfallTarget, const string &throughfallProcess="outflow:threshold", const string &interceptionEtProcess="et:open_water")
Definition SettingsModel.cpp:440
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess, bool rainToSnowpack=false)
Definition SettingsModel.cpp:646
bool SelectStructure(int id)
Definition SettingsModel.cpp:693
void AddSplitterOutput(const string &target, const ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:404
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:756
bool SelectSubbasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:824
void SetSpinupDays(int days)
Definition SettingsModel.cpp:53
const SplitterSettings & GetSubbasinSplitterSettings(int index) const
Definition SettingsModel.h:904
void AddSnowpackRefreezing(const string &refreezingProcess="refreeze:degree_day")
Definition SettingsModel.cpp:603
void AddSubbasinSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:342
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:767
int GetStructureCount() const
Definition SettingsModel.h:698
int GetProcessCount() const
Definition SettingsModel.h:737
const BrickSettings & GetSubbasinBrickSettings(int index) const
Definition SettingsModel.h:871
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:812
void SelectSubbasinBrick(int index)
Definition SettingsModel.cpp:716
void SetProcessGateBrick(const string &name)
Definition SettingsModel.cpp:299
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:100
vecStr GetSelectedStructureLandCoverNames() const
Definition SettingsModel.cpp:902
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:305
const std::map< std::pair< string, string >, string > & GetSpatialParameterBindings() const
Definition SettingsModel.h:657
void SetParameterSpatialFromProperty(const string &component, const string &name, const string &property)
Definition SettingsModel.cpp:1173
int GetSubbasinBrickCount() const
Definition SettingsModel.h:717
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:462
void SetCurrentBrickAreaOf(const string &landCover)
Definition SettingsModel.cpp:158
void GenerateSnowpacks(const string &snowMeltProcess)
Definition SettingsModel.cpp:561
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:836
void AddSnowRedistribution(const string &redistributionProcess="transport:snow_slide", bool skipGlaciers=false)
Definition SettingsModel.cpp:589
void AddBrickProcess(const string &name, const string &type, const string &target="", bool log=false)
Definition SettingsModel.cpp:191
void SetSolver(const string &solverName)
Definition SettingsModel.cpp:27
void SelectSubbasinSplitter(int index)
Definition SettingsModel.cpp:806
void SetBrickParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:134
void ChangeSplitterOutputTarget(const string ¤tTarget, const string &newTarget)
Definition SettingsModel.cpp:413
bool RecordsFractions() const
Definition SettingsModel.h:971
void GeneratePrecipitationSplitters(bool withSnow, const string &splitterType="snow_rain:linear")
Definition SettingsModel.cpp:520
bool SetParameterMonthlyValues(const string &component, const string &name, const vecFloat &values)
Definition SettingsModel.cpp:1113
int AddStructure()
Definition SettingsModel.cpp:676
const ChannelRoutingSettings & GetChannelRoutingSettings() const
Definition SettingsModel.h:777
bool SelectSubbasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:736
void SetRecordFractions(bool record=true)
Definition SettingsModel.h:962
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:482
const ProcessSettings & GetProcessSettings(int index) const
Definition SettingsModel.h:882
void SetParameterSpatialMonthlyFromProperties(const string &component, const string &name, const vecStr &properties)
Definition SettingsModel.cpp:1192
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:709
bool ChangeSplitterOutputTargetIfFound(const string ¤tTarget, const string &newTarget)
Definition SettingsModel.cpp:427
vecStr GetSubbasinLogLabels() const
Definition SettingsModel.cpp:913
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:248
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:786
void SetChannelRouting(const string &scheme, bool routeLocalRunoff=false)
Definition SettingsModel.cpp:31
vecStr GetHydroUnitLogLabels() const
Definition SettingsModel.cpp:848
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:502
void AddSurfaceComponentBrick(const string &name, const string &type)
Definition SettingsModel.cpp:111
void SelectHydroUnitSplitter(int index)
Definition SettingsModel.cpp:800
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:119
bool LogAll() const
Definition SettingsModel.h:950
const BrickSettings & GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:807
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:883
const BrickSettings & GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:825
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:267
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:321
bool IsValid() const
Definition SettingsModel.cpp:1269
void Validate() const
Definition SettingsModel.cpp:1296
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:723
Definition SettingsModel.h:64
Definition SettingsModel.h:23
Definition SettingsModel.h:76
Definition SettingsModel.h:37
Definition SettingsModel.h:44
Definition SettingsModel.h:13
Definition SettingsModel.h:55
Definition SettingsModel.h:29