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;
87 [[nodiscard]]
bool HasProperty(std::string_view name)
const;
141 void AddBrick(std::unique_ptr<Brick> brick);
148 void AddSplitter(std::unique_ptr<Splitter> splitter);
156 [[nodiscard]]
bool HasForcing(VariableType type)
const;
163 void AddForcing(std::unique_ptr<Forcing> forcing);
251 [[nodiscard]]
bool HasBrick(std::string_view name)
const;
275 std::vector<Brick*> snowBricks;
276 snowBricks.reserve(_bricks.size());
277 for (
const auto& brick : _bricks) {
278 if (brick->GetCategory() == BrickCategory::Snowpack) {
279 snowBricks.push_back(brick.get());
308 [[nodiscard]]
double GetSnowAlbedo(
double albedoLand,
double sweThreshold = 0.1)
const;
340 [[nodiscard]]
bool HasSplitter(std::string_view name)
const;
363 [[nodiscard]]
bool IsValid(
bool checkProcesses =
true)
const;
448 _structureId = structureId;
482 void TransferLandCoverContent(
LandCover* changed,
double oldFraction,
double newFraction,
LandCover* generic,
483 double genericOldFraction,
double genericNewFraction);
488 int _structureId = 1;
490 std::vector<std::unique_ptr<HydroUnitProperty>> _properties;
491 std::vector<std::unique_ptr<HydroUnitLateralConnection>> _lateralConnections;
492 std::vector<std::unique_ptr<Brick>> _bricks;
493 std::unordered_map<string, Brick*> _brickMap;
494 std::vector<LandCover*> _landCoverBricks;
495 std::unordered_map<string, LandCover*> _landCoverMap;
496 std::vector<std::unique_ptr<Splitter>> _splitters;
497 std::unordered_map<string, Splitter*> _splitterMap;
498 std::vector<std::unique_ptr<Forcing>> _forcing;
499 std::unordered_map<VariableType, Forcing*> _forcingMap;
500 std::unordered_map<string, float> _paramOverrides;
501 std::unordered_map<string, vecFloat> _paramOverridesMonthly;
Definition HydroUnit.h:18
void Validate() const
Definition HydroUnit.cpp:423
Splitter * TryGetSplitter(std::string_view name) const
Definition HydroUnit.cpp:377
string GetPropertyString(std::string_view name) const
Definition HydroUnit.cpp:154
bool ChangeLandCoverAreaFraction(std::string_view name, double fraction)
Definition HydroUnit.cpp:429
void ReserveForcings(size_t count)
Definition HydroUnit.cpp:103
void ReserveLandCoverBricks(size_t count)
Definition HydroUnit.cpp:91
void SetId(int id)
Definition HydroUnit.h:418
LandCover * TryGetLandCover(std::string_view name) const
Definition HydroUnit.cpp:352
void SetStructureId(int structureId)
Definition HydroUnit.h:447
LandCover * GetLandCover(std::string_view name) const
Definition HydroUnit.cpp:343
bool HasParameterOverride(const string &key) const
Definition HydroUnit.cpp:178
double GetSnowCoverFraction(double sweThreshold=0.1) const
Definition HydroUnit.cpp:215
Splitter * GetSplitter(size_t index) const
Definition HydroUnit.cpp:357
void SetProperties(HydroUnitSettings &unitSettings)
Definition HydroUnit.cpp:119
void SaveAsInitialState()
Definition HydroUnit.cpp:113
Types GetType() const
Definition HydroUnit.h:409
void AddSplitter(std::unique_ptr< Splitter > splitter)
Definition HydroUnit.cpp:270
void ResetForcingUpdates()
Definition HydroUnit.cpp:287
bool HasForcing(VariableType type) const
Definition HydroUnit.cpp:277
Brick * TryGetBrick(std::string_view name) const
Definition HydroUnit.cpp:338
double GetPropertyDouble(std::string_view name, std::string_view unit="") const
Definition HydroUnit.cpp:140
double GetSnowAlbedo(double albedoLand, double sweThreshold=0.1) const
Definition HydroUnit.cpp:233
int GetSplitterCount() const
Definition HydroUnit.cpp:314
void ReserveSplitters(size_t count)
Definition HydroUnit.cpp:95
void AddProperty(std::unique_ptr< HydroUnitProperty > property)
Definition HydroUnit.cpp:135
Brick * GetBrick(size_t index) const
Definition HydroUnit.cpp:318
const float * GetParameterOverridePointer(const string &key) const
Definition HydroUnit.cpp:182
bool IsValid(bool checkProcesses=true) const
Definition HydroUnit.cpp:382
void ReserveBricks(size_t count)
Definition HydroUnit.cpp:87
double GetArea() const
Definition HydroUnit.h:427
void AddForcing(std::unique_ptr< Forcing > forcing)
Definition HydroUnit.cpp:281
int GetBrickCount() const
Definition HydroUnit.cpp:310
vector< std::pair< float *, const vecFloat * > > GetMonthlyParameterOverrides()
Definition HydroUnit.cpp:204
Forcing * GetForcing(VariableType type) const
Definition HydroUnit.cpp:293
bool FixLandCoverFractionsTotal()
Definition HydroUnit.cpp:556
void SetParameterOverrideMonthly(const string &key, const vecFloat &values)
Definition HydroUnit.cpp:188
int GetStructureId() const
Definition HydroUnit.h:456
void RestoreInitialAreaFractions()
Definition HydroUnit.cpp:550
std::vector< Brick * > GetSnowpacks() const
Definition HydroUnit.h:274
LandCover * GetGenericLandCover() const
Definition HydroUnit.cpp:468
std::vector< HydroUnitLateralConnection * > GetLateralConnections() const
Definition HydroUnit.cpp:589
void AddBrick(std::unique_ptr< Brick > brick)
Definition HydroUnit.cpp:257
bool HasBrick(std::string_view name) const
Definition HydroUnit.cpp:325
void ReserveLateralConnections(size_t count)
Definition HydroUnit.cpp:99
void AddLateralConnection(HydroUnit *receiver, double fraction, const string &type="")
Definition HydroUnit.cpp:302
bool HasSplitter(std::string_view name) const
Definition HydroUnit.cpp:364
float GetPropertyFloat(std::string_view name, std::string_view unit="") const
Definition HydroUnit.cpp:150
int GetId() const
Definition HydroUnit.h:436
void Reset()
Definition HydroUnit.cpp:107
void SetParameterOverride(const string &key, float value)
Definition HydroUnit.cpp:174
bool HasProperty(std::string_view name) const
Definition HydroUnit.cpp:164
Definition LandCover.h:10
Definition SettingsBasin.h:30