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