hydrobricks
Loading...
Searching...
No Matches
Process.h
1#ifndef HYDROBRICKS_PROCESS_H
2#define HYDROBRICKS_PROCESS_H
3
4#include "Flux.h"
5#include "Forcing.h"
6#include "Includes.h"
7#include "SettingsModel.h"
8
9class Brick;
10class HydroUnit;
11class WaterContainer;
12
13class Process : public wxObject {
14 public:
15 explicit Process(WaterContainer* container);
16
17 ~Process() override = default;
18
26 static Process* Factory(const ProcessSettings& processSettings, Brick* brick);
27
35 static bool RegisterParametersAndForcing(SettingsModel* modelSettings, const string& processType);
36
40 void Reset();
41
47 virtual bool IsOk() = 0;
48
56 static bool HasParameter(const ProcessSettings& processSettings, const string& name);
57
65 static float* GetParameterValuePointer(const ProcessSettings& processSettings, const string& name);
66
73 virtual void SetHydroUnitProperties(HydroUnit* unit, Brick* brick);
74
80 virtual void SetParameters(const ProcessSettings& processSettings);
81
87 virtual void AttachForcing(Forcing*) {
88 throw ShouldNotHappen();
89 }
90
96 void AttachFluxOut(Flux* flux) {
97 wxASSERT(flux);
98 _outputs.push_back(flux);
99 }
100
106 vector<Flux*> GetOutputFluxes() {
107 return _outputs;
108 }
109
116 return static_cast<int>(_outputs.size());
117 }
118
124 virtual bool ToAtmosphere() {
125 return false;
126 }
127
133 virtual bool NeedsTargetBrickLinking() {
134 return false;
135 }
136
142 virtual int GetConnectionsNb() = 0;
143
149 virtual vecDouble GetChangeRates();
150
157 virtual void StoreInOutgoingFlux(double* rate, int index);
158
166 void ApplyChange(int connectionIndex, double rate, double timeStepInDays);
167
171 virtual void Finalize() {
172 // Nothing to do here.
173 }
174
180 virtual vecDoublePt GetStateVariables() {
181 return vecDoublePt{};
182 }
183
190 virtual double* GetValuePointer(const string& name);
191
197 string GetName() {
198 return _name;
199 }
200
206 void SetName(const string& name) {
207 _name = name;
208 }
209
216 return _container;
217 }
218
224 virtual void SetTargetBrick(Brick*) {
225 throw ShouldNotHappen();
226 }
227
233 virtual bool IsLateralProcess() const {
234 return false;
235 }
236
237 protected:
238 string _name;
239 WaterContainer* _container;
240 vector<Flux*> _outputs;
241
248
254 virtual vecDouble GetRates() = 0;
255};
256
257#endif // HYDROBRICKS_PROCESS_H
Definition Brick.h:10
Definition Flux.h:8
Definition Forcing.h:7
Definition HydroUnit.h:14
Definition Process.h:13
virtual void Finalize()
Definition Process.h:171
virtual vecDouble GetChangeRates()
Definition Process.cpp:179
string GetName()
Definition Process.h:197
virtual bool ToAtmosphere()
Definition Process.h:124
int GetOutputFluxesNb()
Definition Process.h:115
virtual void SetHydroUnitProperties(HydroUnit *unit, Brick *brick)
Definition Process.cpp:149
virtual vecDouble GetRates()=0
void SetName(const string &name)
Definition Process.h:206
virtual void AttachForcing(Forcing *)
Definition Process.h:87
WaterContainer * GetWaterContainer()
Definition Process.h:215
void AttachFluxOut(Flux *flux)
Definition Process.h:96
static bool RegisterParametersAndForcing(SettingsModel *modelSettings, const string &processType)
Definition Process.cpp:108
virtual void SetParameters(const ProcessSettings &processSettings)
Definition Process.cpp:153
static bool HasParameter(const ProcessSettings &processSettings, const string &name)
Definition Process.cpp:157
virtual bool IsLateralProcess() const
Definition Process.h:233
void ApplyChange(int connectionIndex, double rate, double timeStepInDays)
Definition Process.cpp:195
static Process * Factory(const ProcessSettings &processSettings, Brick *brick)
Definition Process.cpp:25
virtual double * GetValuePointer(const string &name)
Definition Process.cpp:206
virtual vecDoublePt GetStateVariables()
Definition Process.h:180
virtual void StoreInOutgoingFlux(double *rate, int index)
Definition Process.cpp:189
virtual bool IsOk()=0
double GetSumChangeRatesOtherProcesses()
Definition Process.cpp:210
vector< Flux * > GetOutputFluxes()
Definition Process.h:106
virtual int GetConnectionsNb()=0
virtual bool NeedsTargetBrickLinking()
Definition Process.h:133
void Reset()
Definition Process.cpp:143
virtual void SetTargetBrick(Brick *)
Definition Process.h:224
static float * GetParameterValuePointer(const ProcessSettings &processSettings, const string &name)
Definition Process.cpp:167
Definition SettingsModel.h:66
Definition Includes.h:115
Definition WaterContainer.h:9
Definition SettingsModel.h:27