FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
CLinearSystem.h
1#ifndef CLinearSystem_H
2#define CLinearSystem_H
3
70#include <Eigen/Eigen>
71
72#include <fhsim/simobject/SimObject.h>
73#include <string>
74
75class CLinearSystem : public SimObject
76{
77 public:
78 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
79
81 CLinearSystem(std::string sSimObjectName, ISimObjectCreator* pCreator);
83
85 void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
86
87 bool HasJacobians() const override;
88 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
89 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
90
91 bool HasPortJacobians() const override;
92 void OutputPortJacobian(const std::string& portName, double T, const double* X,
93 double* dPort_dX, int portSize, int nStates, int index = -1) override;
94 void InputPortJacobian(const std::string& portName, double T, const double* X,
95 double* dF_dInput, int portSize, int nStates) override;
96
98 const double* Output(const double T, const double* const X);
99
100#ifdef FH_VISUALIZATION
102 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator) { }
103
105 virtual void RenderUpdate(const double T, const double* const X) { }
106#endif
107 protected:
108 static Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> StringToEigenMatrix(const std::string& str);
109
110 int m_StateIndex;
111
113 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> A;
114
116 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> B;
117
119 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> C;
120
122 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> D;
123
125 ISignalPort* m_Input;
126
127 double* m_Signal;
128};
129
130
131#endif
Definition CLinearSystem.h:76
EIGEN_MAKE_ALIGNED_OPERATOR_NEW CLinearSystem(std::string sSimObjectName, ISimObjectCreator *pCreator)
Constructor.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > D
The direct feedthrough matrix.
Definition CLinearSystem.h:122
void OdeFcn(const double dT, const double *const adX, double *const adXDot) const
Calculates the state derivatives.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > B
The gain matrix.
Definition CLinearSystem.h:116
const double * Output(const double T, const double *const X)
The output of the system equation Y=C*x+D*u.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > C
The output matrix.
Definition CLinearSystem.h:119
ISignalPort * m_Input
Input port.
Definition CLinearSystem.h:125
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > A
The system matrix.
Definition CLinearSystem.h:113