1#ifndef HYDROBRICKS_SETTINGS_MODEL_H
2#define HYDROBRICKS_SETTINGS_MODEL_H
4#include <yaml-cpp/yaml.h>
25 ContentType fluxType = ContentType::Water;
26 bool isInstantaneous =
false;
27 bool isStatic =
false;
34 vector<Parameter> parameters;
35 vector<VariableType> forcing;
36 vector<OutputSettings> outputs;
43 vector<Parameter> parameters;
44 vector<VariableType> forcing;
45 vector<OutputSettings> outputs;
53 vector<Parameter> parameters;
54 vector<VariableType> forcing;
55 vector<ProcessSettings> processes;
56 bool computedDirectly =
false;
62 vector<BrickSettings> hydroUnitBricks;
63 vector<BrickSettings> subBasinBricks;
64 vecInt landCoverBricks;
65 vecInt surfaceComponentBricks;
66 vector<SplitterSettings> hydroUnitSplitters;
67 vector<SplitterSettings> subBasinSplitters;
91 void SetTimer(
const string& start,
const string& end,
int timeStep,
const string& timeStepUnit);
118 void AddSubBasinBrick(
const string& name,
const std::string& type =
"storage");
150 void AddBrickParameter(
const string& name,
float value,
const std::string& type =
"constant");
191 void AddBrickProcess(
const string& name,
const string& type,
const string& target =
"",
bool log =
false);
200 void AddProcessParameter(
const string& name,
float value,
const std::string& type =
"constant");
224 void AddProcessOutput(
const string& target, ContentType fluxType = ContentType::Water);
264 void AddSplitterParameter(
const string& name,
float value,
const std::string& type =
"constant");
288 void AddSplitterOutput(
const string& target,
const ContentType fluxType = ContentType::Water);
391 void AddSnowRedistribution(
const string& redistributionProcess =
"transport:snow_slide",
bool skipGlaciers =
false);
404 bool rainToSnowpack =
false);
563 bool SetParameterValue(
const string& component,
const string& name,
float value);
571 return static_cast<int>(_modelStructures.size());
580 assert(_selectedStructure);
581 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
590 assert(_selectedStructure);
591 return static_cast<int>(_selectedStructure->subBasinBricks.size());
600 assert(_selectedStructure);
601 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
610 assert(_selectedBrick);
611 return static_cast<int>(_selectedBrick->processes.size());
620 assert(_selectedStructure);
621 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
630 assert(_selectedStructure);
631 return static_cast<int>(_selectedStructure->subBasinSplitters.size());
659 assert(_selectedStructure);
660 return _selectedStructure->hydroUnitBricks[index];
670 assert(_selectedStructure);
672 for (
const auto& brick : _selectedStructure->hydroUnitBricks) {
673 if (brick.name == name) {
678 throw std::runtime_error(
"Brick not found.");
688 assert(_selectedStructure);
689 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
690 return _selectedStructure->hydroUnitBricks[brickIndex];
699 assert(_selectedStructure);
700 return _selectedStructure->surfaceComponentBricks;
709 assert(_selectedStructure);
710 return _selectedStructure->landCoverBricks;
734 assert(_selectedStructure);
735 return _selectedStructure->subBasinBricks[index];
745 assert(_selectedBrick);
746 return _selectedBrick->processes[index];
756 assert(_selectedStructure);
757 return _selectedStructure->hydroUnitSplitters[index];
767 assert(_selectedStructure);
768 return _selectedStructure->subBasinSplitters[index];
799 LogDebug(
"Logging all components.");
800 _recordFractions =
true;
802 LogDebug(
"Minimal logging.");
825 _recordFractions = record;
834 return _recordFractions;
843 [[nodiscard]]
bool IsValid()
const;
862 bool _recordFractions;
863 vector<ModelStructure> _modelStructures;
871 bool LogAll(
const YAML::Node& settings);
Definition SettingsModel.h:70
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:442
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:45
void AddSnowpackSublimation(const string &sublimationProcess)
Definition SettingsModel.cpp:592
void AddSplitterParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:327
void AddSubBasinSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:316
void AddSplitterForcing(const string &name)
Definition SettingsModel.cpp:357
int GetHydroUnitSplitterCount() const
Definition SettingsModel.h:619
void GenerateCanopyInterception(const string &coverName, const string &throughfallTarget)
Definition SettingsModel.cpp:414
void AddSnowIceTransformation(const string &transformationProcess="transform:snow_ice_swat")
Definition SettingsModel.cpp:547
int GetHydroUnitBrickCount() const
Definition SettingsModel.h:579
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:923
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:287
const vecInt & GetLandCoverBricksIndices() const
Definition SettingsModel.h:708
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:338
void AddProcessOutput(const string &target, ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:270
bool SetParameterValueInSelectedStructure(const string &component, const string &name, float value)
Definition SettingsModel.cpp:968
const SplitterSettings & GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:755
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:154
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:305
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:482
int GetSurfaceComponentBrickCount() const
Definition SettingsModel.h:599
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:209
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:797
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:143
void SelectSubBasinSplitter(int index)
Definition SettingsModel.cpp:766
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:31
void SelectProcess(int index)
Definition SettingsModel.cpp:727
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:746
const BrickSettings & GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:658
vecStr GetSubBasinGenericLogLabels() const
Definition SettingsModel.cpp:911
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:109
void SetCurrentBrickComputedDirectly()
Definition SettingsModel.cpp:138
bool SelectSubBasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:696
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess, bool rainToSnowpack=false)
Definition SettingsModel.cpp:606
bool SelectStructure(int id)
Definition SettingsModel.cpp:653
void AddSplitterOutput(const string &target, const ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:378
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:716
void SetSpinupDays(int days)
Definition SettingsModel.cpp:38
void AddSnowpackRefreezing(const string &refreezingProcess="refreeze:degree_day")
Definition SettingsModel.cpp:574
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:639
int GetStructureCount() const
Definition SettingsModel.h:570
int GetProcessCount() const
Definition SettingsModel.h:609
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:772
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:85
vecStr GetSelectedStructureLandCoverNames() const
Definition SettingsModel.cpp:862
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:279
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:433
int GetSubBasinBrickCount() const
Definition SettingsModel.h:589
void GenerateSnowpacks(const string &snowMeltProcess)
Definition SettingsModel.cpp:532
vecStr GetSubBasinLogLabels() const
Definition SettingsModel.cpp:873
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:698
void AddSnowRedistribution(const string &redistributionProcess="transport:snow_slide", bool skipGlaciers=false)
Definition SettingsModel.cpp:560
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:387
bool RecordsFractions() const
Definition SettingsModel.h:833
void GeneratePrecipitationSplitters(bool withSnow, const string &splitterType="snow_rain:linear")
Definition SettingsModel.cpp:491
int AddStructure()
Definition SettingsModel.cpp:636
void SetRecordFractions(bool record=true)
Definition SettingsModel.h:824
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:453
const ProcessSettings & GetProcessSettings(int index) const
Definition SettingsModel.h:744
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:669
bool ChangeSplitterOutputTargetIfFound(const string ¤tTarget, const string &newTarget)
Definition SettingsModel.cpp:401
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:228
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:648
bool SelectSubBasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:784
vecStr GetHydroUnitLogLabels() const
Definition SettingsModel.cpp:808
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:473
void SelectSubBasinBrick(int index)
Definition SettingsModel.cpp:676
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:733
void SelectHydroUnitSplitter(int index)
Definition SettingsModel.cpp:760
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:104
bool LogAll() const
Definition SettingsModel.h:812
const BrickSettings & GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:669
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:843
const BrickSettings & GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:687
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:247
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:295
bool IsValid() const
Definition SettingsModel.cpp:1047
int GetSubBasinSplitterCount() const
Definition SettingsModel.h:629
void Validate() const
Definition SettingsModel.cpp:1074
const SplitterSettings & GetSubBasinSplitterSettings(int index) const
Definition SettingsModel.h:766
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:683
Definition SettingsModel.h:48
Definition SettingsModel.h:59
Definition SettingsModel.h:23
Definition SettingsModel.h:30
Definition SettingsModel.h:11
Definition SettingsModel.h:39
Definition SettingsModel.h:15