hydrobricks
Loading...
Searching...
No Matches
SettingsBasin.h
1#ifndef HYDROBRICKS_SETTING_BASIN_H
2#define HYDROBRICKS_SETTING_BASIN_H
3
4#include "Includes.h"
5#include "Parameter.h"
6
7class FileNetcdf;
8
10 string name;
11 string type;
12 double fraction;
13};
14
16 string name;
17 string type;
18 double fraction;
19};
20
22 string name;
23 double value;
24 string unit;
25};
26
28 string name;
29 string value;
30};
31
33 int id;
34 double area;
35 double elevation;
36 int subbasinId = 1; // subbasin the unit drains to (1 when no network is declared)
37 vector<LandCoverSettings> landCovers;
38 vector<SurfaceComponentSettings> surfaceComponents;
39 vector<HydroUnitPropertyDouble> propertiesDouble;
40 vector<HydroUnitPropertyString> propertiesString;
41};
42
44 string type;
45 int giverHydroUnitId;
46 int receiverHydroUnitId;
47 double fraction;
48};
49
55 int id = 1;
56 int downstreamId = 0; // 0: terminal outlet of the network
57 string name;
58 vector<HydroUnitPropertyDouble> propertiesDouble;
59 vector<HydroUnitPropertyString> propertiesString;
60};
61
63 public:
64 explicit SettingsBasin();
65
66 virtual ~SettingsBasin();
67
76 void AddHydroUnit(int id, double area, double elevation = -9999, int subbasinId = 1);
77
85 void AddSubbasin(int id, int downstreamId = 0, const string& name = "");
86
94 void AddSubbasinPropertyDouble(const string& name, double value, const string& unit = "");
95
102 void AddSubbasinPropertyString(const string& name, const string& value);
103
109 void SelectSubbasin(int index);
110
118 [[nodiscard]] ModelResult ValidateNetwork() const;
119
127 void AddLandCover(const string& name, const string& type = "", double fraction = 1.0);
128
136 void AddHydroUnitPropertyDouble(const string& name, double value, const string& unit = "");
137
144 void AddHydroUnitPropertyString(const string& name, const string& value);
145
155 void AddLateralConnection(int giverHydroUnitId, int receiverHydroUnitId, double fraction, const string& type = "");
156
160 void Clear();
161
167 void SelectUnit(int index);
168
175 bool Parse(const string& path);
176
184 assert(_hydroUnits.size() > index);
185 return _hydroUnits[index];
186 }
187
194 const SubbasinSettings& GetSubbasinSettings(int index) const {
195 assert(_subbasins.size() > index);
196 return _subbasins[index];
197 }
198
204 const vector<SubbasinSettings>& GetSubbasins() const {
205 return _subbasins;
206 }
207
213 int GetSubbasinCount() const {
214 return static_cast<int>(_subbasins.size());
215 }
216
224 assert(_selectedHydroUnit);
225 assert(_selectedHydroUnit->landCovers.size() > index);
226 return _selectedHydroUnit->landCovers[index];
227 }
228
236 assert(_selectedHydroUnit);
237 assert(_selectedHydroUnit->surfaceComponents.size() > index);
238 return _selectedHydroUnit->surfaceComponents[index];
239 }
240
246 vector<LateralConnectionSettings> GetLateralConnections() const {
247 return _lateralConnections;
248 }
249
255 int GetHydroUnitCount() const {
256 return static_cast<int>(_hydroUnits.size());
257 }
258
264 int GetLandCoverCount() const {
265 assert(_selectedHydroUnit);
266 return static_cast<int>(_selectedHydroUnit->landCovers.size());
267 }
268
275 assert(_selectedHydroUnit);
276 return static_cast<int>(_selectedHydroUnit->surfaceComponents.size());
277 }
278
285 return static_cast<int>(_lateralConnections.size());
286 }
287
293 [[nodiscard]] double GetTotalArea() const;
294
295 private:
301 void ParseSubbasins(const FileNetcdf& file);
302
303 vector<HydroUnitSettings> _hydroUnits;
304 vector<LateralConnectionSettings> _lateralConnections;
305 vector<SubbasinSettings> _subbasins;
306 HydroUnitSettings* _selectedHydroUnit; // non-owning reference
307 SubbasinSettings* _selectedSubbasin = nullptr; // non-owning reference
308};
309
310#endif // HYDROBRICKS_SETTING_BASIN_H
Definition FileNetcdf.h:8
Definition SettingsBasin.h:62
const SubbasinSettings & GetSubbasinSettings(int index) const
Definition SettingsBasin.h:194
void AddHydroUnitPropertyString(const string &name, const string &value)
Definition SettingsBasin.cpp:150
void SelectUnit(int index)
Definition SettingsBasin.cpp:177
SurfaceComponentSettings GetSurfaceComponentSettings(int index) const
Definition SettingsBasin.h:235
void Clear()
Definition SettingsBasin.cpp:170
ModelResult ValidateNetwork() const
Definition SettingsBasin.cpp:56
void AddSubbasin(int id, int downstreamId=0, const string &name="")
Definition SettingsBasin.cpp:23
LandCoverSettings GetLandCoverSettings(int index) const
Definition SettingsBasin.h:223
void AddLateralConnection(int giverHydroUnitId, int receiverHydroUnitId, double fraction, const string &type="")
Definition SettingsBasin.cpp:159
double GetTotalArea() const
Definition SettingsBasin.cpp:321
int GetSurfaceComponentCount() const
Definition SettingsBasin.h:274
const vector< SubbasinSettings > & GetSubbasins() const
Definition SettingsBasin.h:204
void AddHydroUnitPropertyDouble(const string &name, double value, const string &unit="")
Definition SettingsBasin.cpp:140
void AddHydroUnit(int id, double area, double elevation=-9999, int subbasinId=1)
Definition SettingsBasin.cpp:13
void AddLandCover(const string &name, const string &type="", double fraction=1.0)
Definition SettingsBasin.cpp:130
void SelectSubbasin(int index)
Definition SettingsBasin.cpp:51
HydroUnitSettings GetHydroUnitSettings(int index) const
Definition SettingsBasin.h:183
int GetLateralConnectionCount() const
Definition SettingsBasin.h:284
void AddSubbasinPropertyString(const string &name, const string &value)
Definition SettingsBasin.cpp:42
int GetHydroUnitCount() const
Definition SettingsBasin.h:255
void AddSubbasinPropertyDouble(const string &name, double value, const string &unit="")
Definition SettingsBasin.cpp:32
vector< LateralConnectionSettings > GetLateralConnections() const
Definition SettingsBasin.h:246
int GetSubbasinCount() const
Definition SettingsBasin.h:213
int GetLandCoverCount() const
Definition SettingsBasin.h:264
bool Parse(const string &path)
Definition SettingsBasin.cpp:182
Definition SettingsBasin.h:21
Definition SettingsBasin.h:27
Definition SettingsBasin.h:32
Definition SettingsBasin.h:9
Definition SettingsBasin.h:43
Definition SettingsBasin.h:54
Definition SettingsBasin.h:15