FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
CablePendulum Class Reference
+ Inheritance diagram for CablePendulum:
+ Collaboration diagram for CablePendulum:

Public Member Functions

 CablePendulum (const std::string &simObjectName, ISimObjectCreator *const creator)
 
void OdeFcn (const double T, const double *const X, double *const XDot) const
 
void InitialConditionSetup (const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
 
void FinalSetup (const double T, const double *const X, ISimObjectCreator *const creator)
 
bool HasJacobians () const override
 
void OdeJacobian (double T, const double *X, double *J, int nStates) override
 
int GetJacobianSparsity (int nStates, int *rowPtr, int *colIdx) override
 

Protected Member Functions

void SetOutputPortValues (const double T, const double *const X) const
 
const double * MidpointPosition (const double T, const double *const X)
 
const double * BallPosition (const double T, const double *const X)
 
const double * BallVelocity (const double T, const double *const X)
 
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
 
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.
 
Eigen::Vector3d Drag (int k, int l, const double T, const double *const X) const
 
Eigen::Vector3d Spring (int k, int l, const double T, const double *const X) const
 
Eigen::Vector3d Damp (int k, int l, const double T, const double *const X) const
 
const double * SuspensionForce (const double T, const double *const X)
 
const double * CableOnBallForce (const double T, const double *const X)
 
int LocalIndex (int globalStateIndex) const
 

Protected Attributes

ICommonComputation * m_SetOutputPortValues
 
ISignalPort * m_SuspensionPos
 
ISignalPort * m_SuspensionVel
 
environment::EnvironmentProvider * Environment
 
std::vector< int > m_PositionIndex
 
std::vector< int > m_VelocityIndex
 
int m_BallPositionIndex
 
int m_BallVelocityIndex
 
int m_stateBase = 0
 Global index of this object's first state; cached in the constructor.
 
int m_NumPoints
 
double m_MidpointPosition [3]
 
double m_BallPosition [3]
 
double m_BallVelocity [3]
 
double m_SuspensionForce [3]
 
double m_CableOnBallForce [3]
 
double m_BallMass
 
double m_BallRadius
 
double m_BallDragCoef
 
double m_RhoWater
 
double m_BallRho
 
double m_ElementMass
 
double m_ElementLength0
 
double m_SpringCoef
 
double m_DamperCoef
 
double m_GravYancy
 
double m_CrossDragCoef
 
double m_AlongDragCoef
 
double m_Mass
 
double m_Length
 
double m_Diameter
 
double m_RhoCable
 
double m_Modulus
 

Member Function Documentation

◆ LocalIndex()

int CablePendulum::LocalIndex ( int  globalStateIndex) const
inlineprotected

Turns a model-global state index into one local to this SimObject.

OdeFcn and the port functions are handed the whole model's state vector, so they use the global indices AddState returned directly. OdeJacobian is handed this object's own slice, whose first element is the first state it registered, so every index it uses goes through this function (BASE-0033).

◆ segmentJacobian()

void CablePendulum::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
protected

Computes structural Jacobian blocks for one cable segment. Convention: pk = "this node" (A side), pl = "other end" (B side). Outputs are 3x3 row-major matrices for dForce_on_k / d{pk,pl,vk,vl}. Covers Spring(k,l) + Damp(k,l) terms; addDragJacobian adds Drag(k,l).


The documentation for this class was generated from the following file: