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
64class Pendulum : public SimObject
65{
66 public:
67 Pendulum(const std::string& simObjectName, ISimObjectCreator* const creator);
68 void OdeFcn(const double T, const double* const X, double* const XDot) const;
69
70 bool HasJacobians() const override;
71 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
72 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
73
74 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
75
76#ifdef FH_VISUALIZATION
77 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
78 void RenderUpdate(const double T, const double* const X);
79#endif
80
81 protected:
82 void SetOutputPortValues(const double T, const double* const X) const;
83 const double* Angle(const double T, const double* const X);
84 const double* AngularVelocity(const double T, const double* const X);
85
86 ICommonComputation* m_SetOutputPortValues;
87 int m_AngleIndex, m_AngularVelocityIndex;
88
89 double m_Length, m_Gravity;
90 mutable double m_Angle, m_AngularVelocity;
91 double m_Origin[3];
92
93#ifdef FH_VISUALIZATION
94 Ogre::ManualObject* m_Line;
95 Ogre::SceneNode* m_RenderNode;
96 std::string m_MaterialName;
97 std::string m_MeshName;
98 double m_Scale;
99#endif
100};
101
102#endif
Definition Pendulum.h:65