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
15 public:
16 ModelHydro(SubBasin* subBasin = nullptr);
17
18 virtual ~ModelHydro();
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 delete _subBasin;
204 _subBasin = nullptr;
205 _subBasin = subBasin;
206 }
207
214 return &_timer;
215 }
216
223 return &_processor;
224 }
225
232 return &_logger;
233 }
234
241 return &_actionsManager;
242 }
243
244 protected:
245 Processor _processor;
246 SubBasin* _subBasin; // owning, but not a unique pointer (can be null)
247 TimeMachine _timer;
248 Logger _logger;
249 ActionsManager _actionsManager;
250 ParametersUpdater _parametersUpdater;
251 std::vector<std::unique_ptr<TimeSeries>> _timeSeries; // owning
252
253 private:
254 void BuildModelStructure(SettingsModel& modelSettings);
255
256 void CreateSubBasinComponents(SettingsModel& modelSettings);
257
258 void CreateHydroUnitsComponents(SettingsModel& modelSettings);
259
260 void CreateHydroUnitBrick(SettingsModel& modelSettings, HydroUnit* unit, int iBrick);
261
262 void UpdateSubBasinParameters(SettingsModel& modelSettings);
263
264 void UpdateHydroUnitsParameters(SettingsModel& modelSettings);
265
266 void LinkSurfaceComponentsParents(SettingsModel& modelSettings, HydroUnit* unit);
267
268 void LinkSubBasinProcessesTargetBricks(SettingsModel& modelSettings);
269
270 void LinkHydroUnitProcessesTargetBricks(SettingsModel& modelSettings, HydroUnit* unit);
271
272 void BuildForcingConnections(const BrickSettings& brickSettings, HydroUnit* unit, Brick* brick);
273
274 void BuildForcingConnections(const ProcessSettings& processSettings, HydroUnit* unit, Process* process);
275
276 void BuildForcingConnections(const SplitterSettings& splitterSettings, HydroUnit* unit, Splitter* splitter);
277
278 void BuildSubBasinBricksFluxes(SettingsModel& modelSettings);
279
280 void BuildHydroUnitBricksFluxes(SettingsModel& modelSettings, HydroUnit* unit);
281
282 void BuildSubBasinSplittersFluxes(SettingsModel& modelSettings);
283
284 void BuildHydroUnitSplittersFluxes(SettingsModel& modelSettings, HydroUnit* unit);
285
286 void ConnectLoggerToValues(SettingsModel& modelSettings);
287
288 bool InitializeTimeSeries();
289
290 bool UpdateForcing();
291};
292
293#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:213
Logger * GetLogger()
Definition ModelHydro.h:231
void Validate() const
Definition ModelHydro.cpp:900
bool AttachTimeSeriesToHydroUnits()
Definition ModelHydro.cpp:1035
bool InitializeWithBasin(SettingsModel &modelSettings, SettingsBasin &basinSettings)
Definition ModelHydro.cpp:26
void SaveAsInitialState()
Definition ModelHydro.cpp:944
bool IsValid() const
Definition ModelHydro.cpp:894
double GetTotalWaterStorageChanges() const
Definition ModelHydro.cpp:964
bool AddTimeSeries(std::unique_ptr< TimeSeries > timeSeries)
Definition ModelHydro.cpp:976
Processor * GetProcessor()
Definition ModelHydro.h:222
bool ForcingLoaded()
Definition ModelHydro.cpp:904
bool Run()
Definition ModelHydro.cpp:908
bool DumpOutputs(const string &path)
Definition ModelHydro.cpp:948
void UpdateParameters(SettingsModel &modelSettings)
Definition ModelHydro.cpp:92
int GetActionCount() const
Definition ModelHydro.cpp:1009
double GetTotalSnowStorageChanges() const
Definition ModelHydro.cpp:968
bool AddAction(Action *action)
Definition ModelHydro.cpp:1005
ActionsManager * GetActionsManager()
Definition ModelHydro.h:240
double GetTotalET() const
Definition ModelHydro.cpp:960
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:1017
void ClearTimeSeries()
Definition ModelHydro.cpp:1031
double GetTotalOutletDischarge() const
Definition ModelHydro.cpp:956
int GetSporadicActionItemCount() const
Definition ModelHydro.cpp:1013
axd GetOutletDischarge() const
Definition ModelHydro.cpp:952
void Reset()
Definition ModelHydro.cpp:937
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