hydrobricks
Loading...
Searching...
No Matches
Processor.h
1#ifndef HYDROBRICKS_PROCESSOR_H
2#define HYDROBRICKS_PROCESSOR_H
3
4#include <memory>
5
6#include "Brick.h"
7#include "Includes.h"
8#include "Solver.h"
9
10class ModelHydro;
11
12class Processor {
13 public:
14 explicit Processor();
15
16 virtual ~Processor();
17
23 void Initialize(const SolverSettings& solverSettings);
24
30 void SetModel(ModelHydro* model);
31
36
42 [[nodiscard]] int GetStateVariableCount() const;
43
50 bool ProcessTimeStep(double timeStepInDays);
51
60 void GatherState(axd& state) const;
61
67 void ScatterState(const axd& state);
68
72 void ResetState();
73
87 void EvaluateRates(axd& rates, double timeStepInDays, bool applyConstraints = true);
88
96 void ConstrainRates(axd& rates, double timeStepInDays);
97
106 void EnforceConstraints(axd& rates, double timeStepInDays);
107
115 void ApplyRates(const axd& rates, double timeStepInDays);
116
120 void FinalizeTimeStep();
121
128 return _solvableConnectionCount;
129 }
130
136 const vector<Brick*>& GetSolvableBricks() const {
137 return _iterableBricks;
138 }
139
146 return _directConnectionCount;
147 }
148
149 protected:
150 std::unique_ptr<Solver> _solver; // owning
151 ModelHydro* _model; // non-owning reference
152 int _solvableConnectionCount;
153 int _directConnectionCount;
154 vecDoublePt _stateVariableChanges;
155 vector<Brick*> _iterableBricks; // non-owning views into HydroUnits/SubBasin
156 axd _changeRatesNoSolver;
157 axd _ratesBeforeSweep; // scratch buffer for the constraint fixpoint iteration
158
159 private:
166 void ValidateFluxTopology() const;
167
173 void StoreStateVariableChanges(std::span<double*> values);
174
182 void ApplyDirectChanges(Brick* brick, int& ptIndex, double timeStepInDays);
183};
184
185#endif // HYDROBRICKS_PROCESSOR_H
Definition Brick.h:22
Definition ModelHydro.h:14
Definition Processor.h:12
void ConnectToElementsToSolve()
Definition Processor.cpp:58
void EvaluateRates(axd &rates, double timeStepInDays, bool applyConstraints=true)
Definition Processor.cpp:146
int GetDirectConnectionCount() const
Definition Processor.h:145
void ApplyRates(const axd &rates, double timeStepInDays)
Definition Processor.cpp:211
void ScatterState(const axd &state)
Definition Processor.cpp:133
int GetSolvableConnectionCount() const
Definition Processor.h:127
void SetModel(ModelHydro *model)
Definition Processor.cpp:54
int GetStateVariableCount() const
Definition Processor.cpp:122
void GatherState(axd &state) const
Definition Processor.cpp:126
void FinalizeTimeStep()
Definition Processor.cpp:228
void ResetState()
Definition Processor.cpp:140
void Initialize(const SolverSettings &solverSettings)
Definition Processor.cpp:15
const vector< Brick * > & GetSolvableBricks() const
Definition Processor.h:136
bool ProcessTimeStep(double timeStepInDays)
Definition Processor.cpp:237
void EnforceConstraints(axd &rates, double timeStepInDays)
Definition Processor.cpp:191
void ConstrainRates(axd &rates, double timeStepInDays)
Definition Processor.cpp:174
Definition SettingsModel.h:11