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