hydrobricks
Loading...
Searching...
No Matches
RiverNetwork.h
1#ifndef HYDROBRICKS_RIVER_NETWORK_H
2#define HYDROBRICKS_RIVER_NETWORK_H
3
4#include <memory>
5#include <unordered_map>
6#include <vector>
7
8#include "Includes.h"
9#include "Reach.h"
10#include "SettingsBasin.h"
11#include "SettingsModel.h"
12#include "Subbasin.h"
13
25 public:
26 RiverNetwork() = default;
27
28 virtual ~RiverNetwork() = default;
29
37 [[nodiscard]] ModelResult Initialize(SettingsBasin& basinSettings);
38
44 [[nodiscard]] int GetSubbasinCount() const {
45 return static_cast<int>(_subbasins.size());
46 }
47
54 [[nodiscard]] Subbasin* GetSubbasin(size_t index) const;
55
62 [[nodiscard]] Subbasin* GetSubbasinById(int id) const;
63
69 [[nodiscard]] Subbasin* GetOutlet() const {
70 return _outlet;
71 }
72
78 [[nodiscard]] const std::vector<Subbasin*>& GetProcessingOrder() const {
79 return _order;
80 }
81
88 [[nodiscard]] const std::vector<Subbasin*>& GetUpstreamSubbasins(const Subbasin* subbasin) const;
89
98 void TransferInflow(Subbasin* subbasin, double timeStepInDays);
99
105 void SetChannelRouting(const ChannelRoutingSettings& settings);
106
113 [[nodiscard]] ModelResult AssignFractions(SettingsBasin& basinSettings);
114
118 void Reset();
119
123 void SaveAsInitialState();
124
131 [[nodiscard]] Reach* GetReach(size_t index) const;
132
139 [[nodiscard]] HydroUnit* GetHydroUnitById(int id) const;
140
146 [[nodiscard]] int GetHydroUnitCount() const;
147
153 [[nodiscard]] vecInt GetSubbasinIds() const;
154
160 [[nodiscard]] vecInt GetSubbasinDownstreamIds() const;
161
167 [[nodiscard]] vecDouble GetSubbasinLocalAreas() const;
168
174 [[nodiscard]] vecDouble GetSubbasinDrainedAreas() const;
175
181 [[nodiscard]] double GetTotalArea() const;
182
183 protected:
184 std::vector<std::unique_ptr<Subbasin>> _subbasins; // owning, in declaration order
185 std::unordered_map<int, Subbasin*> _subbasinMap; // non-owning views into _subbasins
186 std::unordered_map<int, HydroUnit*> _hydroUnitMap; // non-owning views into the subbasins' units
187 std::vector<Subbasin*> _order; // non-owning, upstream first
188 Subbasin* _outlet = nullptr; // non-owning
189 std::vector<std::unique_ptr<Reach>> _reaches; // owning, aligned with _subbasins
190 std::unordered_map<const Subbasin*, std::vector<Subbasin*>> _upstream; // non-owning views
191
192 private:
199 void Build(SettingsBasin& basinSettings);
200
204 void BuildProcessingOrder();
205
209 void ComputeDrainedAreas();
210
214 void BuildReaches();
215};
216
217#endif // HYDROBRICKS_RIVER_NETWORK_H
Definition HydroUnit.h:18
Definition Reach.h:25
Definition RiverNetwork.h:24
void SetChannelRouting(const ChannelRoutingSettings &settings)
Definition RiverNetwork.cpp:118
double GetTotalArea() const
Definition RiverNetwork.cpp:259
vecDouble GetSubbasinDrainedAreas() const
Definition RiverNetwork.cpp:250
Reach * GetReach(size_t index) const
Definition RiverNetwork.cpp:145
void SaveAsInitialState()
Definition RiverNetwork.cpp:139
vecInt GetSubbasinIds() const
Definition RiverNetwork.cpp:223
void Reset()
Definition RiverNetwork.cpp:133
vecDouble GetSubbasinLocalAreas() const
Definition RiverNetwork.cpp:241
Subbasin * GetSubbasinById(int id) const
Definition RiverNetwork.cpp:194
const std::vector< Subbasin * > & GetUpstreamSubbasins(const Subbasin *subbasin) const
Definition RiverNetwork.cpp:202
int GetHydroUnitCount() const
Definition RiverNetwork.cpp:215
int GetSubbasinCount() const
Definition RiverNetwork.h:44
vecInt GetSubbasinDownstreamIds() const
Definition RiverNetwork.cpp:232
const std::vector< Subbasin * > & GetProcessingOrder() const
Definition RiverNetwork.h:78
ModelResult Initialize(SettingsBasin &basinSettings)
Definition RiverNetwork.cpp:5
ModelResult AssignFractions(SettingsBasin &basinSettings)
Definition RiverNetwork.cpp:124
HydroUnit * GetHydroUnitById(int id) const
Definition RiverNetwork.cpp:206
Subbasin * GetOutlet() const
Definition RiverNetwork.h:69
Subbasin * GetSubbasin(size_t index) const
Definition RiverNetwork.cpp:189
void TransferInflow(Subbasin *subbasin, double timeStepInDays)
Definition RiverNetwork.cpp:110
Definition SettingsBasin.h:62
Definition Subbasin.h:17
Definition SettingsModel.h:23