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
14struct CableSegmentStructuralForces; // cable/CableSegmentStructuralJacobian.h
15
97class HydroCable : public SimObject
98{
99 public:
100 HydroCable(const std::string& simObjectName, ISimObjectCreator* const creator);
101 void OdeFcn(const double T, const double* const X, double* const XDot) const;
102 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
103
104 bool HasJacobians() const override;
105 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
106 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
107
108#ifdef FH_VISUALIZATION
109 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
110 void RenderUpdate(const double T, const double* const X);
111#endif
112
113 protected:
114 void SetOutputPortValues(const double T, const double* const X) 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;
119 CableSegmentStructuralForces StructuralForce(int k, int l, const double T, const double* const X) const;
120
121 const double* ForceA(const double T, const double* const X);
122 const double* ForceB(const double T, const double* const X);
123 const double* PosA(const double T, const double* const X);
124 const double* PosB(const double T, const double* const X);
125
126 ICommonComputation* m_SetOutputPortValues;
127 ISignalPort* m_PositionA;
128 ISignalPort* m_PositionB;
129 ISignalPort* m_VelocityA;
130 ISignalPort* m_VelocityB;
131 ISignalPort* m_Current;
132
133 std::vector<int> m_PositionIndex, m_VelocityIndex;
134 int m_stateBase = 0;
135
136 int m_NumPoints;
137 mutable double m_ForceA[3];
138 mutable double m_ForceB[3];
139 // NEW START
140 mutable double m_PosA[3];
141 mutable double m_PosB[3];
142 // NEW END
143
144 double m_ElementMass, m_ElementLength0;
145 double m_SpringCoef, m_DamperCoef, m_GravYancy;
146 double m_RhoWater;
147 double m_Mass, m_Length, m_Diameter, m_RhoCable, m_Modulus;
148
149#ifdef FH_VISUALIZATION
150 Ogre::ManualObject* m_Line;
151#endif
152};
153
154#endif
Definition HydroCable.h:98
CableSegmentStructuralForces StructuralForce(int k, int l, const double T, const double *const X) const
Spring and Damp of the segment k-l with one evaluation of the law.
int m_stateBase
Global index of this object's first state, Position1; cached in the constructor.
Definition HydroCable.h:134
The spring force and the damper force on node k of a segment k-l, each along the segment (towards l w...
Definition CableSegmentStructuralJacobian.h:9