FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TrawlCable.h
1#pragma once
2
230#include "ITrawlCable.h"
231// #include "ICollidableObject.h"
232// #include "ConstraintCableInterface.h"
233
234
235#ifdef FH_VISUALIZATION
236# include "sfh/ogre/C3DLine.h"
237#endif
238
239class TrawlCable : public SimObject, public ITrawlCable
240{
241public:
247 TrawlCable(const std::string& simObjectName, ISimObjectCreator* const creator);
248
253
258 void OdeFcn(const double T, const double* const X, double* const XDot) const;
259
263 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
264
269 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
270
271
272#ifdef FH_VISUALIZATION
273 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
274 void RenderUpdate(const double T, const double* const X);
275#endif
276
277 void Compute(const double T, const double* const X);
278 void AddDependency(ICommonComputation* dependecy);
279 CoRiBoDynamics::ConstraintSolver* GetConstraintSolver();
283 double getRegulatorTimeConstant();
284
285protected:
286 void MainCalculations(const double T, const double* const X);
287 void MainCalculationsCommon(const double T, const double* const X) const;
288
289 struct element
290 {
291 int p;
292 int q;
293 int v;
294 int w;
295 int n;
296 };
297 void DistributeCatenary(CoRiBoDynamics::vec3 P1, CoRiBoDynamics::vec3 P2, std::vector<element> elements, double L, double* states, int i1, int i2, ISimObjectCreator* creator);
298
299 environment::EnvironmentProvider* m_environment;
300
301 enum Chirality
302 {
303 PORT,
304 STARBOARD
305 };
306 Chirality m_Chirality;
307
308 double m_TrawlDoorMass;
309 double m_TrawlDoorArea;
310 double m_TrawlDoorLx;
311 double m_TrawlDoorLy;
312 double m_TrawlDoorLz;
313 CoRiBoDynamics::vec3 m_TrawlDoorWarpConnection;
314 CoRiBoDynamics::vec3 m_TrawlDoorTopBridleConnection;
315 CoRiBoDynamics::vec3 m_TrawlDoorBottomBridleConnection;
316
317 double m_ClumpWeightMass;
318 double m_ClumpWeightLength;
319 double m_ClumpWeightRadius;
320
321 int m_NumTopWarp;
322 double m_TopWarpLength;
323 double m_TopWarpElementLength;
324
325 int m_NumWarp;
328
332
336
339
343
345 // double m_collisionStiffness; /// Gamma value of contact constraint.
346
347 CoRiBoDynamics::ConstraintSolver* m_ConstraintSolver;
351
352 std::set<ICommonComputation*> m_ExternalDependencies;
353
354 ICommonComputation* m_MainCalculations;
355 ITrawlCable* m_ExtTrawlCable;
356
357 std::vector<element> m_TopWarpElements;
358 std::vector<element> m_WarpElements;
359 std::vector<element> m_TopBridleElements;
360 std::vector<element> m_BottomBridleElements;
361 element m_TrawlDoorElement;
362 element m_TrawlDoorWeightElement;
363
364 element m_ClumpWeightElement;
365
366 const double* winchForce(const double T, const double* const X);
367 double m_winchForce[3];
368 int m_WinchPointConnectionIndex;
369
370 const double* TopBridleEndForce(const double T, const double* const X);
371 double m_TopBridleEndForce[3];
372 int m_TopBridleEndPointConnectionIndex;
373
374 const double* BottomBridleEndForce(const double T, const double* const X);
375 double m_BottomBridleEndForce[3];
376 int m_BottomBridleEndPointConnectionIndex;
377
378 const double* trawlDoorPosition(const double T, const double* const X);
379
380
381 ICommonComputation* m_ContactForceCalculations;
382 void ContactForceCalculations(const double T, const double* const X);
383 void ContactForceCalculationsCommon(const double T, const double* const X) const;
384 const double* normalForceTrawlDoor(const double T, const double* const X);
385 const double* normalForceClumpWeight(const double T, const double* const X);
386 const double* normalForceTopBridle(const double T, const double* const X);
387 const double* normalForceBottomBridle(const double T, const double* const X);
388 const double* normalForceWarp(const double T, const double* const X);
389 const double* contactPositionTopBridle(const double T, const double* const X);
390 const double* contactPositionBottomBridle(const double T, const double* const X);
391 const double* contactPositionWarp(const double T, const double* const X);
392 double m_normalForceTrawlDoor[1];
393 double m_normalForceClumpWeight[1];
394 double m_normalForceTopBridle[3];
395 double m_normalForceBottomBridle[3];
396 double m_normalForceWarp[3];
397
398 ISignalPort* m_WinchPosition;
399 ISignalPort* m_WinchVelocity;
400
401 ISignalPort* m_TopBridleEndPosition;
402 ISignalPort* m_TopBridleEndVelocity;
403
404 ISignalPort* m_BottomBridleEndPosition;
405 ISignalPort* m_BottomBridleEndVelocity;
406
407#ifdef FH_VISUALIZATION
408 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
409 bool m_HQ_Render;
410 Ogre::SceneNode** m_TopWarpNodes = nullptr;
411 Ogre::SceneNode** m_WarpNodes = nullptr;
412 Ogre::SceneNode** m_TopBridleNodes = nullptr;
413 Ogre::SceneNode** m_BottomBridleNodes = nullptr;
414 Ogre::SceneNode* m_TrawlDoorNode = nullptr;
415 Ogre::SceneNode* m_ClumpWeightNode = nullptr;
416 C3DLine* m_TopWarpLine = nullptr;
417 C3DLine* m_WarpLine = nullptr;
418 C3DLine* m_TopBridleLine = nullptr;
419 C3DLine* m_BottomBridleLine = nullptr;
420#endif
421};
Definition TrawlCableConstraintSets.h:119
Definition TrawlCableConstraintSets.h:71
Definition TrawlCableConstraintSets.h:11
Definition ITrawlCable.h:18
Definition TrawlCable.h:240
double m_CollisionFrequencyCoefficient
Frequency response coefficient.
Definition TrawlCable.h:338
double m_TopBridleLength
Warp cable length.
Definition TrawlCable.h:334
double m_WarpLength
Nominal cable diameter.
Definition TrawlCable.h:333
void InitialConditionSetup(const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
double m_frequencyCoefficient
Bridle cable length.
Definition TrawlCable.h:337
CoRiBoDynamics::TrawlCableJointConstraint * m_JointConstraint
collision constraints
Definition TrawlCable.h:349
double m_TopBridleDiameter
Nominal cable diameter.
Definition TrawlCable.h:330
double m_BottomBridleElementLength
Length of discrete cable elements.
Definition TrawlCable.h:342
CoRiBoDynamics::TrawlCableCollisionManager * m_CollisionManager
6dof rigid body constrained dynamic solver
Definition TrawlCable.h:348
CoRiBoDynamics::TrawlCableCollisionManager * GetCollisionManager()
6dof rigid body constrained dynamic solver
int m_NumTopBridle
The number of discrete cable elements in the warp.
Definition TrawlCable.h:326
double m_BottomBridleDiameter
Nominal cable diameter.
Definition TrawlCable.h:331
CoRiBoDynamics::EnvironmentForces * GetEnvironmentForces()
structural joint constraints
TrawlCable(const std::string &simObjectName, ISimObjectCreator *const creator)
double m_WarpElementLength
Frequency response coefficient.
Definition TrawlCable.h:340
CoRiBoDynamics::TrawlCableJointConstraint * GetJointConstraint()
collision constraints
double m_WarpDiameter
The number of discrete cable elements int the lower bridle.
Definition TrawlCable.h:329
double m_BottomBridleLength
Bridle cable length.
Definition TrawlCable.h:335
double m_collisionDampingFactor
Length of discrete cable elements.
Definition TrawlCable.h:344
int m_NumBottomBridle
The number of discrete cable elements in the top bridle.
Definition TrawlCable.h:327
CoRiBoDynamics::EnvironmentForces * m_environmentForces
structural joint constraints
Definition TrawlCable.h:350
double m_TopBridleElementLength
Length of discrete cable elements.
Definition TrawlCable.h:341
ICommonComputation * m_MainCalculations
list of all (unique) CommonComputation nodes that have registered external geometry in the cable coll...
Definition TrawlCable.h:354
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)
CoRiBoDynamics::ConstraintSolver * m_ConstraintSolver
Relative damping coefficient of contact constraint. 1 is critical damping.
Definition TrawlCable.h:347
Definition TrawlCable.h:290