FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
HydroCable.h
1#ifndef HYDRO_CABLE_H
2#define HYDRO_CABLE_H
3
4#include "sfh/constants.h"
5#include "sfh/math.h"
6#include "sfh/text.h"
7#include "sfh/util.h"
8
9#include <Eigen/Dense>
10
11#include <fhsim/simobject/SimObject.h>
12#include <memory>
13
87class HydroCable : public SimObject
88{
89 public:
90 HydroCable(const std::string& simObjectName, ISimObjectCreator* const creator);
91 void OdeFcn(const double T, const double* const X, double* const XDot) const;
92 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
93
94 bool HasJacobians() const override;
95 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
96 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
97
98#ifdef FH_VISUALIZATION
99 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
100 void RenderUpdate(const double T, const double* const X);
101#endif
102
103 protected:
104 void SetOutputPortValues(const double T, const double* const X) const;
105 Eigen::Vector3d Drag(int k, int l, const double T, const double* const X) const;
106 Eigen::Vector3d Spring(int k, int l, const double T, const double* const X) const;
107 Eigen::Vector3d Damp(int k, int l, const double T, const double* const X) const;
108
115 const double* pk, const double* pl,
116 const double* vk, const double* vl,
117 double* dF_dpk, double* dF_dpl,
118 double* dF_dvk, double* dF_dvl) const;
119 const double* ForceA(const double T, const double* const X);
120 const double* ForceB(const double T, const double* const X);
121 const double* PosA(const double T, const double* const X);
122 const double* PosB(const double T, const double* const X);
123
124 ICommonComputation* m_SetOutputPortValues;
125 ISignalPort* m_PositionA;
126 ISignalPort* m_PositionB;
127 ISignalPort* m_VelocityA;
128 ISignalPort* m_VelocityB;
129 ISignalPort* m_Current;
130
131 std::vector<int> m_PositionIndex, m_VelocityIndex;
132
133 int m_NumPoints;
134 mutable double m_ForceA[3];
135 mutable double m_ForceB[3];
136 // NEW START
137 mutable double m_PosA[3];
138 mutable double m_PosB[3];
139 // NEW END
140
141 double m_ElementMass, m_ElementLength0;
142 double m_SpringCoef, m_DamperCoef, m_GravYancy;
143 double m_CrossDragCoef, m_AlongDragCoef, m_RhoWater;
144 double m_Mass, m_Length, m_Diameter, m_RhoCable, m_Modulus;
145
146#ifdef FH_VISUALIZATION
147 Ogre::ManualObject* m_Line;
148#endif
149};
150
151#endif
Definition HydroCable.h:88
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