1#ifndef HYDROBRICKS_WATER_CONTAINER_H
2#define HYDROBRICKS_WATER_CONTAINER_H
20 [[nodiscard]]
virtual bool IsValid(
bool checkProcesses =
true)
const;
91 return _capacity !=
nullptr;
110 if (_infiniteStorage) {
111 throw ModelConfigError(
"Trying to set the maximum capacity of an infinite storage.");
120 _infiniteStorage =
true;
134 _allowNegativeContent = allow;
143 return _allowNegativeContent;
152 if (_infiniteStorage) {
156 return _content + _contentChangeDynamic + _contentChangeStatic;
165 if (_infiniteStorage) {
169 return _content + _contentChangeDynamic;
178 if (_infiniteStorage) {
200 _initialState = value;
209 if (_infiniteStorage) {
210 throw ModelConfigError(
"Trying to set the content of an infinite storage.");
230 return GreaterThan(content, 0, EPSILON_F) && GreaterThan(content, 0, PRECISION);
239 return _overflow !=
nullptr;
248 _overflow = overflow;
258 _inputs.push_back(flux);
269 _inputs.push_back(flux.get());
270 _ownedInputFluxes.push_back(std::move(flux));
300 return !_inputs.empty();
309 return _infiniteStorage;
327 return _parent !=
nullptr;
336 return !NearlyZero(_initialState, EPSILON_F);
341 double _contentChangeDynamic;
342 double _contentChangeStatic;
343 double _initialState;
344 const float* _capacity;
345 bool _infiniteStorage;
346 bool _allowNegativeContent;
349 vector<Flux*> _inputs;
350 std::vector<std::unique_ptr<Flux>> _ownedInputFluxes;
Exception for model configuration or conception errors.
Definition Exceptions.h:88
Definition WaterContainer.h:9
void SetAsInfiniteStorage()
Definition WaterContainer.h:119
vecDoublePt GetDynamicContentChanges()
Definition WaterContainer.cpp:228
void UpdateContent(double value)
Definition WaterContainer.h:208
bool IsEmpty() const
Definition WaterContainer.h:317
void Reset()
Definition WaterContainer.cpp:205
double GetTargetFillingRatio() const
Definition WaterContainer.cpp:232
void AddAmountToStaticContentChange(double change)
Definition WaterContainer.cpp:50
double GetContentWithoutChanges() const
Definition WaterContainer.h:177
void SetMaximumCapacity(const float *value)
Definition WaterContainer.h:109
void SubtractAmountFromDynamicContentChange(double change)
Definition WaterContainer.cpp:40
void SetOutgoingRatesToZero()
Definition WaterContainer.cpp:171
double * GetContentPointer()
Definition WaterContainer.h:190
void AddAmountToDynamicContentChange(double change)
Definition WaterContainer.cpp:45
virtual bool IsValid(bool checkProcesses=true) const
Definition WaterContainer.cpp:17
bool HasInitialState() const
Definition WaterContainer.h:335
bool HasMaximumCapacity() const noexcept
Definition WaterContainer.h:90
bool HasParentBrick() const
Definition WaterContainer.h:326
bool HasOverflow() const
Definition WaterContainer.h:238
virtual void Validate() const
Definition WaterContainer.cpp:33
virtual double SumIncomingFluxes() const
Definition WaterContainer.cpp:215
void LinkOverflow(Process *overflow)
Definition WaterContainer.h:247
bool HasIncomingFluxes() const
Definition WaterContainer.h:299
void Finalize()
Definition WaterContainer.cpp:190
virtual void ApplyConstraints(double timeStep)
Definition WaterContainer.cpp:55
void AttachFluxIn(Flux *flux)
Definition WaterContainer.h:256
double GetContentWithChanges() const
Definition WaterContainer.h:151
bool IsNotEmpty() const
Definition WaterContainer.h:228
void AttachFluxInOwned(std::unique_ptr< Flux > flux)
Definition WaterContainer.h:267
double GetContentWithDynamicChanges() const
Definition WaterContainer.h:164
bool AllowsNegativeContent() const
Definition WaterContainer.h:142
double GetMaximumCapacity() const
Definition WaterContainer.h:99
void SaveAsInitialState()
Definition WaterContainer.cpp:211
void SetInitialState(double value)
Definition WaterContainer.h:199
void SetAllowNegativeContent(bool allow=true)
Definition WaterContainer.h:133
Brick * GetParentBrick() const
Definition WaterContainer.h:290
virtual bool ContentAccessible() const
Definition WaterContainer.cpp:224
bool IsInfiniteStorage() const
Definition WaterContainer.h:308