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;
124 if (_areaFraction !=
nullptr) {
125 return *_capacity * *_areaFraction;
137 return _areaFraction !=
nullptr ? *_areaFraction : 1.0;
150 _areaFraction = areaFraction;
159 if (_infiniteStorage) {
160 throw ModelConfigError(
"Trying to set the maximum capacity of an infinite storage.");
169 _infiniteStorage =
true;
183 _allowNegativeContent = allow;
192 return _allowNegativeContent;
201 if (_infiniteStorage) {
205 return _content + _contentChangeDynamic + _contentChangeStatic;
214 if (_infiniteStorage) {
218 return _content + _contentChangeDynamic;
227 if (_infiniteStorage) {
249 _initialState = value;
258 if (_infiniteStorage) {
259 throw ModelConfigError(
"Trying to set the content of an infinite storage.");
279 return GreaterThan(content, 0, EPSILON_F) && GreaterThan(content, 0, PRECISION);
288 return _overflow !=
nullptr;
297 _overflow = overflow;
307 _inputs.push_back(flux);
318 _inputs.push_back(flux.get());
319 _ownedInputFluxes.push_back(std::move(flux));
373 return !_inputs.empty();
382 return _infiniteStorage;
400 return _parent !=
nullptr;
409 return !NearlyZero(_initialState, EPSILON_F);
422 void BuildConstraintCache();
424 struct OutgoingLink {
430 bool _constraintCacheBuilt;
431 std::vector<OutgoingLink> _outgoingFluxes;
432 std::vector<Flux*> _incomingRateFluxes;
433 std::vector<Flux*> _incomingAmountFluxes;
434 std::vector<FluxToBrickInstantaneous*> _incomingInstantFluxes;
437 double _contentChangeDynamic;
438 double _contentChangeStatic;
439 double _initialState;
440 const float* _capacity;
441 const double* _areaFraction;
442 bool _infiniteStorage;
443 bool _allowNegativeContent;
447 vector<Flux*> _inputs;
448 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:168
vecDoublePt GetDynamicContentChanges()
Definition WaterContainer.cpp:352
void UpdateContent(double value)
Definition WaterContainer.h:257
bool IsEmpty() const
Definition WaterContainer.h:390
double SumIncomingChangeRates() const
Definition WaterContainer.cpp:313
void SetAreaFraction(const double *areaFraction)
Definition WaterContainer.h:149
void Reset()
Definition WaterContainer.cpp:280
double GetTargetFillingRatio() const
Definition WaterContainer.cpp:356
void AddAmountToStaticContentChange(double change)
Definition WaterContainer.cpp:55
double GetContentWithoutChanges() const
Definition WaterContainer.h:226
void SetMaximumCapacity(const float *value)
Definition WaterContainer.h:158
void SubtractAmountFromDynamicContentChange(double change)
Definition WaterContainer.cpp:45
void SetOutgoingRatesToZero()
Definition WaterContainer.cpp:238
double * GetContentPointer()
Definition WaterContainer.h:239
void AddAmountToDynamicContentChange(double change)
Definition WaterContainer.cpp:50
double SumIncomingAmounts() const
Definition WaterContainer.cpp:330
virtual bool IsValid(bool checkProcesses=true) const
Definition WaterContainer.cpp:22
bool HasInitialState() const
Definition WaterContainer.h:408
bool HasMaximumCapacity() const noexcept
Definition WaterContainer.h:111
bool HasParentBrick() const
Definition WaterContainer.h:399
bool HasOverflow() const
Definition WaterContainer.h:287
virtual void Validate() const
Definition WaterContainer.cpp:38
virtual double SumIncomingFluxes() const
Definition WaterContainer.cpp:304
double BookIncomingFluxes(bool asStatic=false)
Definition WaterContainer.cpp:287
void LinkOverflow(Process *overflow)
Definition WaterContainer.h:296
bool HasIncomingFluxes() const
Definition WaterContainer.h:372
void Finalize()
Definition WaterContainer.cpp:257
virtual void ApplyConstraints(double timeStep)
Definition WaterContainer.cpp:87
void AttachFluxIn(Flux *flux)
Definition WaterContainer.h:305
double GetContentWithChanges() const
Definition WaterContainer.h:200
bool IsNotEmpty() const
Definition WaterContainer.h:277
void AttachFluxInOwned(std::unique_ptr< Flux > flux)
Definition WaterContainer.h:316
double GetContentWithDynamicChanges() const
Definition WaterContainer.h:213
bool AllowsNegativeContent() const
Definition WaterContainer.h:191
double GetMaximumCapacity() const
Definition WaterContainer.h:122
double GetAreaFraction() const
Definition WaterContainer.h:136
void SaveAsInitialState()
Definition WaterContainer.cpp:300
void SetInitialState(double value)
Definition WaterContainer.h:248
void SetAllowNegativeContent(bool allow=true)
Definition WaterContainer.h:182
void ResetInputBooking()
Definition WaterContainer.h:80
Brick * GetParentBrick() const
Definition WaterContainer.h:363
virtual bool ContentAccessible() const
Definition WaterContainer.cpp:348
bool IsInfiniteStorage() const
Definition WaterContainer.h:381