FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
MooringCable.h
1#pragma once
145#include "ITrawlCable.h"
146
147#include <fhsim/simobject/SimObject.h>
148
149
150#ifdef FH_VISUALIZATION
151# include "sfh/ogre/C3DLine.h"
152#endif
153
154
155class MooringCable : public SimObject
156{
157public:
158 MooringCable(const std::string& simObjectName, ISimObjectCreator* const creator);
160 void OdeFcn(const double T, const double* const X, double* const XDot) const;
161 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
162 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
163
164 const double* posBuoy(const double T, const double* const X);
165
166#ifdef FH_VISUALIZATION
167 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
168 void RenderUpdate(const double T, const double* const X);
169#endif
170
171protected:
172 struct element
173 {
174 int p;
175 int q;
176 int v;
177 int w;
178 int n;
179 };
180 std::vector<element> m_CableElements;
181
188 void ValidateSegmentElementCounts(double topChainLength, double bottomChainLength, ISimObjectCreator* creator) const;
189 void DistributeCatenary(CoRiBoDynamics::vec3 P1, CoRiBoDynamics::vec3 P2, /*std::vector<element> elements, double L,*/ double* states, /*int i1, int i2,*/ ISimObjectCreator* creator);
190
191
192 ICommonComputation* m_MainCalculations;
193 void MainCalculations(const double T, const double* const X);
194 void MainCalculationsCommon(const double T, const double* const X) const;
195
196 const double* ForceA(const double T, const double* const X);
197 const double* ForceB(const double T, const double* const X);
198 double m_ForceA[3];
199 double m_ForceB[3];
200 int m_indexA;
201 int m_indexB;
202
203 int m_bouyElement;
204 double m_bouyElementDistance;
205
207
208 ISignalPort* m_PosA;
209 ISignalPort* m_PosB;
210 ISignalPort* m_VelA;
211 ISignalPort* m_VelB;
212
213 double m_TotalLength;
214 double m_ElementLength;
215
216 int m_Num;
217 int m_TopChainNum;
218 int m_MidRopeNum;
219 int m_BottomChainNum;
220
221 double m_frequencyCoefficient;
222 double m_TopChainDiameter;
223 double m_MidRopeDiameter;
224 double m_BottomChainDiameter;
225
226
227 ITrawlCable* m_TrawlCable;
229
230#ifdef FH_VISUALIZATION
231 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
232 bool m_HQ_Render;
233 Ogre::SceneNode** m_CableNodes = nullptr;
234 Ogre::SceneNode* m_SafetyZoneNode = nullptr;
235 C3DLine* m_CableLine = nullptr;
236 C3DLine* m_TopCableLine = nullptr;
237 C3DLine* m_BottomCableLine = nullptr;
238#endif
239};
Definition TrawlCableConstraintSets.h:71
Definition TrawlCableConstraintSets.h:11
Definition ITrawlCable.h:18
Definition MooringCable.h:156
void ValidateSegmentElementCounts(double topChainLength, double bottomChainLength, ISimObjectCreator *creator) const
Definition MooringCable.h:173