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 ModelResult InitializeWithBasin(SettingsModel& modelSettings, SettingsBasin& basinSettings);
28
37 ModelResult 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() const;
67
73 [[nodiscard]] ModelResult Run();
74
78 void Reset();
79
83 void SaveAsInitialState();
84
91 bool DumpOutputs(const string& path);
92
98 axd GetOutletDischarge() const;
99
105 [[nodiscard]] double GetTotalOutletDischarge() const;
106
112 [[nodiscard]] double GetTotalET() const;
113
119 [[nodiscard]] double GetTotalWaterStorageChanges() const;
120
126 [[nodiscard]] double GetTotalSnowStorageChanges() const;
127
128 /*
129 * Get the total change in glacier storage.
130 *
131 * @return total change in glacier storage.
132 */
133 [[nodiscard]] double GetTotalGlacierStorageChanges() const;
134
141 bool AddTimeSeries(std::unique_ptr<TimeSeries> timeSeries);
142
149 bool AddAction(Action* action);
150
156 [[nodiscard]] int GetActionCount() const;
157
163 [[nodiscard]] 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 _ownedSubBasin.reset();
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 std::unique_ptr<SubBasin> _ownedSubBasin; // owning: set only when ModelHydro creates the SubBasin
246 SubBasin* _subBasin; // non-owning view (points to _ownedSubBasin or an external SubBasin)
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 ModelResult InitializeTimeSeries();
255
256 ModelResult UpdateForcing();
257};
258
259#endif // HYDROBRICKS_MODEL_HYDRO_H
Definition Action.h:7
Definition ActionsManager.h:11
Definition Logger.h:8
Definition ModelHydro.h:14
TimeMachine * GetTimeMachine()
Definition ModelHydro.h:212
Logger * GetLogger()
Definition ModelHydro.h:230
void Validate() const
Definition ModelHydro.cpp:82
bool ForcingLoaded() const
Definition ModelHydro.cpp:86
bool AttachTimeSeriesToHydroUnits()
Definition ModelHydro.cpp:215
void SaveAsInitialState()
Definition ModelHydro.cpp:124
bool IsValid() const
Definition ModelHydro.cpp:76
double GetTotalWaterStorageChanges() const
Definition ModelHydro.cpp:144
bool AddTimeSeries(std::unique_ptr< TimeSeries > timeSeries)
Definition ModelHydro.cpp:156
Processor * GetProcessor()
Definition ModelHydro.h:221
bool DumpOutputs(const string &path)
Definition ModelHydro.cpp:128
void UpdateParameters(SettingsModel &modelSettings)
Definition ModelHydro.cpp:63
int GetActionCount() const
Definition ModelHydro.cpp:189
double GetTotalSnowStorageChanges() const
Definition ModelHydro.cpp:148
bool AddAction(Action *action)
Definition ModelHydro.cpp:185
ActionsManager * GetActionsManager()
Definition ModelHydro.h:239
double GetTotalET() const
Definition ModelHydro.cpp:140
SubBasin * GetSubBasin() const
Definition ModelHydro.h:193
ModelResult Run()
Definition ModelHydro.cpp:90
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:197
ModelResult Initialize(SettingsModel &modelSettings, SettingsBasin &basinSettings, bool checkProcesses=true)
Definition ModelHydro.cpp:27
void ClearTimeSeries()
Definition ModelHydro.cpp:211
double GetTotalOutletDischarge() const
Definition ModelHydro.cpp:136
ModelResult InitializeWithBasin(SettingsModel &modelSettings, SettingsBasin &basinSettings)
Definition ModelHydro.cpp:18
int GetSporadicActionItemCount() const
Definition ModelHydro.cpp:193
axd GetOutletDischarge() const
Definition ModelHydro.cpp:132
void Reset()
Definition ModelHydro.cpp:117
Definition ParametersUpdater.h:8
Definition Processor.h:12
Definition SettingsBasin.h:47
Definition SettingsModel.h:68
Definition SubBasin.h:14
Definition TimeMachine.h:9