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;
60 vector<BrickSettings> hydroUnitBricks;
61 vector<BrickSettings> subBasinBricks;
62 vecInt landCoverBricks;
63 vecInt surfaceComponentBricks;
64 vector<SplitterSettings> hydroUnitSplitters;
65 vector<SplitterSettings> subBasinSplitters;
89 void SetTimer(
const string& start,
const string& end,
int timeStep,
const string& timeStepUnit);
105 void AddSubBasinBrick(
const string& name,
const std::string& type =
"storage");
137 void AddBrickParameter(
const string& name,
float value,
const std::string& type =
"constant");
171 void AddBrickProcess(
const string& name,
const string& type,
const string& target =
"",
bool log =
false);
180 void AddProcessParameter(
const string& name,
float value,
const std::string& type =
"constant");
204 void AddProcessOutput(
const string& target, ContentType fluxType = ContentType::Water);
244 void AddSplitterParameter(
const string& name,
float value,
const std::string& type =
"constant");
268 void AddSplitterOutput(
const string& target,
const ContentType fluxType = ContentType::Water);
340 void AddSnowRedistribution(
const string& redistributionProcess =
"transport:snow_slide",
bool skipGlaciers =
false);
483 bool SetParameterValue(
const string& component,
const string& name,
float value);
491 return static_cast<int>(_modelStructures.size());
500 wxASSERT(_selectedStructure);
501 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
510 wxASSERT(_selectedStructure);
511 return static_cast<int>(_selectedStructure->subBasinBricks.size());
520 wxASSERT(_selectedStructure);
521 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
530 wxASSERT(_selectedBrick);
531 return static_cast<int>(_selectedBrick->processes.size());
540 wxASSERT(_selectedStructure);
541 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
550 wxASSERT(_selectedStructure);
551 return static_cast<int>(_selectedStructure->subBasinSplitters.size());
579 wxASSERT(_selectedStructure);
580 return _selectedStructure->hydroUnitBricks[index];
590 wxASSERT(_selectedStructure);
592 for (
const auto& brick : _selectedStructure->hydroUnitBricks) {
593 if (brick.name == name) {
598 throw std::runtime_error(
"Brick not found.");
608 wxASSERT(_selectedStructure);
609 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
610 return _selectedStructure->hydroUnitBricks[brickIndex];
619 wxASSERT(_selectedStructure);
620 return _selectedStructure->surfaceComponentBricks;
629 wxASSERT(_selectedStructure);
630 return _selectedStructure->landCoverBricks;
647 wxASSERT(_selectedStructure);
648 return _selectedStructure->subBasinBricks[index];
658 wxASSERT(_selectedBrick);
659 return _selectedBrick->processes[index];
669 wxASSERT(_selectedStructure);
670 return _selectedStructure->hydroUnitSplitters[index];
680 wxASSERT(_selectedStructure);
681 return _selectedStructure->subBasinSplitters[index];
712 wxLogVerbose(
"Logging all components.");
714 wxLogVerbose(
"Minimal logging.");
734 [[nodiscard]]
bool IsValid()
const;
746 vector<ModelStructure> _modelStructures;
754 bool LogAll(
const YAML::Node& settings);
Definition SettingsModel.h:68
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:368
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:32
vecInt GetLandCoverBricksIndices() const
Definition SettingsModel.h:628
void AddSplitterParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:304
void AddSubBasinSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:293
void AddSplitterForcing(const string &name)
Definition SettingsModel.cpp:334
int GetHydroUnitSplitterCount() const
Definition SettingsModel.h:539
void AddSnowIceTransformation(const string &transformationProcess="transform:snow_ice_swat")
Definition SettingsModel.cpp:459
int GetHydroUnitBrickCount() const
Definition SettingsModel.h:499
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:745
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:264
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:315
void AddProcessOutput(const string &target, ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:247
const SplitterSettings & GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:668
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:137
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:282
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:408
int GetSurfaceComponentBrickCount() const
Definition SettingsModel.h:519
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:191
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess)
Definition SettingsModel.cpp:486
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:710
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:126
void SelectSubBasinSplitter(int index)
Definition SettingsModel.cpp:621
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:25
void SelectProcess(int index)
Definition SettingsModel.cpp:581
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:600
const BrickSettings & GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:578
vecStr GetSubBasinGenericLogLabels() const
Definition SettingsModel.cpp:732
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:96
bool SelectSubBasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:550
bool SelectStructure(int id)
Definition SettingsModel.cpp:505
void AddSplitterOutput(const string &target, const ContentType fluxType=ContentType::Water)
Definition SettingsModel.cpp:350
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:570
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:559
int GetStructureCount() const
Definition SettingsModel.h:490
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:628
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:72
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:256
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:359
int GetSubBasinBrickCount() const
Definition SettingsModel.h:509
void GenerateSnowpacks(const string &snowMeltProcess)
Definition SettingsModel.cpp:444
vecStr GetSubBasinLogLabels() const
Definition SettingsModel.cpp:701
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:618
void AddSnowRedistribution(const string &redistributionProcess="transport:snow_slide", bool skipGlaciers=false)
Definition SettingsModel.cpp:472
int GetProcesseCount() const
Definition SettingsModel.h:529
void AddBrickProcess(const string &name, const string &type, const string &target="", bool log=false)
Definition SettingsModel.cpp:153
void SetSolver(const string &solverName)
Definition SettingsModel.cpp:21
void SetBrickParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:107
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:379
const ProcessSettings & GetProcessSettings(int index) const
Definition SettingsModel.h:657
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:521
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:210
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:568
bool SelectSubBasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:640
vecStr GetHydroUnitLogLabels() const
Definition SettingsModel.cpp:664
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:399
void GeneratePrecipitationSplitters(bool withSnow)
Definition SettingsModel.cpp:417
void SelectSubBasinBrick(int index)
Definition SettingsModel.cpp:529
void AddSurfaceComponentBrick(const string &name, const string &type)
Definition SettingsModel.cpp:83
void AddSubBasinBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:52
const BrickSettings & GetSubBasinBrickSettings(int index) const
Definition SettingsModel.h:646
void SelectHydroUnitSplitter(int index)
Definition SettingsModel.cpp:614
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:91
bool LogAll() const
Definition SettingsModel.h:724
const BrickSettings & GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:589
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:691
const BrickSettings & GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:607
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:229
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:272
bool IsValid() const
Definition SettingsModel.cpp:820
int GetSubBasinSplitterCount() const
Definition SettingsModel.h:549
void Validate() const
Definition SettingsModel.cpp:847
const SplitterSettings & GetSubBasinSplitterSettings(int index) const
Definition SettingsModel.h:679
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:537
Definition SettingsModel.h:47
Definition SettingsModel.h:57
Definition SettingsModel.h:22
Definition SettingsModel.h:29
Definition SettingsModel.h:11
Definition SettingsModel.h:38
Definition SettingsModel.h:15