1#ifndef HYDROBRICKS_HYDRO_UNIT_H
2#define HYDROBRICKS_HYDRO_UNIT_H
5#include <unordered_map>
10#include "HydroUnitLateralConnection.h"
11#include "HydroUnitProperty.h"
27 explicit HydroUnit(
double area = UNDEFINED, Types type = Undefined);
53 void AddProperty(std::unique_ptr<HydroUnitProperty> property);
62 [[nodiscard]]
double GetPropertyDouble(std::string_view name, std::string_view unit =
"")
const;
71 [[nodiscard]]
float GetPropertyFloat(std::string_view name, std::string_view unit =
"")
const;
86 void AddBrick(std::unique_ptr<Brick> brick);
93 void AddSplitter(std::unique_ptr<Splitter> splitter);
101 [[nodiscard]]
bool HasForcing(VariableType type)
const;
108 void AddForcing(std::unique_ptr<Forcing> forcing);
196 [[nodiscard]]
bool HasBrick(std::string_view name)
const;
220 std::vector<Brick*> snowBricks;
221 snowBricks.reserve(_bricks.size());
222 for (
const auto& brick : _bricks) {
223 if (brick->GetCategory() == BrickCategory::Snowpack) {
224 snowBricks.push_back(brick.get());
260 [[nodiscard]]
bool HasSplitter(std::string_view name)
const;
283 [[nodiscard]]
bool IsValid(
bool checkProcesses =
true)
const;
356 std::vector<std::unique_ptr<HydroUnitProperty>> _properties;
357 std::vector<std::unique_ptr<HydroUnitLateralConnection>> _lateralConnections;
358 std::vector<std::unique_ptr<Brick>> _bricks;
359 std::unordered_map<string, Brick*> _brickMap;
360 std::vector<LandCover*> _landCoverBricks;
361 std::unordered_map<string, LandCover*> _landCoverMap;
362 std::vector<std::unique_ptr<Splitter>> _splitters;
363 std::unordered_map<string, Splitter*> _splitterMap;
364 std::vector<std::unique_ptr<Forcing>> _forcing;
365 std::unordered_map<VariableType, Forcing*> _forcingMap;
Definition HydroUnit.h:18
void Validate() const
Definition HydroUnit.cpp:259
Splitter * TryGetSplitter(std::string_view name) const
Definition HydroUnit.cpp:213
string GetPropertyString(std::string_view name) const
Definition HydroUnit.cpp:83
bool ChangeLandCoverAreaFraction(std::string_view name, double fraction)
Definition HydroUnit.cpp:265
void ReserveForcings(size_t count)
Definition HydroUnit.cpp:32
void ReserveLandCoverBricks(size_t count)
Definition HydroUnit.cpp:20
void SetId(int id)
Definition HydroUnit.h:323
LandCover * TryGetLandCover(std::string_view name) const
Definition HydroUnit.cpp:188
LandCover * GetLandCover(std::string_view name) const
Definition HydroUnit.cpp:179
Splitter * GetSplitter(size_t index) const
Definition HydroUnit.cpp:193
void SetProperties(HydroUnitSettings &unitSettings)
Definition HydroUnit.cpp:48
void SaveAsInitialState()
Definition HydroUnit.cpp:42
Types GetType() const
Definition HydroUnit.h:314
void AddSplitter(std::unique_ptr< Splitter > splitter)
Definition HydroUnit.cpp:106
void ResetForcingUpdates()
Definition HydroUnit.cpp:123
bool HasForcing(VariableType type) const
Definition HydroUnit.cpp:113
Brick * TryGetBrick(std::string_view name) const
Definition HydroUnit.cpp:174
double GetPropertyDouble(std::string_view name, std::string_view unit="") const
Definition HydroUnit.cpp:69
int GetSplitterCount() const
Definition HydroUnit.cpp:150
void ReserveSplitters(size_t count)
Definition HydroUnit.cpp:24
void AddProperty(std::unique_ptr< HydroUnitProperty > property)
Definition HydroUnit.cpp:64
Brick * GetBrick(size_t index) const
Definition HydroUnit.cpp:154
bool IsValid(bool checkProcesses=true) const
Definition HydroUnit.cpp:218
void ReserveBricks(size_t count)
Definition HydroUnit.cpp:16
double GetArea() const
Definition HydroUnit.h:332
void AddForcing(std::unique_ptr< Forcing > forcing)
Definition HydroUnit.cpp:117
int GetBrickCount() const
Definition HydroUnit.cpp:146
Forcing * GetForcing(VariableType type) const
Definition HydroUnit.cpp:129
bool FixLandCoverFractionsTotal()
Definition HydroUnit.cpp:279
std::vector< Brick * > GetSnowpacks() const
Definition HydroUnit.h:219
std::vector< HydroUnitLateralConnection * > GetLateralConnections() const
Definition HydroUnit.cpp:321
void AddBrick(std::unique_ptr< Brick > brick)
Definition HydroUnit.cpp:93
bool HasBrick(std::string_view name) const
Definition HydroUnit.cpp:161
void ReserveLateralConnections(size_t count)
Definition HydroUnit.cpp:28
void AddLateralConnection(HydroUnit *receiver, double fraction, const string &type="")
Definition HydroUnit.cpp:138
bool HasSplitter(std::string_view name) const
Definition HydroUnit.cpp:200
float GetPropertyFloat(std::string_view name, std::string_view unit="") const
Definition HydroUnit.cpp:79
int GetId() const
Definition HydroUnit.h:341
void Reset()
Definition HydroUnit.cpp:36
Definition LandCover.h:10
Definition SettingsBasin.h:30