FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TrawlCable.h
1#pragma once
2
274#include "DoorAndClumpWakeBodies.h"
275#include "ITrawlCable.h"
276#include "CableSegment.h"
277#include "TrawlRig.h"
278
279#include <memory>
280// #include "ICollidableObject.h"
281// #include "ConstraintCableInterface.h"
282
283
284#ifdef FH_VISUALIZATION
285# include "sfh/ogre/C3DLine.h"
286#endif
287
288class TrawlCable : public SimObject, public ITrawlCable
289{
290public:
296 TrawlCable(const std::string& simObjectName, ISimObjectCreator* const creator);
297
302
307 void OdeFcn(const double T, const double* const X, double* const XDot) const;
308
312 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
313
318 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
319
326 void PreOdeFcn(const double T, const double* const X, IStateUpdater* const updater) override;
327
328
329#ifdef FH_VISUALIZATION
330 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
331 void RenderUpdate(const double T, const double* const X);
332#endif
333
334 void Compute(const double T, const double* const X) override;
335 void AddDependency(ICommonComputation* dependecy) override;
336 const trawl_mooring::RigParts& Rig() const override;
337
338protected:
339 void MainCalculations(const double T, const double* const X);
340 void MainCalculationsCommon(const double T, const double* const X) const;
341
342
343 enum Chirality
344 {
345 PORT,
346 STARBOARD
347 };
348 Chirality m_Chirality;
349
350 double m_TrawlDoorMass;
351 double m_TrawlDoorArea;
352 double m_TrawlDoorLx;
353 double m_TrawlDoorLy;
354 double m_TrawlDoorLz;
355 CoRiBoDynamics::vec3 m_TrawlDoorWarpConnection;
356 CoRiBoDynamics::vec3 m_TrawlDoorTopBridleConnection;
357 CoRiBoDynamics::vec3 m_TrawlDoorBottomBridleConnection;
358
359 double m_ClumpWeightMass;
360 double m_ClumpWeightLength;
361 double m_ClumpWeightRadius;
362
363 int m_NumTopWarp;
364 double m_TopWarpLength;
365 double m_TopWarpElementLength;
366
367 int m_NumWarp;
370
374
378
381
385
387 // double m_collisionStiffness; /// Gamma value of contact constraint.
388
389 std::unique_ptr<trawl_mooring::TrawlRig> m_ownRig;
391
392 std::set<ICommonComputation*> m_ExternalDependencies;
393
394 ICommonComputation* m_MainCalculations;
395 ITrawlCable* m_ExtTrawlCable;
396
397 std::vector<trawl_mooring::ElementStates> m_TopWarpElements;
398 std::vector<trawl_mooring::ElementStates> m_WarpElements;
399 std::vector<trawl_mooring::ElementStates> m_TopBridleElements;
400 std::vector<trawl_mooring::ElementStates> m_BottomBridleElements;
401 trawl_mooring::ElementStates m_TrawlDoorElement;
402 trawl_mooring::ElementStates m_TrawlDoorWeightElement;
403
404 trawl_mooring::ElementStates m_ClumpWeightElement;
405
406 const double* winchForce(const double T, const double* const X);
407 double m_winchForce[3];
408 int m_WinchPointConnectionIndex;
409
410 const double* TopBridleEndForce(const double T, const double* const X);
411 double m_TopBridleEndForce[3];
412 int m_TopBridleEndPointConnectionIndex;
413
414 const double* BottomBridleEndForce(const double T, const double* const X);
415 double m_BottomBridleEndForce[3];
416 int m_BottomBridleEndPointConnectionIndex;
417
418 const double* trawlDoorPosition(const double T, const double* const X);
419
420
421 ICommonComputation* m_ContactForceCalculations;
422 void ContactForceCalculations(const double T, const double* const X);
423 void ContactForceCalculationsCommon(const double T, const double* const X) const;
424 const double* normalForceTrawlDoor(const double T, const double* const X);
425 const double* normalForceClumpWeight(const double T, const double* const X);
426 const double* normalForceTopBridle(const double T, const double* const X);
427 const double* normalForceBottomBridle(const double T, const double* const X);
428 const double* normalForceWarp(const double T, const double* const X);
429 const double* contactPositionTopBridle(const double T, const double* const X);
430 const double* contactPositionBottomBridle(const double T, const double* const X);
431 const double* contactPositionWarp(const double T, const double* const X);
432 double m_normalForceTrawlDoor[1];
433 double m_normalForceClumpWeight[1];
434 double m_normalForceTopBridle[3];
435 double m_normalForceBottomBridle[3];
436 double m_normalForceWarp[3];
437
438 ISignalPort* m_WinchPosition;
439 ISignalPort* m_WinchVelocity;
440
441 ISignalPort* m_TopBridleEndPosition;
442 ISignalPort* m_TopBridleEndVelocity;
443
444 ISignalPort* m_BottomBridleEndPosition;
445 ISignalPort* m_BottomBridleEndVelocity;
446
447#ifdef FH_VISUALIZATION
448 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
449 bool m_HQ_Render;
450 Ogre::SceneNode** m_TopWarpNodes = nullptr;
451 Ogre::SceneNode** m_WarpNodes = nullptr;
452 Ogre::SceneNode** m_TopBridleNodes = nullptr;
453 Ogre::SceneNode** m_BottomBridleNodes = nullptr;
454 Ogre::SceneNode* m_TrawlDoorNode = nullptr;
455 Ogre::SceneNode* m_ClumpWeightNode = nullptr;
456 C3DLine* m_TopWarpLine = nullptr;
457 C3DLine* m_WarpLine = nullptr;
458 C3DLine* m_TopBridleLine = nullptr;
459 C3DLine* m_BottomBridleLine = nullptr;
460#endif
461};
What a TrawlCable that owns a rig offers the cables that join it (a TrawlCable with TrawlCable,...
Definition ITrawlCable.h:18
Definition TrawlCable.h:289
const trawl_mooring::RigParts * m_rig
The rig this cable's elements are on: its own, or that of the TrawlCable it joins (set in FinalSetup)...
Definition TrawlCable.h:390
double m_CollisionFrequencyCoefficient
Frequency response coefficient.
Definition TrawlCable.h:380
double m_TopBridleLength
Warp cable length.
Definition TrawlCable.h:376
double m_WarpLength
Nominal cable diameter.
Definition TrawlCable.h:375
void InitialConditionSetup(const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
double m_frequencyCoefficient
Bridle cable length.
Definition TrawlCable.h:379
double m_TopBridleDiameter
Nominal cable diameter.
Definition TrawlCable.h:372
double m_BottomBridleElementLength
Length of discrete cable elements.
Definition TrawlCable.h:384
int m_NumTopBridle
The number of discrete cable elements in the warp.
Definition TrawlCable.h:368
double m_BottomBridleDiameter
Nominal cable diameter.
Definition TrawlCable.h:373
TrawlCable(const std::string &simObjectName, ISimObjectCreator *const creator)
double m_WarpElementLength
Frequency response coefficient.
Definition TrawlCable.h:382
void Compute(const double T, const double *const X) override
Runs the owner's main calculation (the solver's dynamics) at T, X.
void PreOdeFcn(const double T, const double *const X, IStateUpdater *const updater) override
double m_WarpDiameter
The number of discrete cable elements int the lower bridle.
Definition TrawlCable.h:371
double m_BottomBridleLength
Bridle cable length.
Definition TrawlCable.h:377
double m_collisionDampingFactor
Length of discrete cable elements.
Definition TrawlCable.h:386
int m_NumBottomBridle
The number of discrete cable elements in the top bridle.
Definition TrawlCable.h:369
double m_TopBridleElementLength
Length of discrete cable elements.
Definition TrawlCable.h:383
void AddDependency(ICommonComputation *dependecy) override
Adds a joining cable's common computation, which the owner's main calculation runs first.
ICommonComputation * m_MainCalculations
list of all (unique) CommonComputation nodes that have registered external geometry in the cable coll...
Definition TrawlCable.h:394
std::unique_ptr< trawl_mooring::TrawlRig > m_ownRig
Relative damping coefficient of contact constraint. 1 is critical damping.
Definition TrawlCable.h:389
void OdeFcn(const double T, const double *const X, double *const XDot) const
void FinalSetup(const double T, const double *const X, ISimObjectCreator *const creator)
const trawl_mooring::RigParts & Rig() const override
The rig's solver and its shared parts.
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