hydrobricks
Loading...
Searching...
No Matches
Brick.h
1#ifndef HYDROBRICKS_BRICK_H
2#define HYDROBRICKS_BRICK_H
3
4#include "Flux.h"
5#include "Includes.h"
6#include "Process.h"
7#include "SettingsModel.h"
8#include "WaterContainer.h"
9
10class Brick : public wxObject {
11 public:
12 explicit Brick();
13
14 ~Brick() override = default;
15
22 static Brick* Factory(const BrickSettings& brickSettings);
23
30 static Brick* Factory(BrickType type);
31
39 static bool HasParameter(const BrickSettings& brickSettings, const string& name);
40
48 static float* GetParameterValuePointer(const BrickSettings& brickSettings, const string& name);
49
55 virtual void SetParameters(const BrickSettings& brickSettings);
56
62 virtual void AttachFluxIn(Flux* flux);
63
69 void AddProcess(Process* process) {
70 wxASSERT(process);
71 _processes.push_back(process);
72 }
73
77 virtual void Reset();
78
82 virtual void SaveAsInitialState();
83
89 [[nodiscard]] virtual bool IsOk();
90
96 [[nodiscard]] bool NeedsSolver() const {
97 return _needsSolver;
98 }
99
105 [[nodiscard]] virtual bool CanHaveAreaFraction() {
106 return false;
107 }
108
114 [[nodiscard]] virtual bool IsSnowpack() {
115 return false;
116 }
117
123 [[nodiscard]] virtual bool IsGlacier() {
124 return false;
125 }
126
132 [[nodiscard]] virtual bool IsLandCover() {
133 return false;
134 }
135
141 [[nodiscard]] virtual bool IsNull() {
142 return false;
143 }
144
148 virtual void Finalize();
149
156 virtual void SetInitialState(double value, ContentType type);
157
164 virtual double GetContent(ContentType type);
165
172 virtual void UpdateContent(double value, ContentType type);
173
177 virtual void UpdateContentFromInputs();
178
184 virtual void ApplyConstraints(double timeStep);
185
192
199 Process* GetProcess(int index);
200
206 vector<Process*>& GetProcesses() {
207 return _processes;
208 }
209
215 string GetName() const {
216 return _name;
217 }
218
224 void SetName(const string& name) {
225 _name = name;
226 }
227
234 wxASSERT(_hydroUnit);
235 return _hydroUnit;
236 }
237
243 void SetHydroUnit(HydroUnit* hydroUnit) {
244 wxASSERT(hydroUnit);
245 _hydroUnit = hydroUnit;
246 }
247
253 virtual vecDoublePt GetDynamicContentChanges();
254
261
268
274 double* GetBaseValuePointer(const string& name);
275
281 virtual double* GetValuePointer(const string& name);
282
283 protected:
284 string _name;
285 bool _needsSolver;
286 std::unique_ptr<WaterContainer> _water;
287 vector<Process*> _processes;
288 HydroUnit* _hydroUnit;
289};
290
291#endif // HYDROBRICKS_BRICK_H
Definition Brick.h:10
virtual bool IsOk()
Definition Brick.cpp:61
void SetHydroUnit(HydroUnit *hydroUnit)
Definition Brick.h:243
Process * GetProcess(int index)
Definition Brick.cpp:106
WaterContainer * GetWaterContainer()
Definition Brick.cpp:157
int GetProcessesConnectionsNb()
Definition Brick.cpp:181
virtual void UpdateContentFromInputs()
Definition Brick.cpp:149
virtual double GetContent(ContentType type)
Definition Brick.cpp:128
virtual void ApplyConstraints(double timeStep)
Definition Brick.cpp:153
virtual bool IsLandCover()
Definition Brick.h:132
string GetName() const
Definition Brick.h:215
virtual void Finalize()
Definition Brick.cpp:113
HydroUnit * GetHydroUnit() const
Definition Brick.h:233
virtual bool IsSnowpack()
Definition Brick.h:114
virtual void Reset()
Definition Brick.cpp:50
double * GetBaseValuePointer(const string &name)
Definition Brick.cpp:191
virtual void UpdateContent(double value, ContentType type)
Definition Brick.cpp:138
bool NeedsSolver() const
Definition Brick.h:96
virtual void SetParameters(const BrickSettings &brickSettings)
Definition Brick.cpp:74
static bool HasParameter(const BrickSettings &brickSettings, const string &name)
Definition Brick.cpp:89
virtual bool IsGlacier()
Definition Brick.h:123
void AddProcess(Process *process)
Definition Brick.h:69
virtual void AttachFluxIn(Flux *flux)
Definition Brick.cpp:80
virtual void SetInitialState(double value, ContentType type)
Definition Brick.cpp:117
virtual void SaveAsInitialState()
Definition Brick.cpp:57
virtual bool IsNull()
Definition Brick.h:141
virtual double * GetValuePointer(const string &name)
Definition Brick.cpp:199
static Brick * Factory(const BrickSettings &brickSettings)
Definition Brick.cpp:20
vecDoublePt GetStateVariableChangesFromProcesses()
Definition Brick.cpp:165
virtual bool CanHaveAreaFraction()
Definition Brick.h:105
vector< Process * > & GetProcesses()
Definition Brick.h:206
void SetName(const string &name)
Definition Brick.h:224
static float * GetParameterValuePointer(const BrickSettings &brickSettings, const string &name)
Definition Brick.cpp:94
virtual vecDoublePt GetDynamicContentChanges()
Definition Brick.cpp:161
Definition Flux.h:9
Definition HydroUnit.h:14
Definition Process.h:13
Definition WaterContainer.h:9
Definition SettingsModel.h:45