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();
180 void ApplyChange(
int connectionIndex,
double rate,
double timeStepInDays);
195 return vecDoublePt{};
231 _timeMachine = timeMachine;
249 throw ShouldNotHappen(
"Process::SetTargetBrick - Should not be called (virtual)");
267 return !_outputs.empty();
276 return _container !=
nullptr;
283 std::vector<std::unique_ptr<Flux>> _outputs;
Definition HydroUnit.h:18
virtual void Finalize()
Definition Process.h:185
virtual vecDouble GetChangeRates()
Definition Process.cpp:250
bool HasWaterContainer() const noexcept
Definition Process.h:275
static std::unique_ptr< Process > Factory(const ProcessSettings &processSettings, Brick *brick)
Definition Process.cpp:194
virtual void SetHydroUnitProperties(HydroUnit *unit, Brick *brick)
Definition Process.cpp:221
virtual vecDouble GetRates()=0
void SetName(const string &name)
Definition Process.h:220
WaterContainer * GetWaterContainer() const
Definition Process.h:239
virtual void AttachForcing(Forcing *)
Definition Process.h:98
const string & GetName() const
Definition Process.h:211
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:281
static bool RegisterParametersAndForcing(SettingsModel *modelSettings, const string &processType)
Definition Process.cpp:204
virtual void Validate() const
Definition Process.cpp:304
virtual bool IsLateralProcess() const noexcept
Definition Process.h:257
virtual void SetParameters(const ProcessSettings &processSettings)
Definition Process.cpp:225
double GetSumChangeRatesOtherProcesses() const
Definition Process.cpp:285
virtual bool NeedsTargetBrickLinking() const
Definition Process.h:147
void ApplyChange(int connectionIndex, double rate, double timeStepInDays)
Definition Process.cpp:266
virtual vecDoublePt GetStateVariables()
Definition Process.h:194
virtual void StoreInOutgoingFlux(double *rate, int index)
Definition Process.cpp:260
virtual int GetConnectionCount() const =0
virtual bool IsValid() const =0
static bool HasParameter(const ProcessSettings &processSettings, std::string_view name)
Definition Process.cpp:229
int GetOutputFluxCount() const
Definition Process.h:117
void SetTimeMachine(TimeMachine *timeMachine)
Definition Process.h:230
Flux * GetOutputFlux(size_t index) const
Definition Process.h:127
void Reset()
Definition Process.cpp:215
bool HasOutputFluxes() const noexcept
Definition Process.h:266
virtual void SetTargetBrick(Brick *)
Definition Process.h:248
static const float * GetParameterValuePointer(const ProcessSettings &processSettings, std::string_view name)
Definition Process.cpp:239
Definition SettingsModel.h:68
Exception for code paths that should never be reached.
Definition Exceptions.h:133
Definition TimeMachine.h:9
Definition WaterContainer.h:9
Definition SettingsModel.h:29