1#ifndef HYDROBRICKS_PROCESS_H
2#define HYDROBRICKS_PROCESS_H
9#include "SettingsModel.h"
50 [[nodiscard]]
virtual bool IsValid()
const = 0;
99 throw ShouldNotHappen(
"Process::AttachForcing - Should not be called (virtual)");
109 _outputs.push_back(std::move(flux));
118 return static_cast<int>(_outputs.size());
128 assert(_outputs.size() > index);
129 assert(_outputs[index]);
130 return _outputs[index].get();
183 void ApplyChange(
int connectionIndex,
double rate,
double timeStepInDays);
198 return vecDoublePt{};
234 _timeMachine = timeMachine;
252 throw ShouldNotHappen(
"Process::SetTargetBrick - Should not be called (virtual)");
272 throw ShouldNotHappen(
"Process::AddTargetBrickWithWeights - Should not be called (virtual)");
290 return !_outputs.empty();
299 return _container !=
nullptr;
306 std::vector<std::unique_ptr<Flux>> _outputs;
307 vecDouble _changeRates;
318 const vecDouble&
StoreRates(std::initializer_list<double> rates) {
319 _changeRates.assign(rates);
339 [[nodiscard]]
virtual const vecDouble&
GetRates() = 0;
Definition HydroUnit.h:18
virtual void Finalize()
Definition Process.h:188
bool HasWaterContainer() const noexcept
Definition Process.h:298
const vecDouble & StoreRates(std::initializer_list< double > rates)
Definition Process.h:318
static std::unique_ptr< Process > Factory(const ProcessSettings &processSettings, Brick *brick)
Definition Process.cpp:424
virtual void SetHydroUnitProperties(HydroUnit *unit, Brick *brick)
Definition Process.cpp:451
void SetName(const string &name)
Definition Process.h:223
WaterContainer * GetWaterContainer() const
Definition Process.h:242
virtual void AttachForcing(Forcing *)
Definition Process.h:98
const string & GetName() const
Definition Process.h:214
void AttachFluxOut(std::unique_ptr< Flux > flux)
Definition Process.h:107
virtual bool ToAtmosphere() const
Definition Process.h:138
virtual double * GetValuePointer(std::string_view name)
Definition Process.cpp:510
virtual void Validate() const
Definition Process.cpp:533
virtual bool IsLateralProcess() const noexcept
Definition Process.h:280
virtual void SetParameters(const ProcessSettings &processSettings)
Definition Process.cpp:455
double GetSumChangeRatesOtherProcesses() const
Definition Process.cpp:514
virtual bool NeedsTargetBrickLinking() const
Definition Process.h:147
void ApplyChange(int connectionIndex, double rate, double timeStepInDays)
Definition Process.cpp:495
virtual vecDoublePt GetStateVariables()
Definition Process.h:197
static bool RegisterSettings(SettingsModel *modelSettings, const string &processType)
Definition Process.cpp:434
virtual void StoreInOutgoingFlux(double *rate, int index)
Definition Process.cpp:489
virtual int GetConnectionCount() const =0
virtual bool IsValid() const =0
static bool HasParameter(const ProcessSettings &processSettings, std::string_view name)
Definition Process.cpp:459
virtual void AddTargetBrickWithWeights(Brick *, const std::vector< Brick * > &)
Definition Process.h:271
virtual bool LinksMultipleTargets() const
Definition Process.h:260
int GetOutputFluxCount() const
Definition Process.h:117
void SetTimeMachine(TimeMachine *timeMachine)
Definition Process.h:233
virtual const vecDouble & GetRates()=0
virtual const vecDouble & GetChangeRates()
Definition Process.cpp:480
Flux * GetOutputFlux(size_t index) const
Definition Process.h:127
virtual void Reset()
Definition Process.cpp:445
bool HasOutputFluxes() const noexcept
Definition Process.h:289
virtual void SetTargetBrick(Brick *)
Definition Process.h:251
static const float * GetParameterValuePointer(const ProcessSettings &processSettings, std::string_view name)
Definition Process.cpp:469
Definition SettingsModel.h:70
Exception for code paths that should never be reached.
Definition Exceptions.h:133
Definition TimeMachine.h:9
Definition WaterContainer.h:9
Definition SettingsModel.h:30