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
58 static float* GetParameterValuePointer(const ProcessSettings& processSettings, const string& name);
59
66 virtual void SetHydroUnitProperties(HydroUnit* unit, Brick* brick);
67
73 virtual void SetParameters(const ProcessSettings& processSettings);
74
75 virtual void AttachForcing(Forcing*) {
76 throw ShouldNotHappen();
77 }
78
84 void AttachFluxOut(Flux* flux) {
85 wxASSERT(flux);
86 m_outputs.push_back(flux);
87 }
88
89 vector<Flux*> GetOutputFluxes() {
90 return m_outputs;
91 }
92
93 int GetOutputFluxesNb() {
94 return int(m_outputs.size());
95 }
96
97 virtual bool ToAtmosphere() {
98 return false;
99 }
100
101 virtual bool NeedsTargetBrickLinking() {
102 return false;
103 }
104
105 virtual int GetConnectionsNb() = 0;
106
107 virtual vecDouble GetChangeRates();
108
109 virtual void StoreInOutgoingFlux(double* rate, int index);
110
111 void ApplyChange(int connectionIndex, double rate, double timeStepInDays);
112
113 virtual void Finalize() {
114 // Nothing to do here.
115 }
116
122 virtual vecDoublePt GetStateVariables() {
123 return vecDoublePt{};
124 }
125
126 virtual double* GetValuePointer(const string& name);
127
128 string GetName() {
129 return m_name;
130 }
131
132 void SetName(const string& name) {
133 m_name = name;
134 }
135
136 WaterContainer* GetWaterContainer() {
137 return m_container;
138 }
139
140 virtual void SetTargetBrick(Brick*) {
141 throw ShouldNotHappen();
142 }
143
144 protected:
145 string m_name;
146 WaterContainer* m_container;
147 vector<Flux*> m_outputs;
148
149 double GetSumChangeRatesOtherProcesses();
150
151 virtual vecDouble GetRates() = 0;
152
153 private:
154};
155
156#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 SetHydroUnitProperties(HydroUnit *unit, Brick *brick)
Definition Process.cpp:117
void AttachFluxOut(Flux *flux)
Definition Process.h:84
static bool RegisterParametersAndForcing(SettingsModel *modelSettings, const string &processType)
Definition Process.cpp:80
virtual void SetParameters(const ProcessSettings &processSettings)
Definition Process.cpp:121
static bool HasParameter(const ProcessSettings &processSettings, const string &name)
Definition Process.cpp:125
static Process * Factory(const ProcessSettings &processSettings, Brick *brick)
Definition Process.cpp:23
virtual vecDoublePt GetStateVariables()
Definition Process.h:122
virtual bool IsOk()=0
void Reset()
Definition Process.cpp:111
Definition SettingsModel.h:66
Definition Includes.h:115
Definition WaterContainer.h:9
Definition SettingsModel.h:27