hydrobricks
Loading...
Searching...
No Matches
Brick.h
1#ifndef HYDROBRICKS_BRICK_H
2#define HYDROBRICKS_BRICK_H
3
4#include <memory>
5
6#include "Flux.h"
7#include "Includes.h"
8#include "Process.h"
9#include "SettingsModel.h"
10#include "WaterContainer.h"
11
15enum class BrickCategory {
16 Snowpack,
17 Glacier,
18 Urban,
21 Unknown
22};
23
24class Brick : public wxObject {
25 public:
26 explicit Brick();
27
28 ~Brick() override = default;
29
36 static Brick* Factory(const BrickSettings& brickSettings);
37
44 static Brick* Factory(BrickType type);
45
53 static bool HasParameter(const BrickSettings& brickSettings, const string& name);
54
62 static const float* GetParameterValuePointer(const BrickSettings& brickSettings, const string& name);
63
69 virtual void SetParameters(const BrickSettings& brickSettings);
70
76 virtual void AttachFluxIn(Flux* flux);
77
83 void AddProcess(std::unique_ptr<Process> process) {
84 wxASSERT(process);
85 _processes.push_back(std::move(process));
86 }
87
91 virtual void Reset();
92
96 virtual void SaveAsInitialState();
97
103 [[nodiscard]] virtual bool IsValid(bool checkProcesses = true) const;
104
111 virtual void Validate() const;
112
118 [[nodiscard]] bool NeedsSolver() const {
119 return _needsSolver;
120 }
121
127 [[nodiscard]] BrickCategory GetCategory() const {
128 return _category;
129 }
130
136 [[nodiscard]] virtual bool CanHaveAreaFraction() const {
137 return false;
138 }
139
145 [[nodiscard]] virtual bool IsLandCover() const {
146 return false;
147 }
148
154 [[nodiscard]] virtual bool IsNull() const {
155 return false;
156 }
157
163 [[nodiscard]] bool HasProcesses() const {
164 return !_processes.empty();
165 }
166
172 [[nodiscard]] bool HasHydroUnit() const {
173 return _hydroUnit != nullptr;
174 }
175
179 virtual void Finalize();
180
187 virtual void SetInitialState(double value, ContentType type);
188
195 virtual double GetContent(ContentType type) const;
196
203 virtual void UpdateContent(double value, ContentType type);
204
208 virtual void UpdateContentFromInputs();
209
215 virtual void ApplyConstraints(double timeStep);
216
223
229 [[nodiscard]] size_t GetProcessCount() const {
230 return _processes.size();
231 }
232
239 Process* GetProcess(size_t index) const;
240
246 const string& GetName() const {
247 return _name;
248 }
249
255 void SetName(const string& name) {
256 _name = name;
257 }
258
265 wxASSERT(_hydroUnit);
266 return _hydroUnit;
267 }
268
274 void SetHydroUnit(HydroUnit* hydroUnit) {
275 wxASSERT(hydroUnit);
276 _hydroUnit = hydroUnit;
277 }
278
284 virtual vecDoublePt GetDynamicContentChanges();
285
292
298 int GetProcessConnectionCount() const;
299
305 double* GetBaseValuePointer(const string& name);
306
312 virtual double* GetValuePointer(const string& name);
313
314 protected:
315 string _name;
316 bool _needsSolver;
317 BrickCategory _category;
318 std::unique_ptr<WaterContainer> _water; // owning
319 std::vector<std::unique_ptr<Process>> _processes; // owning
320 HydroUnit* _hydroUnit; // non-owning back-reference
321};
322
323#endif // HYDROBRICKS_BRICK_H
Definition Brick.h:24
WaterContainer * GetWaterContainer() const
Definition Brick.cpp:166
void SetHydroUnit(HydroUnit *hydroUnit)
Definition Brick.h:274
virtual void UpdateContentFromInputs()
Definition Brick.cpp:158
static const float * GetParameterValuePointer(const BrickSettings &brickSettings, const string &name)
Definition Brick.cpp:104
bool HasProcesses() const
Definition Brick.h:163
virtual void ApplyConstraints(double timeStep)
Definition Brick.cpp:162
Process * GetProcess(size_t index) const
Definition Brick.cpp:115
virtual void Finalize()
Definition Brick.cpp:122
BrickCategory GetCategory() const
Definition Brick.h:127
HydroUnit * GetHydroUnit() const
Definition Brick.h:264
virtual void Reset()
Definition Brick.cpp:51
double * GetBaseValuePointer(const string &name)
Definition Brick.cpp:200
virtual void UpdateContent(double value, ContentType type)
Definition Brick.cpp:147
bool HasHydroUnit() const
Definition Brick.h:172
virtual bool CanHaveAreaFraction() const
Definition Brick.h:136
virtual void Validate() const
Definition Brick.cpp:77
bool NeedsSolver() const
Definition Brick.h:118
virtual void SetParameters(const BrickSettings &brickSettings)
Definition Brick.cpp:84
static bool HasParameter(const BrickSettings &brickSettings, const string &name)
Definition Brick.cpp:99
virtual bool IsNull() const
Definition Brick.h:154
virtual void AttachFluxIn(Flux *flux)
Definition Brick.cpp:90
virtual void SetInitialState(double value, ContentType type)
Definition Brick.cpp:126
virtual void SaveAsInitialState()
Definition Brick.cpp:58
const string & GetName() const
Definition Brick.h:246
int GetProcessConnectionCount() const
Definition Brick.cpp:190
virtual double * GetValuePointer(const string &name)
Definition Brick.cpp:208
virtual bool IsLandCover() const
Definition Brick.h:145
static Brick * Factory(const BrickSettings &brickSettings)
Definition Brick.cpp:21
vecDoublePt GetStateVariableChangesFromProcesses()
Definition Brick.cpp:174
virtual bool IsValid(bool checkProcesses=true) const
Definition Brick.cpp:62
void SetName(const string &name)
Definition Brick.h:255
virtual vecDoublePt GetDynamicContentChanges()
Definition Brick.cpp:170
void AddProcess(std::unique_ptr< Process > process)
Definition Brick.h:83
size_t GetProcessCount() const
Definition Brick.h:229
virtual double GetContent(ContentType type) const
Definition Brick.cpp:137
Definition Flux.h:9
Definition GenericLandCover.h:7
Definition Glacier.h:11
Definition HydroUnit.h:18
Definition Process.h:15
Definition Snowpack.h:10
Definition Urban.h:7
Definition Vegetation.h:7
Definition WaterContainer.h:9
Definition SettingsModel.h:47