FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Cable6Dof.h
1#pragma once
2
75#include <Eigen/Eigen>
76
77#include <fhsim/simobject/SimObject.h>
78
79#ifdef FH_VISUALIZATION
80# include "sfh/ogre/C3DLine.h"
81#endif
82
83namespace RbCable
84{
85class Cable6Dof : public SimObject
86{
87public:
88 Cable6Dof(const std::string& simObjectName, ISimObjectCreator* const creator);
89 ~Cable6Dof();
90 void OdeFcn(const double T, const double* const X, double* const XDot) const;
91 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
92
93 const double* forceA(const double T, const double* const X);
94 const double* forceB(const double T, const double* const X);
95
96 // const double* const energy(const double T, const double* const X);
97
98 void calculations(const double T, const double* const X);
99 void calculationsCommon(const double T, const double* const X) const;
100
101#ifdef FH_VISUALIZATION
102 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
103 void RenderUpdate(const double T, const double* const X);
104 Ogre::ColourValue tensionColor(double N);
105#endif
106
107protected:
108 typedef Eigen::Matrix<double, 3, 3> mat3;
109 typedef Eigen::Matrix<double, 3, 1> vec3;
110
111 // double m_energy[3];
112
113 int m_numElements;
114 double m_totalLength;
115 double m_radius;
116 double m_alpha;
117 double m_beta;
118 double m_epsilon;
119 double m_weight;
120 double m_rho;
121 double m_surfacePosZ;
122 double m_rhoWater;
123 double m_Ct; // tangential damping coefficient
124 double m_Cn; // normal damping coefficient
125
126 double m_L;
127 double m_M;
128 double m_Ixy;
129 double m_Iz;
130 mat3 m_baseM;
131
132 struct element
133 {
134 vec3 k;
135 vec3 LkXw;
136 mat3 Mi;
137 mat3 JMiJt;
138 int p;
139 int q;
140 int v;
141 int w;
142 };
143 element* m_el;
144
145 ISignalPort* m_posA;
146 ISignalPort* m_posB;
147 ISignalPort* m_velA;
148 ISignalPort* m_velB;
149
150 ICommonComputation* m_calcDynamics;
151 Eigen::Matrix<double, Eigen::Dynamic, 1> m_lambda;
152 Eigen::Matrix<double, Eigen::Dynamic, 1> m_F;
153 // double* m_lambda;
154
155 double m_forceA[3];
156 double m_forceB[3];
157
158#ifdef FH_VISUALIZATION
159 Ogre::ManualObject* m_ManualObject;
160 // Ogre::SceneManager* m_SceneMgr;
161 double m_scale;
162 Ogre::SceneNode* m_ManualObjectNode;
163 // C3DLine* m_line; ///< white linestrip visualization object
164#endif
165};
166} // namespace RbCable
Definition Cable6Dof.h:86
Cable6Dof(const std::string &simObjectName, ISimObjectCreator *const creator)
reads parameters, registers states, output and intput ports.
Definition Cable6Dof.h:133