hydrobricks
Loading...
Searching...
No Matches
WaterContainer.h
1#ifndef HYDROBRICKS_WATER_CONTAINER_H
2#define HYDROBRICKS_WATER_CONTAINER_H
3
4#include "Includes.h"
5#include "Process.h"
6
7class Brick;
8
9class WaterContainer : public wxObject {
10 public:
11 WaterContainer(Brick* brick);
12
16 virtual bool IsOk();
17
24
30 void AddAmountToDynamicContentChange(double change);
31
37 void AddAmountToStaticContentChange(double change);
38
44 virtual void ApplyConstraints(double timeSte);
45
50
54 void Finalize();
55
59 void Reset();
60
64 void SaveAsInitialState();
65
71 vecDoublePt GetDynamicContentChanges();
72
78 bool HasMaximumCapacity() const {
79 return m_capacity != nullptr;
80 }
81
88 wxASSERT(m_capacity);
89 return *m_capacity;
90 }
91
97 void SetMaximumCapacity(float* value) {
98 if (m_infiniteStorage) {
99 throw ConceptionIssue(_("Trying to set the maximum capacity of an infinite storage."));
100 }
101 m_capacity = value;
102 }
103
108 m_infiniteStorage = true;
109 }
110
116 double GetContentWithChanges() const {
117 if (m_infiniteStorage) {
118 return INFINITY;
119 }
120
121 return m_content + m_contentChangeDynamic + m_contentChangeStatic;
122 }
123
130 if (m_infiniteStorage) {
131 return INFINITY;
132 }
133
134 return m_content + m_contentChangeDynamic;
135 }
136
143 if (m_infiniteStorage) {
144 return INFINITY;
145 }
146
147 return m_content;
148 }
149
156 return &m_content;
157 }
158
164 void SetInitialState(double value) {
165 m_initialState = value;
166 }
167
173 void UpdateContent(double value) {
174 if (m_infiniteStorage) {
175 throw ConceptionIssue(_("Trying to set the content of an infinite storage."));
176 }
177
178 m_content = value;
179 }
180
186 double GetTargetFillingRatio();
187
193 bool IsNotEmpty() {
194 double content = GetContentWithChanges();
195 return content > EPSILON_F && content > PRECISION;
196 }
197
203 bool HasOverflow() {
204 return m_overflow != nullptr;
205 }
206
212 void LinkOverflow(Process* overflow) {
213 m_overflow = overflow;
214 }
215
221 void AttachFluxIn(Flux* flux) {
222 wxASSERT(flux);
223 m_inputs.push_back(flux);
224 }
225
231 virtual double SumIncomingFluxes();
232
236 virtual bool ContentAccessible() const;
237
244 return m_parent;
245 }
246
247 private:
248 double m_content; // [mm]
249 double m_contentChangeDynamic; // [mm]
250 double m_contentChangeStatic; // [mm]
251 double m_initialState; // [mm]
252 float* m_capacity;
253 bool m_infiniteStorage;
254 Brick* m_parent;
255 Process* m_overflow;
256 vector<Flux*> m_inputs;
257};
258
259#endif // HYDROBRICKS_WATER_CONTAINER_H
Definition Brick.h:10
Definition Includes.h:133
Definition Flux.h:8
Definition Process.h:13
Definition WaterContainer.h:9
bool IsNotEmpty()
Definition WaterContainer.h:193
void SetAsInfiniteStorage()
Definition WaterContainer.h:107
vecDoublePt GetDynamicContentChanges()
Definition WaterContainer.cpp:203
virtual bool IsOk()
Definition WaterContainer.cpp:16
bool HasOverflow()
Definition WaterContainer.h:203
Brick * GetParentBrick()
Definition WaterContainer.h:243
void UpdateContent(double value)
Definition WaterContainer.h:173
void Reset()
Definition WaterContainer.cpp:180
void AddAmountToStaticContentChange(double change)
Definition WaterContainer.cpp:41
double GetContentWithoutChanges() const
Definition WaterContainer.h:142
double GetTargetFillingRatio()
Definition WaterContainer.cpp:207
void SubtractAmountFromDynamicContentChange(double change)
Definition WaterContainer.cpp:31
void SetOutgoingRatesToZero()
Definition WaterContainer.cpp:155
double * GetContentPointer()
Definition WaterContainer.h:155
void AddAmountToDynamicContentChange(double change)
Definition WaterContainer.cpp:36
bool HasMaximumCapacity() const
Definition WaterContainer.h:78
void LinkOverflow(Process *overflow)
Definition WaterContainer.h:212
void Finalize()
Definition WaterContainer.cpp:172
virtual void ApplyConstraints(double timeSte)
Definition WaterContainer.cpp:46
void AttachFluxIn(Flux *flux)
Definition WaterContainer.h:221
double GetContentWithChanges() const
Definition WaterContainer.h:116
virtual double SumIncomingFluxes()
Definition WaterContainer.cpp:190
double GetContentWithDynamicChanges() const
Definition WaterContainer.h:129
void SaveAsInitialState()
Definition WaterContainer.cpp:186
double GetMaximumCapacity()
Definition WaterContainer.h:87
void SetInitialState(double value)
Definition WaterContainer.h:164
void SetMaximumCapacity(float *value)
Definition WaterContainer.h:97
virtual bool ContentAccessible() const
Definition WaterContainer.cpp:199