1#ifndef HYDROBRICKS_SETTINGS_MODEL_H
2#define HYDROBRICKS_SETTINGS_MODEL_H
4#include <yaml-cpp/yaml.h>
24 ContentType fluxType = ContentType::Water;
25 bool isInstantaneous =
false;
26 bool isStatic =
false;
33 vector<Parameter> parameters;
34 vector<VariableType> forcing;
35 vector<OutputSettings> outputs;
42 vector<Parameter> parameters;
43 vector<VariableType> forcing;
44 vector<OutputSettings> outputs;
52 vector<Parameter> parameters;
53 vector<VariableType> forcing;
54 vector<ProcessSettings> processes;
55 bool computedDirectly =
false;
61 vector<BrickSettings> hydroUnitBricks;
62 vector<BrickSettings> subBasinBricks;
63 vecInt landCoverBricks;
64 vecInt surfaceComponentBricks;
65 vector<SplitterSettings> hydroUnitSplitters;
66 vector<SplitterSettings> subBasinSplitters;
90 void SetTimer(
const string& start,
const string& end,
int timeStep,
const string& timeStepUnit);
106 void AddSubBasinBrick(
const string& name,
const std::string& type =
"storage");
138 void AddBrickParameter(
const string& name,
float value,
const std::string& type =
"constant");
179 void AddBrickProcess(
const string& name,
const string& type,
const string& target =
"",
bool log =
false);
188 void AddProcessParameter(
const string& name,
float value,
const std::string& type =
"constant");
212 void AddProcessOutput(
const string& target, ContentType fluxType = ContentType::Water);
252 void AddSplitterParameter(
const string& name,
float value,
const std::string& type =
"constant");
276 void AddSplitterOutput(
const string& target,
const ContentType fluxType = ContentType::Water);
349 void AddSnowRedistribution(
const string& redistributionProcess =
"transport:snow_slide",
bool skipGlaciers =
false);
492 bool SetParameterValue(
const string& component,
const string& name,
float value);
500 return static_cast<int>(_modelStructures.size());
509 assert(_selectedStructure);
510 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
519 assert(_selectedStructure);
520 return static_cast<int>(_selectedStructure->subBasinBricks.size());
529 assert(_selectedStructure);
530 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
539 assert(_selectedBrick);
540 return static_cast<int>(_selectedBrick->processes.size());
549 assert(_selectedStructure);
550 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
559 assert(_selectedStructure);
560 return static_cast<int>(_selectedStructure->subBasinSplitters.size());
588 assert(_selectedStructure);
589 return _selectedStructure->hydroUnitBricks[index];
599 assert(_selectedStructure);
601 for (
const auto& brick : _selectedStructure->hydroUnitBricks) {
602 if (brick.name == name) {
607 throw std::runtime_error(
"Brick not found.");
617 assert(_selectedStructure);
618 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
619 return _selectedStructure->hydroUnitBricks[brickIndex];
628 assert(_selectedStructure);
629 return _selectedStructure->surfaceComponentBricks;
638 assert(_selectedStructure);
639 return _selectedStructure->landCoverBricks;
656 assert(_selectedStructure);
657 return _selectedStructure->subBasinBricks[index];
667 assert(_selectedBrick);
668 return _selectedBrick->processes[index];
678 assert(_selectedStructure);
679 return _selectedStructure->hydroUnitSplitters[index];
689 assert(_selectedStructure);
690 return _selectedStructure->subBasinSplitters[index];
721 LogDebug(
"Logging all components.");
723 LogDebug(
"Minimal logging.");
743 [[nodiscard]]
bool IsValid()
const;
755 vector<ModelStructure> _modelStructures;
763 bool LogAll(
const YAML::Node& settings);
Definition SettingsModel.h:69
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:385
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:34
void AddSplitterParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:316
void AddSubBasinSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:305
void AddSplitterForcing(const string &name)
Definition SettingsModel.cpp:346
int GetHydroUnitSplitterCount() const
Definition SettingsModel.h:548
void AddSnowIceTransformation(const string &transformationProcess="transform:snow_ice_swat")
Definition SettingsModel.cpp:483
int GetHydroUnitBrickCount() const
Definition SettingsModel.h:508
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:769
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:276
const vecInt & GetLandCoverBricksIndices() const
Definition SettingsModel.h:637
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:327
void AddProcessOutput(const string &target, ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:259
const SplitterSettings & GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:677
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:143
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:294
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:425
int GetSurfaceComponentBrickCount() const
Definition SettingsModel.h:528
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:198
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess)
Definition SettingsModel.cpp:510
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:719
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:132
void SelectSubBasinSplitter(int index)
Definition SettingsModel.cpp:645
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:27
void SelectProcess(int index)
Definition SettingsModel.cpp:605
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:624
const BrickSettings & GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:587
vecStr GetSubBasinGenericLogLabels() const
Definition SettingsModel.cpp:756
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:98
void SetCurrentBrickComputedDirectly()
Definition SettingsModel.cpp:127
bool SelectSubBasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:574
bool SelectStructure(int id)
Definition SettingsModel.cpp:529
void AddSplitterOutput(const string &target, const ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:367
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:594
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:568
int GetStructureCount() const
Definition SettingsModel.h:499
int GetProcessCount() const
Definition SettingsModel.h:538
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:652
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:74
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:268
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:376
int GetSubBasinBrickCount() const
Definition SettingsModel.h:518
void GenerateSnowpacks(const string &snowMeltProcess)
Definition SettingsModel.cpp:468
vecStr GetSubBasinLogLabels() const
Definition SettingsModel.cpp:725
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:627
void AddSnowRedistribution(const string &redistributionProcess="transport:snow_slide", bool skipGlaciers=false)
Definition SettingsModel.cpp:496
void AddBrickProcess(const string &name, const string &type, const string &target="", bool log=false)
Definition SettingsModel.cpp:160
void SetSolver(const string &solverName)
Definition SettingsModel.cpp:23
void SetBrickParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:108
void GeneratePrecipitationSplitters(bool withSnow, const string &splitterType="snow_rain:linear")
Definition SettingsModel.cpp:434
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:396
const ProcessSettings & GetProcessSettings(int index) const
Definition SettingsModel.h:666
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:545
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:217
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:577
bool SelectSubBasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:664
vecStr GetHydroUnitLogLabels() const
Definition SettingsModel.cpp:688
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:416
void SelectSubBasinBrick(int index)
Definition SettingsModel.cpp:553
void AddSurfaceComponentBrick(const string &name, const string &type)
Definition SettingsModel.cpp:85
void AddSubBasinBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:54
const BrickSettings & GetSubBasinBrickSettings(int index) const
Definition SettingsModel.h:655
void SelectHydroUnitSplitter(int index)
Definition SettingsModel.cpp:638
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:93
bool LogAll() const
Definition SettingsModel.h:733
const BrickSettings & GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:598
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:715
const BrickSettings & GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:616
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:236
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:284
bool IsValid() const
Definition SettingsModel.cpp:853
int GetSubBasinSplitterCount() const
Definition SettingsModel.h:558
void Validate() const
Definition SettingsModel.cpp:880
const SplitterSettings & GetSubBasinSplitterSettings(int index) const
Definition SettingsModel.h:688
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:561
Definition SettingsModel.h:47
Definition SettingsModel.h:58
Definition SettingsModel.h:22
Definition SettingsModel.h:29
Definition SettingsModel.h:11
Definition SettingsModel.h:38
Definition SettingsModel.h:15