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