95 HydroCable(
const std::string& simObjectName, ISimObjectCreator*
const creator);
96 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
97 void InitialConditionSetup(
const double T,
const double*
const currentIC,
double*
const updatedIC, ISimObjectCreator*
const creator);
99 bool HasJacobians()
const override;
100 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
101 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
103#ifdef FH_VISUALIZATION
104 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
105 void RenderUpdate(
const double T,
const double*
const X);
109 void SetOutputPortValues(
const double T,
const double*
const X)
const;
110 Eigen::Vector3d Drag(
int k,
int l,
const double T,
const double*
const X)
const;
111 Eigen::Vector3d Spring(
int k,
int l,
const double T,
const double*
const X)
const;
112 Eigen::Vector3d Damp(
int k,
int l,
const double T,
const double*
const X)
const;
120 const double* pk,
const double* pl,
121 const double* vk,
const double* vl,
122 double* dF_dpk,
double* dF_dpl,
123 double* dF_dvk,
double* dF_dvl)
const;
124 const double* ForceA(
const double T,
const double*
const X);
125 const double* ForceB(
const double T,
const double*
const X);
126 const double* PosA(
const double T,
const double*
const X);
127 const double* PosB(
const double T,
const double*
const X);
129 ICommonComputation* m_SetOutputPortValues;
130 ISignalPort* m_PositionA;
131 ISignalPort* m_PositionB;
132 ISignalPort* m_VelocityA;
133 ISignalPort* m_VelocityB;
134 ISignalPort* m_Current;
136 std::vector<int> m_PositionIndex, m_VelocityIndex;
149 mutable double m_ForceA[3];
150 mutable double m_ForceB[3];
152 mutable double m_PosA[3];
153 mutable double m_PosB[3];
156 double m_ElementMass, m_ElementLength0;
157 double m_SpringCoef, m_DamperCoef, m_GravYancy;
158 double m_CrossDragCoef, m_AlongDragCoef, m_RhoWater;
159 double m_Mass, m_Length, m_Diameter, m_RhoCable, m_Modulus;
161#ifdef FH_VISUALIZATION
162 Ogre::ManualObject* m_Line;
void computeSegmentJacobian(const double *pk, const double *pl, const double *vk, const double *vl, double *dF_dpk, double *dF_dpl, double *dF_dvk, double *dF_dvl) const