1#ifndef HYDROBRICKS_SUBBASIN_H
2#define HYDROBRICKS_SUBBASIN_H
5#include <unordered_map>
11#include "SettingsBasin.h"
12#include "TimeMachine.h"
41 _hydroUnits.reserve(_hydroUnits.size() + count);
50 _bricks.reserve(_bricks.size() + count);
59 _splitters.reserve(_splitters.size() + count);
68 _inConnectors.reserve(_inConnectors.size() + count);
77 _outConnectors.reserve(_outConnectors.size() + count);
86 _outletFluxes.reserve(_outletFluxes.size() + count);
119 [[nodiscard]]
bool IsValid(
bool checkProcesses =
true)
const;
134 void AddBrick(std::unique_ptr<Brick> brick);
141 void AddSplitter(std::unique_ptr<Splitter> splitter);
171 return !_hydroUnits.empty();
224 [[nodiscard]]
bool HasBrick(
const string& name)
const;
248 [[nodiscard]]
bool HasSplitter(
const string& name)
const;
313 std::vector<std::unique_ptr<Brick>> _bricks;
314 std::unordered_map<string, Brick*> _brickMap;
315 std::vector<std::unique_ptr<Splitter>> _splitters;
316 std::unordered_map<string, Splitter*> _splitterMap;
317 std::vector<std::unique_ptr<HydroUnit>> _hydroUnits;
318 std::unordered_map<int, HydroUnit*> _hydroUnitMap;
319 std::vector<Connector*> _inConnectors;
320 std::vector<Connector*> _outConnectors;
321 std::vector<Flux*> _outletFluxes;
Definition HydroUnit.h:18
Definition SettingsBasin.h:47
bool ComputeOutletDischarge()
Definition SubBasin.cpp:288
void ReserveInputConnectors(size_t count)
Definition SubBasin.h:67
void AddSplitter(std::unique_ptr< Splitter > splitter)
Definition SubBasin.cpp:144
int GetSplitterCount() const
Definition SubBasin.cpp:203
vecInt GetHydroUnitIds() const
Definition SubBasin.cpp:179
bool IsValid(bool checkProcesses=true) const
Definition SubBasin.cpp:112
void SaveAsInitialState()
Definition SubBasin.cpp:103
void AddHydroUnit(std::unique_ptr< HydroUnit > unit)
Definition SubBasin.cpp:151
void ReserveOutletFluxes(size_t count)
Definition SubBasin.h:85
int GetBrickCount() const
Definition SubBasin.cpp:199
void BuildBasin(SettingsBasin &basinSettings)
Definition SubBasin.cpp:29
void Validate() const
Definition SubBasin.cpp:130
double GetArea() const
Definition SubBasin.h:306
vecDouble GetHydroUnitAreas() const
Definition SubBasin.cpp:189
int GetHydroUnitCount() const
Definition SubBasin.cpp:159
void AddBrick(std::unique_ptr< Brick > brick)
Definition SubBasin.cpp:137
void Reset()
Definition SubBasin.cpp:91
HydroUnit * GetHydroUnitById(int id) const
Definition SubBasin.cpp:170
bool AssignFractions(SettingsBasin &basinSettings)
Definition SubBasin.cpp:58
void ReserveBricks(size_t count)
Definition SubBasin.h:49
bool HasSplitter(const string &name) const
Definition SubBasin.cpp:234
bool HasHydroUnits() const
Definition SubBasin.h:170
void ReserveHydroUnits(size_t count)
Definition SubBasin.h:40
void ReserveSplitters(size_t count)
Definition SubBasin.h:58
Brick * GetBrick(size_t index) const
Definition SubBasin.cpp:207
HydroUnit * GetHydroUnit(size_t index) const
Definition SubBasin.cpp:163
bool HasIncomingFlow() const
Definition SubBasin.cpp:260
bool Initialize(SettingsBasin &basinSettings)
Definition SubBasin.cpp:18
Splitter * GetSplitter(size_t index) const
Definition SubBasin.cpp:227
void AttachOutletFlux(Flux *pFlux)
Definition SubBasin.cpp:274
bool HasBrick(const string &name) const
Definition SubBasin.cpp:214
void AddInputConnector(Connector *connector)
Definition SubBasin.cpp:264
void ReserveLateralConnectionsForUnits(SettingsBasin &basinSettings)
Definition SubBasin.cpp:247
void AddOutputConnector(Connector *connector)
Definition SubBasin.cpp:269
void ReserveOutputConnectors(size_t count)
Definition SubBasin.h:76
double * GetValuePointer(const string &name)
Definition SubBasin.cpp:279