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