hydrobricks
Loading...
Searching...
No Matches
Solver.h
1#ifndef HYDROBRICKS_SOLVER_H
2#define HYDROBRICKS_SOLVER_H
3
4#include <memory>
5
6#include "Includes.h"
7#include "SettingsModel.h"
8
9class Processor;
10
11class Solver {
12 public:
13 explicit Solver();
14
15 virtual ~Solver() = default;
16
23 virtual bool Solve(double timeStepInDays) = 0;
24
31 static std::unique_ptr<Solver> Factory(const SolverSettings& solverSettings);
32
38 void Connect(Processor* processor) {
39 assert(processor);
40 _processor = processor;
41 }
42
47
48 protected:
49 Processor* _processor;
50 axxd _stateVariableChanges;
51 axxd _changeRates;
52 int _nIterations;
53 double _timeStepInDays;
54
60 void SaveStateVariables(int col);
61
68 void ComputeChangeRates(int col, bool applyConstraints = true);
69
75 void ApplyConstraintsFor(int col);
76
81
86 void SetStateVariablesToIteration(int col);
87
93 void SetStateVariablesToAvgOf(int col1, int col2);
94
100 void ApplyProcesses(int col) const;
101
107 void ApplyProcesses(const axd& changeRates) const;
108
112 void Finalize() const;
113
114 private:
115};
116
117#endif // HYDROBRICKS_SOLVER_H
Definition Processor.h:12
Definition Solver.h:11
void SaveStateVariables(int col)
Definition Solver.cpp:54
void ComputeChangeRates(int col, bool applyConstraints=true)
Definition Solver.cpp:61
void Connect(Processor *processor)
Definition Solver.h:38
void ApplyConstraintsFor(int col)
Definition Solver.cpp:92
void SetStateVariablesToAvgOf(int col1, int col2)
Definition Solver.cpp:124
virtual bool Solve(double timeStepInDays)=0
void Finalize() const
Definition Solver.cpp:167
void InitializeContainers()
Definition Solver.cpp:47
static std::unique_ptr< Solver > Factory(const SolverSettings &solverSettings)
Definition Solver.cpp:30
void ApplyProcesses(int col) const
Definition Solver.cpp:131
void ResetStateVariableChanges()
Definition Solver.cpp:110
void SetStateVariablesToIteration(int col)
Definition Solver.cpp:117
Definition SettingsModel.h:11