hydrobricks
Loading...
Searching...
No Matches
SettingsModel.h
1#ifndef HYDROBRICKS_SETTINGS_MODEL_H
2#define HYDROBRICKS_SETTINGS_MODEL_H
3
4#include <yaml-cpp/yaml.h>
5
6#include <memory>
7
8#include "Includes.h"
9#include "Parameter.h"
10
12 string name;
13};
14
16 string start;
17 string end;
18 int timeStep = 1;
19 string timeStepUnit;
20};
21
23 string target;
24 ContentType fluxType = ContentType::Water;
25 bool isInstantaneous = false;
26 bool isStatic = false;
27};
28
30 string name;
31 string type;
32 vecStr logItems;
33 vector<Parameter> parameters;
34 vector<VariableType> forcing;
35 vector<OutputSettings> outputs;
36};
37
39 string name;
40 string type;
41 vecStr logItems;
42 vector<Parameter> parameters;
43 vector<VariableType> forcing;
44 vector<OutputSettings> outputs;
45};
46
48 string name;
49 string type;
50 string parent;
51 vecStr logItems;
52 vector<Parameter> parameters;
53 vector<VariableType> forcing;
54 vector<ProcessSettings> processes;
55};
56
58 int id;
59 vecStr logItems;
60 vector<BrickSettings> hydroUnitBricks;
61 vector<BrickSettings> subBasinBricks;
62 vecInt landCoverBricks;
63 vecInt surfaceComponentBricks;
64 vector<SplitterSettings> hydroUnitSplitters;
65 vector<SplitterSettings> subBasinSplitters;
66};
67
68class SettingsModel : public wxObject {
69 public:
70 explicit SettingsModel();
71
72 ~SettingsModel() override;
73
79 void SetSolver(const string& solverName);
80
89 void SetTimer(const string& start, const string& end, int timeStep, const string& timeStepUnit);
90
97 void AddHydroUnitBrick(const string& name, const std::string& type = "storage");
98
105 void AddSubBasinBrick(const string& name, const std::string& type = "storage");
106
113 void AddLandCoverBrick(const string& name, const string& type);
114
121 void AddSurfaceComponentBrick(const string& name, const string& type);
122
128 void SetSurfaceComponentParent(const string& name);
129
137 void AddBrickParameter(const string& name, float value, const std::string& type = "constant");
138
146 void SetBrickParameterValue(const string& name, float value, const std::string& type = "constant");
147
154 bool BrickHasParameter(const string& name);
155
161 void AddBrickForcing(const string& name);
162
171 void AddBrickProcess(const string& name, const string& type, const string& target = "", bool log = false);
172
180 void AddProcessParameter(const string& name, float value, const std::string& type = "constant");
181
189 void SetProcessParameterValue(const string& name, float value, const std::string& type = "constant");
190
196 void AddProcessForcing(const string& name);
197
204 void AddProcessOutput(const string& target, ContentType fluxType = ContentType::Water);
205
210
215
220
227 void AddHydroUnitSplitter(const string& name, const string& type);
228
235 void AddSubBasinSplitter(const string& name, const string& type);
236
244 void AddSplitterParameter(const string& name, float value, const std::string& type = "constant");
245
253 void SetSplitterParameterValue(const string& name, float value, const std::string& type = "constant");
254
260 void AddSplitterForcing(const string& name);
261
268 void AddSplitterOutput(const string& target, const ContentType fluxType = ContentType::Water);
269
275 void AddLoggingToItem(const string& itemName);
276
282 void AddLoggingToItems(std::initializer_list<const string> items);
283
289 void AddBrickLogging(const string& itemName);
290
296 void AddBrickLogging(std::initializer_list<const string> items);
297
303 void AddProcessLogging(const string& itemName);
304
310 void AddSplitterLogging(const string& itemName);
311
317 void GeneratePrecipitationSplitters(bool withSnow);
318
324 void GenerateSnowpacks(const string& snowMeltProcess);
325
332 void AddSnowIceTransformation(const string& transformationProcess = "transform:snow_ice_swat");
333
340 void AddSnowRedistribution(const string& redistributionProcess = "transport:snow_slide", bool skipGlaciers = false);
341
348 void GenerateSnowpacksWithWaterRetention(const string& snowMeltProcess, const string& outflowProcess);
349
356 bool SelectStructure(int id);
357
363 void SelectHydroUnitBrick(int index);
364
370 void SelectSubBasinBrick(int index);
371
378 bool SelectHydroUnitBrickIfFound(const string& name);
379
386 bool SelectSubBasinBrickIfFound(const string& name);
387
393 void SelectHydroUnitBrick(const string& name);
394
401 void SelectHydroUnitBrickByName(const string& name);
402
408 void SelectSubBasinBrick(const string& name);
409
415 void SelectProcess(int index);
416
422 void SelectProcess(const string& name);
423
429 void SelectProcessWithParameter(const string& name);
430
436 void SelectHydroUnitSplitter(int index);
437
443 void SelectSubBasinSplitter(int index);
444
451 bool SelectHydroUnitSplitterIfFound(const string& name);
452
459 bool SelectSubBasinSplitterIfFound(const string& name);
460
466 void SelectHydroUnitSplitter(const string& name);
467
473 void SelectSubBasinSplitter(const string& name);
474
483 bool SetParameterValue(const string& component, const string& name, float value);
484
490 int GetStructureCount() const {
491 return static_cast<int>(_modelStructures.size());
492 }
493
500 wxASSERT(_selectedStructure);
501 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
502 }
503
510 wxASSERT(_selectedStructure);
511 return static_cast<int>(_selectedStructure->subBasinBricks.size());
512 }
513
520 wxASSERT(_selectedStructure);
521 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
522 }
523
529 int GetProcesseCount() const {
530 wxASSERT(_selectedBrick);
531 return static_cast<int>(_selectedBrick->processes.size());
532 }
533
540 wxASSERT(_selectedStructure);
541 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
542 }
543
550 wxASSERT(_selectedStructure);
551 return static_cast<int>(_selectedStructure->subBasinSplitters.size());
552 }
553
560 return _solver;
561 }
562
569 return _timer;
570 }
571
578 const BrickSettings& GetHydroUnitBrickSettings(int index) const {
579 wxASSERT(_selectedStructure);
580 return _selectedStructure->hydroUnitBricks[index];
581 }
582
589 const BrickSettings& GetHydroUnitBrickSettings(const string& name) const {
590 wxASSERT(_selectedStructure);
591
592 for (const auto& brick : _selectedStructure->hydroUnitBricks) {
593 if (brick.name == name) {
594 return brick;
595 }
596 }
597
598 throw std::runtime_error("Brick not found.");
599 }
600
608 wxASSERT(_selectedStructure);
609 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
610 return _selectedStructure->hydroUnitBricks[brickIndex];
611 }
612
619 wxASSERT(_selectedStructure);
620 return _selectedStructure->surfaceComponentBricks;
621 }
622
629 wxASSERT(_selectedStructure);
630 return _selectedStructure->landCoverBricks;
631 }
632
638 vecStr GetLandCoverBricksNames() const;
639
646 const BrickSettings& GetSubBasinBrickSettings(int index) const {
647 wxASSERT(_selectedStructure);
648 return _selectedStructure->subBasinBricks[index];
649 }
650
657 const ProcessSettings& GetProcessSettings(int index) const {
658 wxASSERT(_selectedBrick);
659 return _selectedBrick->processes[index];
660 }
661
669 wxASSERT(_selectedStructure);
670 return _selectedStructure->hydroUnitSplitters[index];
671 }
672
680 wxASSERT(_selectedStructure);
681 return _selectedStructure->subBasinSplitters[index];
682 }
683
689 vecStr GetSubBasinLogLabels() const;
690
696 vecStr GetSubBasinGenericLogLabels() const;
697
703 vecStr GetHydroUnitLogLabels() const;
704
710 void SetLogAll(bool logAll = true) {
711 if (logAll) {
712 wxLogVerbose("Logging all components.");
713 } else {
714 wxLogVerbose("Minimal logging.");
715 }
716 _logAll = logAll;
717 }
718
724 bool LogAll() const {
725 return _logAll;
726 }
727
734 [[nodiscard]] bool IsValid() const;
735
742 void Validate() const;
743
744 protected:
745 bool _logAll;
746 vector<ModelStructure> _modelStructures;
747 SolverSettings _solver;
748 TimerSettings _timer;
749 ModelStructure* _selectedStructure; // non-owning reference
750 BrickSettings* _selectedBrick; // non-owning reference
751 ProcessSettings* _selectedProcess; // non-owning reference
752 SplitterSettings* _selectedSplitter; // non-owning reference
753
754 bool LogAll(const YAML::Node& settings);
755};
756
757#endif // HYDROBRICKS_SETTINGS_MODEL_H
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