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
322 void GenerateSnowpacks(const string& snowMeltProcess);
323
330 void AddSnowIceTransformation(const string& transformationProcess = "transform:snow_ice_constant");
331
338 void AddSnowRedistribution(const string& redistributionProcess = "transport:snow_slide", bool skipGlaciers = false);
339
346 void GenerateSnowpacksWithWaterRetention(const string& snowMeltProcess, const string& outflowProcess);
347
354 bool SelectStructure(int id);
355
361 void SelectHydroUnitBrick(int index);
362
368 void SelectSubBasinBrick(int index);
369
376 bool SelectHydroUnitBrickIfFound(const string& name);
377
384 bool SelectSubBasinBrickIfFound(const string& name);
385
391 void SelectHydroUnitBrick(const string& name);
392
399 void SelectHydroUnitBrickByName(const string& name);
400
406 void SelectSubBasinBrick(const string& name);
407
413 void SelectProcess(int index);
414
420 void SelectProcess(const string& name);
421
427 void SelectProcessWithParameter(const string& name);
428
434 void SelectHydroUnitSplitter(int index);
435
441 void SelectSubBasinSplitter(int index);
442
449 bool SelectHydroUnitSplitterIfFound(const string& name);
450
457 bool SelectSubBasinSplitterIfFound(const string& name);
458
464 void SelectHydroUnitSplitter(const string& name);
465
471 void SelectSubBasinSplitter(const string& name);
472
481 bool SetParameterValue(const string& component, const string& name, float value);
482
488 int GetStructuresNb() const {
489 return static_cast<int>(_modelStructures.size());
490 }
491
498 wxASSERT(_selectedStructure);
499 return static_cast<int>(_selectedStructure->hydroUnitBricks.size());
500 }
501
508 wxASSERT(_selectedStructure);
509 return static_cast<int>(_selectedStructure->subBasinBricks.size());
510 }
511
518 wxASSERT(_selectedStructure);
519 return static_cast<int>(_selectedStructure->surfaceComponentBricks.size());
520 }
521
527 int GetProcessesNb() const {
528 wxASSERT(_selectedBrick);
529 return static_cast<int>(_selectedBrick->processes.size());
530 }
531
538 wxASSERT(_selectedStructure);
539 return static_cast<int>(_selectedStructure->hydroUnitSplitters.size());
540 }
541
548 wxASSERT(_selectedStructure);
549 return static_cast<int>(_selectedStructure->subBasinSplitters.size());
550 }
551
558 return _solver;
559 }
560
567 return _timer;
568 }
569
577 wxASSERT(_selectedStructure);
578 return _selectedStructure->hydroUnitBricks[index];
579 }
580
587 BrickSettings GetHydroUnitBrickSettings(const string& name) const {
588 wxASSERT(_selectedStructure);
589
590 for (auto& brick : _selectedStructure->hydroUnitBricks) {
591 if (brick.name == name) {
592 return brick;
593 }
594 }
595
596 throw std::runtime_error("Brick not found.");
597 }
598
606 wxASSERT(_selectedStructure);
607 int brickIndex = _selectedStructure->surfaceComponentBricks[index];
608 return _selectedStructure->hydroUnitBricks[brickIndex];
609 }
610
617 wxASSERT(_selectedStructure);
618 return _selectedStructure->surfaceComponentBricks;
619 }
620
627 wxASSERT(_selectedStructure);
628 return _selectedStructure->landCoverBricks;
629 }
630
636 vecStr GetLandCoverBricksNames() const;
637
645 wxASSERT(_selectedStructure);
646 return _selectedStructure->subBasinBricks[index];
647 }
648
656 wxASSERT(_selectedBrick);
657 return _selectedBrick->processes[index];
658 }
659
667 wxASSERT(_selectedStructure);
668 return _selectedStructure->hydroUnitSplitters[index];
669 }
670
678 wxASSERT(_selectedStructure);
679 return _selectedStructure->subBasinSplitters[index];
680 }
681
687 vecStr GetSubBasinLogLabels();
688
695
701 vecStr GetHydroUnitLogLabels();
702
708 void SetLogAll(bool logAll = true) {
709 if (logAll) {
710 wxLogVerbose("Logging all components.");
711 } else {
712 wxLogVerbose("Minimal logging.");
713 }
714 _logAll = logAll;
715 }
716
722 bool LogAll() {
723 return _logAll;
724 }
725
726 protected:
727 bool _logAll;
728 vector<ModelStructure> _modelStructures;
729 SolverSettings _solver;
730 TimerSettings _timer;
731 ModelStructure* _selectedStructure;
732 BrickSettings* _selectedBrick;
733 ProcessSettings* _selectedProcess;
734 SplitterSettings* _selectedSplitter;
735
736 bool LogAll(const YAML::Node& settings);
737};
738
739#endif // HYDROBRICKS_SETTINGS_MODEL_H
Definition SettingsModel.h:66
void AddLoggingToItems(std::initializer_list< const string > items)
Definition SettingsModel.cpp:380
void AddHydroUnitBrick(const string &name, const std::string &type="storage")
Definition SettingsModel.cpp:54
vecInt GetLandCoverBricksIndices() const
Definition SettingsModel.h:626
void AddSplitterParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:319
void AddSubBasinSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:308
void AddSplitterForcing(const string &name)
Definition SettingsModel.cpp:348
bool SetParameterValue(const string &component, const string &name, float value)
Definition SettingsModel.cpp:755
void SetProcessOutputsAsStatic()
Definition SettingsModel.cpp:279
ProcessSettings GetProcessSettings(int index) const
Definition SettingsModel.h:655
void SetSplitterParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:331
BrickSettings GetHydroUnitBrickSettings(const string &name) const
Definition SettingsModel.h:587
void AddBrickForcing(const string &name)
Definition SettingsModel.cpp:157
void AddHydroUnitSplitter(const string &name, const string &type)
Definition SettingsModel.cpp:297
void AddSplitterLogging(const string &itemName)
Definition SettingsModel.cpp:420
void AddProcessParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:209
vecStr GetSubBasinGenericLogLabels()
Definition SettingsModel.cpp:742
void GenerateSnowpacksWithWaterRetention(const string &snowMeltProcess, const string &outflowProcess)
Definition SettingsModel.cpp:497
void SetLogAll(bool logAll=true)
Definition SettingsModel.h:708
bool BrickHasParameter(const string &name)
Definition SettingsModel.cpp:146
void SelectSubBasinSplitter(int index)
Definition SettingsModel.cpp:631
void SetTimer(const string &start, const string &end, int timeStep, const string &timeStepUnit)
Definition SettingsModel.cpp:47
int GetProcessesNb() const
Definition SettingsModel.h:527
vecStr GetSubBasinLogLabels()
Definition SettingsModel.cpp:711
void SelectProcess(int index)
Definition SettingsModel.cpp:591
void AddSplitterOutput(const string &target, const string &fluxType="water")
Definition SettingsModel.cpp:362
bool LogAll()
Definition SettingsModel.h:722
int GetHydroUnitSplittersNb() const
Definition SettingsModel.h:537
void SelectProcessWithParameter(const string &name)
Definition SettingsModel.cpp:610
void AddBrickParameter(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:117
SplitterSettings GetHydroUnitSplitterSettings(int index) const
Definition SettingsModel.h:666
bool SelectSubBasinBrickIfFound(const string &name)
Definition SettingsModel.cpp:560
bool SelectStructure(int id)
Definition SettingsModel.cpp:515
BrickSettings GetSurfaceComponentBrickSettings(int index) const
Definition SettingsModel.h:605
void SelectHydroUnitBrickByName(const string &name)
Definition SettingsModel.cpp:580
vecStr GetHydroUnitLogLabels()
Definition SettingsModel.cpp:674
SolverSettings GetSolverSettings() const
Definition SettingsModel.h:557
void AddProcessOutput(const string &target, const string &fluxType="water")
Definition SettingsModel.cpp:262
bool SelectHydroUnitSplitterIfFound(const string &name)
Definition SettingsModel.cpp:638
void AddLandCoverBrick(const string &name, const string &type)
Definition SettingsModel.cpp:94
void SetProcessOutputsAsInstantaneous()
Definition SettingsModel.cpp:271
void AddLoggingToItem(const string &itemName)
Definition SettingsModel.cpp:371
BrickSettings GetHydroUnitBrickSettings(int index) const
Definition SettingsModel.h:576
void GenerateSnowpacks(const string &snowMeltProcess)
Definition SettingsModel.cpp:456
vecInt GetSurfaceComponentBricksIndices() const
Definition SettingsModel.h:616
void AddSnowRedistribution(const string &redistributionProcess="transport:snow_slide", bool skipGlaciers=false)
Definition SettingsModel.cpp:483
int GetSubBasinSplittersNb() const
Definition SettingsModel.h:547
int GetSubBasinBricksNb() const
Definition SettingsModel.h:507
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
int GetHydroUnitBricksNb() const
Definition SettingsModel.h:497
BrickSettings GetSubBasinBrickSettings(int index) const
Definition SettingsModel.h:644
void AddBrickLogging(const string &itemName)
Definition SettingsModel.cpp:391
void SelectHydroUnitBrick(int index)
Definition SettingsModel.cpp:531
int GetStructuresNb() const
Definition SettingsModel.h:488
void SetProcessParameterValue(const string &name, float value, const std::string &type="constant")
Definition SettingsModel.cpp:229
TimerSettings GetTimerSettings() const
Definition SettingsModel.h:566
bool SelectSubBasinSplitterIfFound(const string &name)
Definition SettingsModel.cpp:650
void AddSnowIceTransformation(const string &transformationProcess="transform:snow_ice_constant")
Definition SettingsModel.cpp:470
SplitterSettings GetSubBasinSplitterSettings(int index) const
Definition SettingsModel.h:677
void AddProcessLogging(const string &itemName)
Definition SettingsModel.cpp:411
void GeneratePrecipitationSplitters(bool withSnow)
Definition SettingsModel.cpp:429
void SelectSubBasinBrick(int index)
Definition SettingsModel.cpp:539
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:624
void SetSurfaceComponentParent(const string &name)
Definition SettingsModel.cpp:112
vecStr GetLandCoverBricksNames() const
Definition SettingsModel.cpp:701
void AddProcessForcing(const string &name)
Definition SettingsModel.cpp:246
void OutputProcessToSameBrick()
Definition SettingsModel.cpp:287
int GetSurfaceComponentBricksNb() const
Definition SettingsModel.h:517
bool SelectHydroUnitBrickIfFound(const string &name)
Definition SettingsModel.cpp:547
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