hydrobricks
Loading...
Searching...
No Matches
ModelHydro.h
1#ifndef HYDROBRICKS_MODEL_HYDRO_H
2#define HYDROBRICKS_MODEL_HYDRO_H
3
4#include <memory>
5
6#include "ActionsManager.h"
7#include "Includes.h"
8#include "Logger.h"
9#include "Processor.h"
10#include "SettingsModel.h"
11#include "SubBasin.h"
12#include "TimeSeries.h"
13
14class ModelHydro : public wxObject {
15 public:
16 ModelHydro(SubBasin* subBasin = nullptr);
17
18 ~ModelHydro() override;
19
27 bool InitializeWithBasin(SettingsModel& modelSettings, SettingsBasin& basinSettings);
28
37 bool Initialize(SettingsModel& modelSettings, SettingsBasin& basinSettings, bool checkProcesses = true);
38
44 void UpdateParameters(SettingsModel& modelSettings);
45
51 [[nodiscard]] bool IsValid() const;
52
59 void Validate() const;
60
66 [[nodiscard]] bool ForcingLoaded();
67
73 [[nodiscard]] bool Run();
74
78 void Reset();
79
83 void SaveAsInitialState();
84
91 bool DumpOutputs(const string& path);
92
98 axd GetOutletDischarge() const;
99
105 double GetTotalOutletDischarge() const;
106
112 double GetTotalET() const;
113
119 double GetTotalWaterStorageChanges() const;
120
126 double GetTotalSnowStorageChanges() const;
127
128 /*
129 * Get the total change in glacier storage.
130 *
131 * @return total change in glacier storage.
132 */
133 double GetTotalGlacierStorageChanges() const;
134
141 bool AddTimeSeries(std::unique_ptr<TimeSeries> timeSeries);
142
149 bool AddAction(Action* action);
150
156 int GetActionCount() const;
157
163 int GetSporadicActionItemCount() const;
164
174 bool CreateTimeSeries(const string& varName, const axd& time, const axi& ids, const axxd& data);
175
179 void ClearTimeSeries();
180
187
194 return _subBasin; // Return raw pointer from unique_ptr
195 }
196
202 void SetSubBasin(SubBasin* subBasin) {
203 wxDELETE(_subBasin);
204 _subBasin = subBasin;
205 }
206
213 return &_timer;
214 }
215
222 return &_processor;
223 }
224
231 return &_logger;
232 }
233
240 return &_actionsManager;
241 }
242
243 protected:
244 Processor _processor;
245 SubBasin* _subBasin; // owning, but not a unique pointer (can be null)
246 TimeMachine _timer;
247 Logger _logger;
248 ActionsManager _actionsManager;
249 ParametersUpdater _parametersUpdater;
250 std::vector<std::unique_ptr<TimeSeries>> _timeSeries; // owning
251
252 private:
253 void BuildModelStructure(SettingsModel& modelSettings);
254
255 void CreateSubBasinComponents(SettingsModel& modelSettings);
256
257 void CreateHydroUnitsComponents(SettingsModel& modelSettings);
258
259 void CreateHydroUnitBrick(SettingsModel& modelSettings, HydroUnit* unit, int iBrick);
260
261 void UpdateSubBasinParameters(SettingsModel& modelSettings);
262
263 void UpdateHydroUnitsParameters(SettingsModel& modelSettings);
264
265 void LinkSurfaceComponentsParents(SettingsModel& modelSettings, HydroUnit* unit);
266
267 void LinkSubBasinProcessesTargetBricks(SettingsModel& modelSettings);
268
269 void LinkHydroUnitProcessesTargetBricks(SettingsModel& modelSettings, HydroUnit* unit);
270
271 void BuildForcingConnections(const BrickSettings& brickSettings, HydroUnit* unit, Brick* brick);
272
273 void BuildForcingConnections(const ProcessSettings& processSettings, HydroUnit* unit, Process* process);
274
275 void BuildForcingConnections(const SplitterSettings& splitterSettings, HydroUnit* unit, Splitter* splitter);
276
277 void BuildSubBasinBricksFluxes(SettingsModel& modelSettings);
278
279 void BuildHydroUnitBricksFluxes(SettingsModel& modelSettings, HydroUnit* unit);
280
281 void BuildSubBasinSplittersFluxes(SettingsModel& modelSettings);
282
283 void BuildHydroUnitSplittersFluxes(SettingsModel& modelSettings, HydroUnit* unit);
284
285 void ConnectLoggerToValues(SettingsModel& modelSettings);
286
287 bool InitializeTimeSeries();
288
289 bool UpdateForcing();
290};
291
292#endif // HYDROBRICKS_MODEL_HYDRO_H
Definition Action.h:7
Definition ActionsManager.h:11
Definition Brick.h:24
Definition HydroUnit.h:18
Definition Logger.h:8
Definition ModelHydro.h:14
bool Initialize(SettingsModel &modelSettings, SettingsBasin &basinSettings, bool checkProcesses=true)
Definition ModelHydro.cpp:38
TimeMachine * GetTimeMachine()
Definition ModelHydro.h:212
Logger * GetLogger()
Definition ModelHydro.h:230
void Validate() const
Definition ModelHydro.cpp:906
bool AttachTimeSeriesToHydroUnits()
Definition ModelHydro.cpp:1041
bool InitializeWithBasin(SettingsModel &modelSettings, SettingsBasin &basinSettings)
Definition ModelHydro.cpp:26
void SaveAsInitialState()
Definition ModelHydro.cpp:950
bool IsValid() const
Definition ModelHydro.cpp:900
double GetTotalWaterStorageChanges() const
Definition ModelHydro.cpp:970
bool AddTimeSeries(std::unique_ptr< TimeSeries > timeSeries)
Definition ModelHydro.cpp:982
Processor * GetProcessor()
Definition ModelHydro.h:221
bool ForcingLoaded()
Definition ModelHydro.cpp:910
bool Run()
Definition ModelHydro.cpp:914
bool DumpOutputs(const string &path)
Definition ModelHydro.cpp:954
void UpdateParameters(SettingsModel &modelSettings)
Definition ModelHydro.cpp:93
int GetActionCount() const
Definition ModelHydro.cpp:1015
double GetTotalSnowStorageChanges() const
Definition ModelHydro.cpp:974
bool AddAction(Action *action)
Definition ModelHydro.cpp:1011
ActionsManager * GetActionsManager()
Definition ModelHydro.h:239
double GetTotalET() const
Definition ModelHydro.cpp:966
SubBasin * GetSubBasin() const
Definition ModelHydro.h:193
void SetSubBasin(SubBasin *subBasin)
Definition ModelHydro.h:202
bool CreateTimeSeries(const string &varName, const axd &time, const axi &ids, const axxd &data)
Definition ModelHydro.cpp:1023
void ClearTimeSeries()
Definition ModelHydro.cpp:1037
double GetTotalOutletDischarge() const
Definition ModelHydro.cpp:962
int GetSporadicActionItemCount() const
Definition ModelHydro.cpp:1019
axd GetOutletDischarge() const
Definition ModelHydro.cpp:958
void Reset()
Definition ModelHydro.cpp:943
Definition ParametersUpdater.h:8
Definition Process.h:15
Definition Processor.h:12
Definition SettingsBasin.h:47
Definition SettingsModel.h:68
Definition Splitter.h:13
Definition SubBasin.h:14
Definition TimeMachine.h:9
Definition SettingsModel.h:47
Definition SettingsModel.h:29
Definition SettingsModel.h:38