84 CablePendulum(
const std::string& simObjectName, ISimObjectCreator*
const creator);
85 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
86 void InitialConditionSetup(
const double T,
const double*
const currentIC,
double*
const updatedIC, ISimObjectCreator*
const creator);
87 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
89#ifdef FH_VISUALIZATION
90 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
91 void RenderUpdate(
const double T,
const double*
const X);
95 void SetOutputPortValues(
const double T,
const double*
const X)
const;
96 const double* MidpointPosition(
const double T,
const double*
const X);
97 const double* BallPosition(
const double T,
const double*
const X);
98 const double* BallVelocity(
const double T,
const double*
const X);
101 bool HasJacobians()
const override;
102 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
103 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
112 const double* vk,
const double* vl,
113 double dF_dpk[9],
double dF_dpl[9],
114 double dF_dvk[9],
double dF_dvl[9])
const;
115 Eigen::Vector3d Drag(
int k,
int l,
const double T,
const double*
const X)
const;
116 Eigen::Vector3d Spring(
int k,
int l,
const double T,
const double*
const X)
const;
117 Eigen::Vector3d Damp(
int k,
int l,
const double T,
const double*
const X)
const;
118 const double* SuspensionForce(
const double T,
const double*
const X);
119 const double* CableOnBallForce(
const double T,
const double*
const X);
122 ICommonComputation* m_SetOutputPortValues;
123 ISignalPort* m_SuspensionPos;
124 ISignalPort* m_SuspensionVel;
126 environment::EnvironmentProvider* Environment;
127 std::vector<int> m_PositionIndex, m_VelocityIndex;
128 int m_BallPositionIndex, m_BallVelocityIndex;
130 mutable double m_MidpointPosition[3];
131 mutable double m_BallPosition[3];
132 mutable double m_BallVelocity[3];
133 mutable double m_SuspensionForce[3];
134 mutable double m_CableOnBallForce[3];
136 double m_BallMass, m_BallRadius, m_BallDragCoef, m_RhoWater, m_BallRho;
137 double m_ElementMass, m_ElementLength0;
138 double m_SpringCoef, m_DamperCoef, m_GravYancy;
139 double m_CrossDragCoef, m_AlongDragCoef;
140 double m_Mass, m_Length, m_Diameter, m_RhoCable, m_Modulus;
142#ifdef FH_VISUALIZATION
143 Ogre::ManualObject* m_Line;
144 Ogre::SceneNode* m_RenderNode;
145 std::string m_MaterialName;
146 std::string m_MeshName;
void segmentJacobian(const double *pk, const double *pl, const double *vk, const double *vl, double dF_dpk[9], double dF_dpl[9], double dF_dvk[9], double dF_dvl[9]) const