FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
RundDorg.h
1#pragma once
183// #include "ITrawlCable.h"
184// #include "ICollidableObject.h"
185// #include "ConstraintCableInterface.h"
186#include "CableSegment.h"
187#include "TrawlRig.h"
188
189#include <fhsim/simobject/SimObject.h>
190#include <fhsim_coribo/eigen_matrix_defs.h>
191#include <memory>
192
193#ifdef FH_VISUALIZATION
194# include "sfh/ogre/C3DLine.h"
195#endif
196
197class RundDorg : public SimObject //, public ITrawlCable
198{
199public:
205 RundDorg(const std::string& simObjectName, ISimObjectCreator* const creator);
206
211
216 void OdeFcn(const double T, const double* const X, double* const XDot) const;
217
221 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
222
227 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
228
232 void PreOdeFcn(const double T, const double* const X) override;
233
234
235#ifdef FH_VISUALIZATION
236 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
237 void RenderUpdate(const double T, const double* const X);
238#endif
239
240protected:
241 void MainCalculations(const double T, const double* const X);
242 void MainCalculationsCommon(const double T, const double* const X) const;
243
244
245
246 enum Chirality
247 {
248 PORT,
249 STARBOARD
250 };
251 Chirality m_Chirality;
252
253 enum WeightType
254 {
255 FOIL,
256 CLUMP
257 };
258 WeightType m_WeightType;
259
260 double m_FoilMass;
261 double m_FoilArea;
262 double m_FoilLx;
263 double m_FoilLy;
264 double m_FoilLz;
265 CoRiBoDynamics::vec3 m_WeightMainConnection;
266 CoRiBoDynamics::vec3 m_WeightFishLine1Connection;
267 CoRiBoDynamics::vec3 m_WeightFishLine2Connection;
268
269 double m_ClumpWeightMass;
270 double m_ClumpWeightLength;
271 double m_ClumpWeightRadius;
272
273 int m_NumMain;
276
280
284
286
290
291 std::unique_ptr<trawl_mooring::TrawlRig> m_ownRig;
293
294 ICommonComputation* m_MainCalculations;
295
296 std::vector<trawl_mooring::ElementStates> m_MainElements;
297 std::vector<trawl_mooring::ElementStates> m_Line1Elements;
298 std::vector<trawl_mooring::ElementStates> m_Line2Elements;
299 trawl_mooring::ElementStates m_FoilElement;
300 trawl_mooring::ElementStates m_FoilWeightElement;
301 trawl_mooring::ElementStates m_ClumpWeightElement;
302
304 const double* ExternalJointForce(const double T, const double* const X, int connectionIndex, double* force);
305
306 const double* MainForce(const double T, const double* const X);
307 const double* MainForceVector(const double T, const double* const X);
308 double m_MainForce[3];
309 double m_MainForceMagnitude;
310 int m_MainForceConnectionIndex;
311
312 const double* Line1Force(const double T, const double* const X);
313 const double* Line1ForceVector(const double T, const double* const X);
314 double m_Line1Force[3];
315 double m_Line1ForceMagnitude;
316 int m_Line1ConnectionIndex;
317
318 const double* Line2Force(const double T, const double* const X);
319 const double* Line2ForceVector(const double T, const double* const X);
320 double m_Line2Force[3];
321 double m_Line2ForceMagnitude;
322 int m_Line2ConnectionIndex;
323
324 const double* WeightPosition(const double T, const double* const X);
325
326 /*const double* WeightMainForce( const double T, const double* const X );
327 double m_WeightMainForce[3];
328 const double* WeightLine1Force( const double T, const double* const X );
329 double m_WeightLine1Force[3];
330 const double* WeightLine2Force( const double T, const double* const X );
331 double m_WeightLine2Force[3];*/
332
333 ISignalPort* MainPosition;
334 ISignalPort* m_MainVelocity;
335
336 ISignalPort* m_Line1Position;
337 ISignalPort* m_Line1Velocity;
338
339 ISignalPort* m_Line2Position;
340 ISignalPort* m_Line2Velocity;
341
342#ifdef FH_VISUALIZATION
343 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
344 bool m_HQ_Render;
345 Ogre::SceneNode** m_MainNodes = nullptr;
346 Ogre::SceneNode** m_Line1Nodes = nullptr;
347 Ogre::SceneNode** m_Line2Nodes = nullptr;
348 Ogre::SceneNode* m_WeightNode = nullptr;
349 C3DLine* m_MainLine = nullptr;
350 C3DLine* m_Line1Line = nullptr;
351 C3DLine* m_Line2Line = nullptr;
352#endif
353};
Definition RundDorg.h:198
void FinalSetup(const double T, const double *const X, ISimObjectCreator *const creator)
int m_NumLine1
The number of discrete cable elements in the warp.
Definition RundDorg.h:274
double m_MainDiameter
The number of discrete cable elements int the lower bridle.
Definition RundDorg.h:277
const double * ExternalJointForce(const double T, const double *const X, int connectionIndex, double *force)
Store the force of an external ball joint in force and return it.
RundDorg(const std::string &simObjectName, ISimObjectCreator *const creator)
void OdeFcn(const double T, const double *const X, double *const XDot) const
std::unique_ptr< trawl_mooring::TrawlRig > m_ownRig
Length of discrete cable elements.
Definition RundDorg.h:291
void InitialConditionSetup(const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
double m_Line2ElementLength
Length of discrete cable elements.
Definition RundDorg.h:289
double m_Line1ElementLength
Length of discrete cable elements.
Definition RundDorg.h:288
void PreOdeFcn(const double T, const double *const X) override
double m_MainElementLength
Frequency response coefficient.
Definition RundDorg.h:287
double m_frequencyCoefficient
Bridle cable length.
Definition RundDorg.h:285
double m_Line1Diameter
Nominal cable diameter.
Definition RundDorg.h:278
int m_NumLine2
The number of discrete cable elements in the top bridle.
Definition RundDorg.h:275
double m_Line2Length
Bridle cable length.
Definition RundDorg.h:283
double m_Line2Diameter
Nominal cable diameter.
Definition RundDorg.h:279
double m_MainLength
Nominal cable diameter.
Definition RundDorg.h:281
const trawl_mooring::RigParts * m_rig
m_ownRig's parts.
Definition RundDorg.h:292
double m_Line1Length
Warp cable length.
Definition RundDorg.h:282
The state indices of one rigid element and its index in the solver.
Definition CableSegment.h:32
The parts of one constraint solver that every cable on it uses.
Definition TrawlRig.h:47