88 CablePendulum(
const std::string& simObjectName, ISimObjectCreator*
const creator);
89 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
90 void InitialConditionSetup(
const double T,
const double*
const currentIC,
double*
const updatedIC, ISimObjectCreator*
const creator);
91 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
93#ifdef FH_VISUALIZATION
94 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
95 void RenderUpdate(
const double T,
const double*
const X);
99 void SetOutputPortValues(
const double T,
const double*
const X)
const;
100 const double* MidpointPosition(
const double T,
const double*
const X);
101 const double* BallPosition(
const double T,
const double*
const X);
102 const double* BallVelocity(
const double T,
const double*
const X);
105 bool HasJacobians()
const override;
106 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
107 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
116 const double* vk,
const double* vl,
117 double dF_dpk[9],
double dF_dpl[9],
118 double dF_dvk[9],
double dF_dvl[9])
const;
121 void addDragJacobian(
const double T,
const double* pk,
const double* pl,
const double* vk,
122 double dragFactor,
double dF_dpk[9],
double dF_dpl[9],
double dF_dvk[9])
const;
123 Eigen::Vector3d Drag(
int k,
int l,
const double T,
const double*
const X)
const;
124 Eigen::Vector3d Spring(
int k,
int l,
const double T,
const double*
const X)
const;
125 Eigen::Vector3d Damp(
int k,
int l,
const double T,
const double*
const X)
const;
126 const double* SuspensionForce(
const double T,
const double*
const X);
127 const double* CableOnBallForce(
const double T,
const double*
const X);
130 ICommonComputation* m_SetOutputPortValues;
131 ISignalPort* m_SuspensionPos;
132 ISignalPort* m_SuspensionVel;
134 environment::EnvironmentProvider* Environment;
135 std::vector<int> m_PositionIndex, m_VelocityIndex;
136 int m_BallPositionIndex, m_BallVelocityIndex;
148 mutable double m_MidpointPosition[3];
149 mutable double m_BallPosition[3];
150 mutable double m_BallVelocity[3];
151 mutable double m_SuspensionForce[3];
152 mutable double m_CableOnBallForce[3];
154 double m_BallMass, m_BallRadius, m_BallDragCoef, m_RhoWater, m_BallRho;
155 double m_ElementMass, m_ElementLength0;
156 double m_SpringCoef, m_DamperCoef, m_GravYancy;
157 double m_CrossDragCoef, m_AlongDragCoef;
158 double m_Mass, m_Length, m_Diameter, m_RhoCable, m_Modulus;
160#ifdef FH_VISUALIZATION
161 Ogre::ManualObject* m_Line;
162 Ogre::SceneNode* m_RenderNode;
163 std::string m_MaterialName;
164 std::string m_MeshName;
void addDragJacobian(const double T, const double *pk, const double *pl, const double *vk, double dragFactor, double dF_dpk[9], double dF_dpl[9], double dF_dvk[9]) const
Adds the derivatives of Drag(k,l), the force on node k, to the blocks segmentJacobian filled.
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