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 "Includes.h"
7#include "Parameter.h"
8
10 string name;
11};
12
14 string start;
15 string end;
16 int timeStep = 1;
17 string timeStepUnit;
18};
19
21 string target;
22 string fluxType = "water";
23 bool isInstantaneous = false;
24 bool isStatic = false;
25};
26
28 string name;
29 string type;
30 vecStr logItems;
31 vector<Parameter*> parameters;
32 vector<VariableType> forcing;
33 vector<OutputSettings> outputs;
34};
35
37 string name;
38 string type;
39 vecStr logItems;
40 vector<Parameter*> parameters;
41 vector<VariableType> forcing;
42 vector<OutputSettings> outputs;
43};
44
46 string name;
47 string type;
48 string parent;
49 vecStr logItems;
50 vector<Parameter*> parameters;
51 vector<VariableType> forcing;
52 vector<ProcessSettings> processes;
53};
54
56 int id;
57 vecStr logItems;
58 vector<BrickSettings> hydroUnitBricks;
59 vector<BrickSettings> subBasinBricks;
60 vecInt landCoverBricks;
61 vecInt surfaceComponentBricks;
62 vector<SplitterSettings> hydroUnitSplitters;
63 vector<SplitterSettings> subBasinSplitters;
64};
65
66class SettingsModel : public wxObject {
67 public:
68 explicit SettingsModel();
69
70 ~SettingsModel() override;
71
77 void SetSolver(const string& solverName);
78
87 void SetTimer(const string& start, const string& end, int timeStep, const string& timeStepUnit);
88
95 void AddHydroUnitBrick(const string& name, const std::string& type = "storage");
96
103 void AddSubBasinBrick(const string& name, const std::string& type = "storage");
104
111 void AddLandCoverBrick(const string& name, const string& type);
112
119 void AddSurfaceComponentBrick(const string& name, const string& type);
120
126 void SetSurfaceComponentParent(const string& name);
127
135 void AddBrickParameter(const string& name, float value, const std::string& type = "constant");
136
144 void SetBrickParameterValue(const string& name, float value, const std::string& type = "constant");
145
152 bool BrickHasParameter(const string& name);
153
159 void AddBrickForcing(const string& name);
160
169 void AddBrickProcess(const string& name, const string& type, const string& target = "", bool log = false);
170
178 void AddProcessParameter(const string& name, float value, const std::string& type = "constant");
179
187 void SetProcessParameterValue(const string& name, float value, const std::string& type = "constant");
188
194 void AddProcessForcing(const string& name);
195
202 void AddProcessOutput(const string& target, const string& fluxType = "water");
203
208
213
218
225 void AddHydroUnitSplitter(const string& name, const string& type);
226
233 void AddSubBasinSplitter(const string& name, const string& type);
234
242 void AddSplitterParameter(const string& name, float value, const std::string& type = "constant");
243
251 void SetSplitterParameterValue(const string& name, float value, const std::string& type = "constant");
252
258 void AddSplitterForcing(const string& name);
259
266 void AddSplitterOutput(const string& target, const string& fluxType = "water");
267
273 void AddLoggingToItem(const string& itemName);
274
280 void AddLoggingToItems(std::initializer_list<const string> items);
281
287 void AddBrickLogging(const string& itemName);
288
294 void AddBrickLogging(std::initializer_list<const string> items);
295
301 void AddProcessLogging(const string& itemName);
302
308 void AddSplitterLogging(const string& itemName);
309
315 void GeneratePrecipitationSplitters(bool withSnow);
316
323 void GenerateSnowpacks(const string& snowMeltProcess, bool snowIceTransformation = false);
324
331 void GenerateSnowpacksWithWaterRetention(const string& snowMeltProcess, const string& outflowProcess);
332
339 bool SelectStructure(int id);
340
346 void SelectHydroUnitBrick(int index);
347
353 void SelectSubBasinBrick(int index);
354
361 bool SelectHydroUnitBrickIfFound(const string& name);
362
369 bool SelectSubBasinBrickIfFound(const string& name);
370
376 void SelectHydroUnitBrick(const string& name);
377
384 void SelectHydroUnitBrickByName(const string& name);
385
391 void SelectSubBasinBrick(const string& name);
392
398 void SelectProcess(int index);
399
405 void SelectProcess(const string& name);
406
412 void SelectProcessWithParameter(const string& name);
413
419 void SelectHydroUnitSplitter(int index);
420
426 void SelectSubBasinSplitter(int index);
427
434 bool SelectHydroUnitSplitterIfFound(const string& name);
435
442 bool SelectSubBasinSplitterIfFound(const string& name);
443
449 void SelectHydroUnitSplitter(const string& name);
450
456 void SelectSubBasinSplitter(const string& name);
457
466 bool SetParameterValue(const string& component, const string& name, float value);
467
473 int GetStructuresNb() const {
474 return static_cast<int>(m_modelStructures.size());
475 }
476
483 wxASSERT(m_selectedStructure);
484 return static_cast<int>(m_selectedStructure->hydroUnitBricks.size());
485 }
486
493 wxASSERT(m_selectedStructure);
494 return static_cast<int>(m_selectedStructure->subBasinBricks.size());
495 }
496
503 wxASSERT(m_selectedStructure);
504 return static_cast<int>(m_selectedStructure->surfaceComponentBricks.size());
505 }
506
512 int GetProcessesNb() const {
513 wxASSERT(m_selectedBrick);
514 return static_cast<int>(m_selectedBrick->processes.size());
515 }
516
523 wxASSERT(m_selectedStructure);
524 return static_cast<int>(m_selectedStructure->hydroUnitSplitters.size());
525 }
526
533 wxASSERT(m_selectedStructure);
534 return static_cast<int>(m_selectedStructure->subBasinSplitters.size());
535 }
536
543 return m_solver;
544 }
545
552 return m_timer;
553 }
554
562 wxASSERT(m_selectedStructure);
563 return m_selectedStructure->hydroUnitBricks[index];
564 }
565
572 BrickSettings GetHydroUnitBrickSettings(const string& name) const {
573 wxASSERT(m_selectedStructure);
574
575 for (auto& brick : m_selectedStructure->hydroUnitBricks) {
576 if (brick.name == name) {
577 return brick;
578 }
579 }
580
581 throw std::runtime_error("Brick not found.");
582 }
583
591 wxASSERT(m_selectedStructure);
592 int brickIndex = m_selectedStructure->surfaceComponentBricks[index];
593 return m_selectedStructure->hydroUnitBricks[brickIndex];
594 }
595
602 wxASSERT(m_selectedStructure);
603 return m_selectedStructure->surfaceComponentBricks;
604 }
605
612 wxASSERT(m_selectedStructure);
613 return m_selectedStructure->landCoverBricks;
614 }
615
621 vecStr GetLandCoverBricksNames() const;
622
630 wxASSERT(m_selectedStructure);
631 return m_selectedStructure->subBasinBricks[index];
632 }
633
641 wxASSERT(m_selectedBrick);
642 return m_selectedBrick->processes[index];
643 }
644
652 wxASSERT(m_selectedStructure);
653 return m_selectedStructure->hydroUnitSplitters[index];
654 }
655
663 wxASSERT(m_selectedStructure);
664 return m_selectedStructure->subBasinSplitters[index];
665 }
666
672 vecStr GetSubBasinLogLabels();
673
680
686 vecStr GetHydroUnitLogLabels();
687
693 void SetLogAll(bool logAll = true) {
694 if (logAll) {
695 wxLogVerbose("Logging all components.");
696 } else {
697 wxLogVerbose("Minimal logging.");
698 }
699 m_logAll = logAll;
700 }
701
707 bool LogAll() {
708 return m_logAll;
709 }
710
711 protected:
712 bool m_logAll;
713 vector<ModelStructure> m_modelStructures;
714 SolverSettings m_solver;
715 TimerSettings m_timer;
716 ModelStructure* m_selectedStructure;
717 BrickSettings* m_selectedBrick;
718 ProcessSettings* m_selectedProcess;
719 SplitterSettings* m_selectedSplitter;
720
721 bool LogAll(const YAML::Node& settings);
722};
723
724#endif // HYDROBRICKS_SETTINGS_MODEL_H
Definition SettingsModel.h:66
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:377
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:54
vecInt GetLandCoverBricksIndices() const
Definition SettingsModel.h:611
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:345
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:730
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:276
ProcessSettings GetProcessSettings(int index) const
Definition SettingsModel.h:640
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:328
BrickSettings GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:572
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:157
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:294
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:417
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:206
vecStr GetSubBasinGenericLogLabels()
Definition SettingsModel.cpp:717
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess)
Definition SettingsModel.cpp:472
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:693
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:146
void SelectSubBasinSplitter(int index)
Definition SettingsModel.cpp:606
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:47
int GetProcessesNb() const
Definition SettingsModel.h:512
vecStr GetSubBasinLogLabels()
Definition SettingsModel.cpp:686
void SelectProcess(int index)
Definition SettingsModel.cpp:566
void AddSplitterOutput(const string &target, const string &fluxType="water")
Definition SettingsModel.cpp:359
bool LogAll()
Definition SettingsModel.h:707
int GetHydroUnitSplittersNb() const
Definition SettingsModel.h:522
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:585
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:117
SplitterSettings GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:651
bool SelectSubBasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:535
bool SelectStructure(int id)
Definition SettingsModel.cpp:490
BrickSettings GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:590
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:555
vecStr GetHydroUnitLogLabels()
Definition SettingsModel.cpp:649
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:542
void AddProcessOutput(const string &target, const string &fluxType="water")
Definition SettingsModel.cpp:259
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:613
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:94
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:268
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:368
BrickSettings GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:561
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:601
int GetSubBasinSplittersNb() const
Definition SettingsModel.h:532
int GetSubBasinBricksNb() const
Definition SettingsModel.h:492
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:43
void SetBrickParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:129
void GenerateSnowpacks(const string &snowMeltProcess, bool snowIceTransformation=false)
Definition SettingsModel.cpp:453
int GetHydroUnitBricksNb() const
Definition SettingsModel.h:482
BrickSettings GetSubBasinBrickSettings(int index) const
Definition SettingsModel.h:629
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:388
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:506
int GetStructuresNb() const
Definition SettingsModel.h:473
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:226
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:551
bool SelectSubBasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:625
SplitterSettings GetSubBasinSplitterSettings(int index) const
Definition SettingsModel.h:662
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:408
void GeneratePrecipitationSplitters(bool withSnow)
Definition SettingsModel.cpp:426
void SelectSubBasinBrick(int index)
Definition SettingsModel.cpp:514
void AddSurfaceComponentBrick(const string &name, const string &type)
Definition SettingsModel.cpp:105
void AddSubBasinBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:74
void SelectHydroUnitSplitter(int index)
Definition SettingsModel.cpp:599
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:112
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:676
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:243
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:284
int GetSurfaceComponentBricksNb() const
Definition SettingsModel.h:502
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:522
Definition SettingsModel.h:45
Definition SettingsModel.h:55
Definition SettingsModel.h:20
Definition SettingsModel.h:27
Definition SettingsModel.h:9
Definition SettingsModel.h:36
Definition SettingsModel.h:13