FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Cable6Dof.h
1#pragma once
2
97#include <Eigen/Eigen>
98
99#include <fhsim/simobject/SimObject.h>
100#include <fhsim_environment/EnvironmentProvider.h>
101#include <fhsim_environment/WakeReceiver.h>
102
103#ifdef FH_VISUALIZATION
104# include "sfh/ogre/C3DLine.h"
105#endif
106
107namespace RbCable
108{
109class Cable6Dof : public SimObject
110{
111public:
112 Cable6Dof(const std::string& simObjectName, ISimObjectCreator* const creator);
113 ~Cable6Dof();
114 void OdeFcn(const double T, const double* const X, double* const XDot) const;
115 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
116 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator) override;
117 void PreOdeFcn(const double T, const double* const X, IStateUpdater* const updater) override;
118
119 const double* forceA(const double T, const double* const X);
120 const double* forceB(const double T, const double* const X);
121
122 // const double* const energy(const double T, const double* const X);
123
124 void calculations(const double T, const double* const X);
125 void calculationsCommon(const double T, const double* const X) const;
126
127#ifdef FH_VISUALIZATION
128 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
129 void RenderUpdate(const double T, const double* const X);
130 Ogre::ColourValue tensionColor(double N);
131#endif
132
133protected:
134 typedef Eigen::Matrix<double, 3, 3> mat3;
135 typedef Eigen::Matrix<double, 3, 1> vec3;
136
137 // double m_energy[3];
138
139 int m_numElements;
140 double m_totalLength;
141 double m_radius;
142 double m_alpha;
143 double m_beta;
144 double m_epsilon;
145 double m_weight;
146 double m_rho;
147 double m_rhoWater;
148 environment::EnvironmentProvider* m_environment = nullptr;
149 environment::wake::WakeReceiver m_wakes;
150 std::vector<double> m_elementCentres;
151 double m_Ct; // tangential damping coefficient
152 double m_Cn; // normal damping coefficient
153
154 double m_L;
155 double m_M;
156 double m_Ixy;
157 double m_Iz;
158 mat3 m_baseM;
159
160 struct element
161 {
162 vec3 k;
163 vec3 LkXw;
164 mat3 Mi;
165 mat3 JMiJt;
166 int p;
167 int q;
168 int v;
169 int w;
170 };
171 element* m_el;
172
173 ISignalPort* m_posA;
174 ISignalPort* m_posB;
175 ISignalPort* m_velA;
176 ISignalPort* m_velB;
177
178 ICommonComputation* m_calcDynamics;
179 Eigen::Matrix<double, Eigen::Dynamic, 1> m_lambda;
180 Eigen::Matrix<double, Eigen::Dynamic, 1> m_F;
181 // double* m_lambda;
182
183 double m_forceA[3];
184 double m_forceB[3];
185
186#ifdef FH_VISUALIZATION
187 Ogre::ManualObject* m_ManualObject;
188 // Ogre::SceneManager* m_SceneMgr;
189 double m_scale;
190 Ogre::SceneNode* m_ManualObjectNode;
191 // C3DLine* m_line; ///< white linestrip visualization object
192#endif
193};
194} // namespace RbCable
Definition Cable6Dof.h:110
void FinalSetup(const double T, const double *const X, ISimObjectCreator *const creator) override
Takes the Environment (MARE-0315).
void PreOdeFcn(const double T, const double *const X, IStateUpdater *const updater) override
Takes the other objects' wakes at the element centres for the step (MARE-0223).
std::vector< double > m_elementCentres
The element centres of the last take, 3 per element.
Definition Cable6Dof.h:150
environment::EnvironmentProvider * m_environment
The shared resource Environment, set in FinalSetup.
Definition Cable6Dof.h:148
environment::wake::WakeReceiver m_wakes
The other objects' wakes at the element centres, per step (MARE-0223).
Definition Cable6Dof.h:149
Cable6Dof(const std::string &simObjectName, ISimObjectCreator *const creator)
reads parameters, registers states, output and intput ports.
Definition Cable6Dof.h:161