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 m_outputs.push_back(flux);
99 }
100
106 vector<Flux*> GetOutputFluxes() {
107 return m_outputs;
108 }
109
116 return static_cast<int>(m_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 m_name;
199 }
200
206 void SetName(const string& name) {
207 m_name = name;
208 }
209
216 return m_container;
217 }
218
224 virtual void SetTargetBrick(Brick*) {
225 throw ShouldNotHappen();
226 }
227
228 protected:
229 string m_name;
230 WaterContainer* m_container;
231 vector<Flux*> m_outputs;
232
239
245 virtual vecDouble GetRates() = 0;
246};
247
248#endif // HYDROBRICKS_PROCESS_H
Definition Brick.h:10
Definition Flux.h:8
Definition Forcing.h:7
Definition HydroUnit.h:13
Definition Process.h:13
virtual void Finalize()
Definition Process.h:171
virtual vecDouble GetChangeRates()
Definition Process.cpp:168
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:138
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:99
virtual void SetParameters(const ProcessSettings &processSettings)
Definition Process.cpp:142
static bool HasParameter(const ProcessSettings &processSettings, const string &name)
Definition Process.cpp:146
void ApplyChange(int connectionIndex, double rate, double timeStepInDays)
Definition Process.cpp:184
static Process * Factory(const ProcessSettings &processSettings, Brick *brick)
Definition Process.cpp:24
virtual double * GetValuePointer(const string &name)
Definition Process.cpp:195
virtual vecDoublePt GetStateVariables()
Definition Process.h:180
virtual void StoreInOutgoingFlux(double *rate, int index)
Definition Process.cpp:178
virtual bool IsOk()=0
double GetSumChangeRatesOtherProcesses()
Definition Process.cpp:199
vector< Flux * > GetOutputFluxes()
Definition Process.h:106
virtual int GetConnectionsNb()=0
virtual bool NeedsTargetBrickLinking()
Definition Process.h:133
void Reset()
Definition Process.cpp:132
virtual void SetTargetBrick(Brick *)
Definition Process.h:224
static float * GetParameterValuePointer(const ProcessSettings &processSettings, const string &name)
Definition Process.cpp:156
Definition SettingsModel.h:66
Definition Includes.h:115
Definition WaterContainer.h:9
Definition SettingsModel.h:27