1#ifndef HYDROBRICKS_WATER_CONTAINER_H
2#define HYDROBRICKS_WATER_CONTAINER_H
21 [[nodiscard]]
virtual bool IsValid(
bool checkProcesses =
true)
const;
81 _inputsBooked =
false;
112 return _capacity !=
nullptr;
131 if (_infiniteStorage) {
132 throw ModelConfigError(
"Trying to set the maximum capacity of an infinite storage.");
141 _infiniteStorage =
true;
155 _allowNegativeContent = allow;
164 return _allowNegativeContent;
173 if (_infiniteStorage) {
177 return _content + _contentChangeDynamic + _contentChangeStatic;
186 if (_infiniteStorage) {
190 return _content + _contentChangeDynamic;
199 if (_infiniteStorage) {
221 _initialState = value;
230 if (_infiniteStorage) {
231 throw ModelConfigError(
"Trying to set the content of an infinite storage.");
251 return GreaterThan(content, 0, EPSILON_F) && GreaterThan(content, 0, PRECISION);
260 return _overflow !=
nullptr;
269 _overflow = overflow;
279 _inputs.push_back(flux);
290 _inputs.push_back(flux.get());
291 _ownedInputFluxes.push_back(std::move(flux));
345 return !_inputs.empty();
354 return _infiniteStorage;
372 return _parent !=
nullptr;
381 return !NearlyZero(_initialState, EPSILON_F);
394 void BuildConstraintCache();
396 struct OutgoingLink {
402 bool _constraintCacheBuilt;
403 std::vector<OutgoingLink> _outgoingFluxes;
404 std::vector<Flux*> _incomingRateFluxes;
405 std::vector<Flux*> _incomingAmountFluxes;
406 std::vector<FluxToBrickInstantaneous*> _incomingInstantFluxes;
409 double _contentChangeDynamic;
410 double _contentChangeStatic;
411 double _initialState;
412 const float* _capacity;
413 bool _infiniteStorage;
414 bool _allowNegativeContent;
418 vector<Flux*> _inputs;
419 std::vector<std::unique_ptr<Flux>> _ownedInputFluxes;
Definition FluxToBrickInstantaneous.h:9
Exception for model configuration or conception errors.
Definition Exceptions.h:88
Definition WaterContainer.h:10
void SetAsInfiniteStorage()
Definition WaterContainer.h:140
vecDoublePt GetDynamicContentChanges()
Definition WaterContainer.cpp:334
void UpdateContent(double value)
Definition WaterContainer.h:229
bool IsEmpty() const
Definition WaterContainer.h:362
double SumIncomingChangeRates() const
Definition WaterContainer.cpp:295
void Reset()
Definition WaterContainer.cpp:262
double GetTargetFillingRatio() const
Definition WaterContainer.cpp:338
void AddAmountToStaticContentChange(double change)
Definition WaterContainer.cpp:52
double GetContentWithoutChanges() const
Definition WaterContainer.h:198
void SetMaximumCapacity(const float *value)
Definition WaterContainer.h:130
void SubtractAmountFromDynamicContentChange(double change)
Definition WaterContainer.cpp:42
void SetOutgoingRatesToZero()
Definition WaterContainer.cpp:220
double * GetContentPointer()
Definition WaterContainer.h:211
void AddAmountToDynamicContentChange(double change)
Definition WaterContainer.cpp:47
double SumIncomingAmounts() const
Definition WaterContainer.cpp:312
virtual bool IsValid(bool checkProcesses=true) const
Definition WaterContainer.cpp:19
bool HasInitialState() const
Definition WaterContainer.h:380
bool HasMaximumCapacity() const noexcept
Definition WaterContainer.h:111
bool HasParentBrick() const
Definition WaterContainer.h:371
bool HasOverflow() const
Definition WaterContainer.h:259
virtual void Validate() const
Definition WaterContainer.cpp:35
virtual double SumIncomingFluxes() const
Definition WaterContainer.cpp:286
double BookIncomingFluxes(bool asStatic=false)
Definition WaterContainer.cpp:269
void LinkOverflow(Process *overflow)
Definition WaterContainer.h:268
bool HasIncomingFluxes() const
Definition WaterContainer.h:344
void Finalize()
Definition WaterContainer.cpp:239
virtual void ApplyConstraints(double timeStep)
Definition WaterContainer.cpp:84
void AttachFluxIn(Flux *flux)
Definition WaterContainer.h:277
double GetContentWithChanges() const
Definition WaterContainer.h:172
bool IsNotEmpty() const
Definition WaterContainer.h:249
void AttachFluxInOwned(std::unique_ptr< Flux > flux)
Definition WaterContainer.h:288
double GetContentWithDynamicChanges() const
Definition WaterContainer.h:185
bool AllowsNegativeContent() const
Definition WaterContainer.h:163
double GetMaximumCapacity() const
Definition WaterContainer.h:120
void SaveAsInitialState()
Definition WaterContainer.cpp:282
void SetInitialState(double value)
Definition WaterContainer.h:220
void SetAllowNegativeContent(bool allow=true)
Definition WaterContainer.h:154
void ResetInputBooking()
Definition WaterContainer.h:80
Brick * GetParentBrick() const
Definition WaterContainer.h:335
virtual bool ContentAccessible() const
Definition WaterContainer.cpp:330
bool IsInfiniteStorage() const
Definition WaterContainer.h:353