summaryrefslogtreecommitdiffstats
path: root/Project/ControlElementSolver.h
diff options
context:
space:
mode:
Diffstat (limited to 'Project/ControlElementSolver.h')
-rw-r--r--Project/ControlElementSolver.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/Project/ControlElementSolver.h b/Project/ControlElementSolver.h
new file mode 100644
index 0000000..6d0ad3f
--- /dev/null
+++ b/Project/ControlElementSolver.h
@@ -0,0 +1,49 @@
+#ifndef CONTROLELEMENTSOLVER_H
+#define CONTROLELEMENTSOLVER_H
+
+#include <stddef.h> // NULL definition
+#include <vector>
+
+class ControlElementContainer;
+class ControlEditor;
+class ConnectionLine;
+class Constant;
+class Exponential;
+class Gain;
+class IOControl;
+class Limiter;
+class Multiplier;
+class RateLimiter;
+class Sum;
+class TransferFunction;
+
+class ControlElementSolver
+{
+ public:
+ ControlElementSolver() {}
+ ControlElementSolver(ControlEditor* controlEditor,
+ double timeStep = 1e-3,
+ double integrationError = 1e-3,
+ bool startAllZero = false,
+ double input = 0.0);
+ ~ControlElementSolver() {}
+ virtual bool InitializeValues(double input, bool startAllZero);
+ virtual void SolveNextStep(double input);
+ virtual std::vector<double> GetSolutions() { return m_solutions; }
+ virtual double GetLastSolution() { return m_solutions[m_solutions.size() - 1]; }
+ virtual bool IsOK() const { return m_isOK; }
+ protected:
+ void FillAllConnectedChildren(ConnectionLine* parent);
+ ConnectionLine* SolveNextElement(ConnectionLine* currentLine);
+
+ ControlElementContainer* m_ctrlContainer = NULL;
+ double m_timeStep;
+ double m_integrationError;
+ std::vector<double> m_solutions;
+ bool m_isOK = false;
+
+ IOControl* m_inputControl = NULL;
+ IOControl* m_outputControl = NULL;
+};
+
+#endif // CONTROLELEMENTSOLVER_H