FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Pendulum.h
1#ifndef PENDULUM_H
2#define PENDULUM_H
3
4#include "sfh/constants.h"
5#include "sfh/math.h"
6#include "sfh/text.h"
7#include "sfh/util.h"
8
9#include <fhsim/simobject/SimObject.h>
10#include <memory>
11
65class Pendulum : public SimObject
66{
67 public:
68 Pendulum(const std::string& simObjectName, ISimObjectCreator* const creator);
69 void OdeFcn(const double T, const double* const X, double* const XDot) const;
70
71 bool HasJacobians() const override;
72 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
73 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
74
75 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
76
77#ifdef FH_VISUALIZATION
78 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
79 void RenderUpdate(const double T, const double* const X);
80#endif
81
82 protected:
83 void SetOutputPortValues(const double T, const double* const X) const;
84 const double* Angle(const double T, const double* const X);
85 const double* AngularVelocity(const double T, const double* const X);
86
87 ICommonComputation* m_SetOutputPortValues;
88 int m_AngleIndex, m_AngularVelocityIndex;
89
97 int LocalIndex(int globalStateIndex) const { return globalStateIndex - m_AngleIndex; }
98
99 double m_Length, m_Gravity;
100 mutable double m_Angle, m_AngularVelocity;
101 double m_Origin[3];
102
103#ifdef FH_VISUALIZATION
104 Ogre::ManualObject* m_Line;
105 Ogre::SceneNode* m_RenderNode;
106 std::string m_MaterialName;
107 std::string m_MeshName;
108 double m_Scale;
109#endif
110};
111
112#endif
Definition Pendulum.h:66
int LocalIndex(int globalStateIndex) const
Definition Pendulum.h:97