FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
MooringCable.h
1#pragma once
159#include <string>
160#include <vector>
161
162#include "CableSegment.h"
163#include "ITrawlCable.h"
164
165#include <fhsim/simobject/SimObject.h>
166
167
168#ifdef FH_VISUALIZATION
169# include "sfh/ogre/C3DLine.h"
170#endif
171
172
173class MooringCable : public SimObject
174{
175public:
176 MooringCable(const std::string& simObjectName, ISimObjectCreator* const creator);
178 void OdeFcn(const double T, const double* const X, double* const XDot) const;
179 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
180 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
181
182 const double* posBuoy(const double T, const double* const X);
183
184#ifdef FH_VISUALIZATION
185 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
186 void RenderUpdate(const double T, const double* const X);
187#endif
188
191 {
192 double tensileArea;
193 double youngsModulus;
194 };
195
196protected:
197 std::vector<trawl_mooring::ElementStates> m_CableElements;
198
205 void ValidateSegmentElementCounts(double topChainLength, double bottomChainLength, ISimObjectCreator* creator) const;
206 void DistributeCatenary(CoRiBoDynamics::vec3 P1, CoRiBoDynamics::vec3 P2, /*std::vector<trawl_mooring::ElementStates> elements, double L,*/ double* states, /*int i1, int i2,*/ ISimObjectCreator* creator);
207
208
209 ICommonComputation* m_MainCalculations;
210 void MainCalculations(const double T, const double* const X);
211 void MainCalculationsCommon(const double T, const double* const X) const;
212
213 const double* ForceA(const double T, const double* const X);
214 const double* ForceB(const double T, const double* const X);
215 double m_ForceA[3];
216 double m_ForceB[3];
217 int m_indexA;
218 int m_indexB;
219
220 int m_bouyElement;
221 double m_bouyElementDistance;
222
224
225 ISignalPort* m_PosA;
226 ISignalPort* m_PosB;
227 ISignalPort* m_VelA;
228 ISignalPort* m_VelB;
229
230 double m_TotalLength;
231 double m_ElementLength;
232
233 int m_Num;
234 int m_TopChainNum;
235 int m_MidRopeNum;
236 int m_BottomChainNum;
237
238 double m_frequencyCoefficient;
239 double m_TopChainDiameter;
240 double m_MidRopeDiameter;
241 double m_BottomChainDiameter;
242 AxialProperties m_TopChainAxial;
243 AxialProperties m_MidRopeAxial;
244 AxialProperties m_BottomChainAxial;
245
246
247 ITrawlCable* m_TrawlCable;
249
250#ifdef FH_VISUALIZATION
251 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
252 bool m_HQ_Render;
253 Ogre::SceneNode** m_CableNodes = nullptr;
254 Ogre::SceneNode* m_SafetyZoneNode = nullptr;
255 C3DLine* m_CableLine = nullptr;
256 C3DLine* m_TopCableLine = nullptr;
257 C3DLine* m_BottomCableLine = nullptr;
258#endif
259};
What a TrawlCable that owns a rig offers the cables that join it (a TrawlCable with TrawlCable,...
Definition ITrawlCable.h:18
Definition MooringCable.h:174
void ValidateSegmentElementCounts(double topChainLength, double bottomChainLength, ISimObjectCreator *creator) const
Definition TrawlCableConstraintSets.h:74
Definition TrawlCableConstraintSets.h:16
The load-bearing area [m²] and E-modulus [Pa] of one section, read once in the constructor.
Definition MooringCable.h:191