1#ifndef HYDROBRICKS_PROCESS_H
2#define HYDROBRICKS_PROCESS_H
9#include "SettingsModel.h"
50 [[nodiscard]]
virtual bool IsValid()
const = 0;
111 throw ShouldNotHappen(
"Process::AttachForcing - Should not be called (virtual)");
121 _outputs.push_back(std::move(flux));
130 return static_cast<int>(_outputs.size());
140 assert(_outputs.size() > index);
141 assert(_outputs[index]);
142 return _outputs[index].get();
231 void ApplyChange(
int connectionIndex,
double rate,
double timeStepInDays);
246 return vecDoublePt{};
282 _timeMachine = timeMachine;
300 throw ShouldNotHappen(
"Process::SetTargetBrick - Should not be called (virtual)");
310 throw ShouldNotHappen(
"Process::AddGateBrick - Should not be called (virtual)");
330 throw ShouldNotHappen(
"Process::AddTargetBrickWithWeights - Should not be called (virtual)");
360 throw ShouldNotHappen(
"Process::GetLinearResponseRate - Should not be called (virtual)");
381 return !_outputs.empty();
390 return _container !=
nullptr;
435 string _parentBrickName;
436 std::vector<std::unique_ptr<Flux>> _outputs;
437 vecDouble _changeRates;
448 const vecDouble&
StoreRates(std::initializer_list<double> rates) {
449 _changeRates.assign(rates);
469 [[nodiscard]]
virtual const vecDouble&
GetRates() = 0;
Definition HydroUnit.h:18
virtual bool NeedsGateBrickLinking() const
Definition Process.h:183
virtual void Finalize()
Definition Process.h:236
bool HasWaterContainer() const noexcept
Definition Process.h:389
const vecDouble & StoreRates(std::initializer_list< double > rates)
Definition Process.h:448
static std::unique_ptr< Process > Factory(const ProcessSettings &processSettings, Brick *brick)
Definition Process.cpp:542
virtual void SetHydroUnitProperties(HydroUnit *unit, Brick *brick)
Definition Process.cpp:576
void SetName(const string &name)
Definition Process.h:271
WaterContainer * GetWaterContainer() const
Definition Process.h:290
virtual double GetLinearResponseRate() const
Definition Process.h:359
virtual bool RequiresDailyTimeStep() const
Definition Process.h:163
virtual void AttachForcing(Forcing *)
Definition Process.h:110
const string & GetName() const
Definition Process.h:262
void AttachFluxOut(std::unique_ptr< Flux > flux)
Definition Process.h:119
virtual bool ToAtmosphere() const
Definition Process.h:150
virtual double GetLinearResponseOffset() const
Definition Process.h:371
virtual bool HasLinearResponse() const
Definition Process.h:349
double GetForcingRate(Forcing *forcing) const
Definition Process.cpp:673
virtual double * GetValuePointer(std::string_view name)
Definition Process.cpp:644
virtual void Validate() const
Definition Process.cpp:667
virtual bool IsLateralProcess() const noexcept
Definition Process.h:338
virtual void SetParameters(const ProcessSettings &processSettings)
Definition Process.cpp:580
int GetCurrentDayOfYear() const
Definition Process.cpp:696
double GetSumChangeRatesOtherProcesses() const
Definition Process.cpp:648
virtual bool NeedsTargetBrickLinking() const
Definition Process.h:172
void ApplyChange(int connectionIndex, double rate, double timeStepInDays)
Definition Process.cpp:629
double GetTimeStepInDays() const
Definition Process.cpp:687
virtual bool HasConstraintPriority() const
Definition Process.h:195
virtual vecDoublePt GetStateVariables()
Definition Process.h:245
static bool RegisterSettings(SettingsModel *modelSettings, const string &processType)
Definition Process.cpp:552
virtual void StoreInOutgoingFlux(double *rate, int index)
Definition Process.cpp:623
virtual int GetConnectionCount() const =0
virtual bool IsValid() const =0
static bool HasParameter(const ProcessSettings &processSettings, std::string_view name)
Definition Process.cpp:584
virtual void AddTargetBrickWithWeights(Brick *, const std::vector< Brick * > &)
Definition Process.h:329
virtual bool LinksMultipleTargets() const
Definition Process.h:318
virtual void AddGateBrick(Brick *)
Definition Process.h:309
int GetOutputFluxCount() const
Definition Process.h:129
void SetTimeMachine(TimeMachine *timeMachine)
Definition Process.h:281
virtual const vecDouble & GetRates()=0
virtual const vecDouble & GetChangeRates()
Definition Process.cpp:614
Flux * GetOutputFlux(size_t index) const
Definition Process.h:139
virtual void Reset()
Definition Process.cpp:563
bool HasOutputFluxes() const noexcept
Definition Process.h:380
virtual void SetTargetBrick(Brick *)
Definition Process.h:299
const float * GetParameterValuePointer(const ProcessSettings &processSettings, std::string_view name)
Definition Process.cpp:594
void SetParentContext(HydroUnit *unit, Brick *brick)
Definition Process.cpp:569
Definition SettingsModel.h:74
Exception for code paths that should never be reached.
Definition Exceptions.h:133
Definition TimeMachine.h:9
Definition WaterContainer.h:10
Definition SettingsModel.h:32