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