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
90 double m_Length, m_Gravity;
91 mutable double m_Angle, m_AngularVelocity;
92 double m_Origin[3];
93
94#ifdef FH_VISUALIZATION
95 Ogre::ManualObject* m_Line;
96 Ogre::SceneNode* m_RenderNode;
97 std::string m_MaterialName;
98 std::string m_MeshName;
99 double m_Scale;
100#endif
101};
102
103#endif
Definition Pendulum.h:66