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