hydrobricks
Loading...
Searching...
No Matches
ModelHydro.h
1#ifndef HYDROBRICKS_MODEL_HYDRO_H
2#define HYDROBRICKS_MODEL_HYDRO_H
3
4#include "BehavioursManager.h"
5#include "Includes.h"
6#include "Logger.h"
7#include "Processor.h"
8#include "SettingsModel.h"
9#include "SubBasin.h"
10#include "TimeSeries.h"
11
12class ModelHydro : public wxObject {
13 public:
14 ModelHydro(SubBasin* subBasin = nullptr);
15
16 ~ModelHydro() override;
17
18 bool InitializeWithBasin(SettingsModel& modelSettings, SettingsBasin& basinSettings);
19
20 bool Initialize(SettingsModel& modelSettings, SettingsBasin& basinProp);
21
22 void UpdateParameters(SettingsModel& modelSettings);
23
24 bool IsOk();
25
26 bool ForcingLoaded();
27
28 bool Run();
29
30 void Reset();
31
32 void SaveAsInitialState();
33
34 bool DumpOutputs(const string& path);
35
36 axd GetOutletDischarge();
37
38 double GetTotalOutletDischarge();
39
40 double GetTotalET();
41
42 double GetTotalWaterStorageChanges();
43
44 double GetTotalSnowStorageChanges();
45
46 bool AddTimeSeries(TimeSeries* timeSeries);
47
48 bool AddBehaviour(Behaviour* behaviour);
49
50 int GetBehavioursNb();
51
52 int GetBehaviourItemsNb();
53
54 bool CreateTimeSeries(const string& varName, const axd& time, const axi& ids, const axxd& data);
55
56 void ClearTimeSeries();
57
58 bool AttachTimeSeriesToHydroUnits();
59
60 SubBasin* GetSubBasin() {
61 return m_subBasin;
62 }
63
64 void SetSubBasin(SubBasin* subBasin) {
65 m_subBasin = subBasin;
66 }
67
68 TimeMachine* GetTimeMachine() {
69 return &m_timer;
70 }
71
72 Processor* GetProcessor() {
73 return &m_processor;
74 }
75
76 Logger* GetLogger() {
77 return &m_logger;
78 }
79
80 BehavioursManager* GetBehavioursManager() {
81 return &m_behavioursManager;
82 }
83
84 protected:
85 Processor m_processor;
86 SubBasin* m_subBasin;
87 TimeMachine m_timer;
88 Logger m_logger;
89 BehavioursManager m_behavioursManager;
90 ParametersUpdater m_parametersUpdater;
91 vector<TimeSeries*> m_timeSeries;
92
93 private:
94 void BuildModelStructure(SettingsModel& modelSettings);
95
96 void CreateSubBasinComponents(SettingsModel& modelSettings);
97
98 void CreateHydroUnitsComponents(SettingsModel& modelSettings);
99
100 void CreateHydroUnitBrick(SettingsModel& modelSettings, HydroUnit* unit, int iBrick);
101
102 void UpdateSubBasinParameters(SettingsModel& modelSettings);
103
104 void UpdateHydroUnitsParameters(SettingsModel& modelSettings);
105
106 void LinkSurfaceComponentsParents(SettingsModel& modelSettings, HydroUnit* unit);
107
108 void LinkSubBasinProcessesTargetBricks(SettingsModel& modelSettings);
109
110 void LinkHydroUnitProcessesTargetBricks(SettingsModel& modelSettings, HydroUnit* unit);
111
112 void BuildForcingConnections(BrickSettings& brickSettings, HydroUnit* unit, Brick* brick);
113
114 void BuildForcingConnections(ProcessSettings& processSettings, HydroUnit* unit, Process* process);
115
116 void BuildForcingConnections(SplitterSettings& splitterSettings, HydroUnit* unit, Splitter* splitter);
117
118 void BuildSubBasinBricksFluxes(SettingsModel& modelSettings);
119
120 void BuildHydroUnitBricksFluxes(SettingsModel& modelSettings, HydroUnit* unit);
121
122 void BuildSubBasinSplittersFluxes(SettingsModel& modelSettings);
123
124 void BuildHydroUnitSplittersFluxes(SettingsModel& modelSettings, HydroUnit* unit);
125
126 void ConnectLoggerToValues(SettingsModel& modelSettings);
127
128 bool InitializeTimeSeries();
129
130 bool UpdateForcing();
131};
132
133#endif // HYDROBRICKS_MODEL_HYDRO_H
Definition Behaviour.h:7
Definition BehavioursManager.h:10
Definition Brick.h:10
Definition HydroUnit.h:13
Definition Logger.h:8
Definition ModelHydro.h:12
Definition ParametersUpdater.h:7
Definition Process.h:13
Definition Processor.h:10
Definition SettingsBasin.h:39
Definition SettingsModel.h:66
Definition Splitter.h:11
Definition SubBasin.h:10
Definition TimeMachine.h:9
Definition TimeSeries.h:8
Definition SettingsModel.h:45
Definition SettingsModel.h:27
Definition SettingsModel.h:36