FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
AddedMassRigidElement.h
1#pragma once
2
26#include "CableSegmentWaterForce.h"
27
28#include <fhsim_coribo/RigidElement.h>
29#include <fhsim_environment/EnvironmentProvider.h>
30
31namespace CoRiBoDynamics
32{
33class AddedMassRigidElement : public StandardRigidElement
34{
35public:
46 AddedMassRigidElement(const vec6& dryInertia, int ix_P, int ix_Q, int ix_V, int ix_W,
47 const trawl_cable_water::Segment& segment, environment::EnvironmentProvider* const* environment)
48 : StandardRigidElement(dryInertia, ix_P, ix_Q, ix_V, ix_W)
49 , m_dryMass(dryInertia(0))
50 , m_segment(segment)
51 , m_environment(environment)
52 {
53 }
54
55 void Setup(double T, const double* const X) override
56 {
57 RigidElement::Setup(T, X); // the position and the axis, for the wet fraction
58 double addedMass = 0.0;
59 if (m_environment && *m_environment && !InSediment()) {
60 const vec3 axis = m_RotationMatrix.col(2);
61 addedMass = environment::wet_cylinder::AddedMass(trawl_cable_water::CylinderOf(m_segment), trawl_cable_water::WetFraction(**m_environment, T, m_P, axis, m_segment));
62 }
63 m_Inertia(0) = m_Inertia(1) = m_dryMass + addedMass;
64 StandardRigidElement::Setup(T, X);
65 }
66
67 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
68private:
71 bool InSediment() const
72 {
73 double seaDepth = 0.0;
74 (*m_environment)->GetSeaDepth(m_P.data(), seaDepth);
75 return m_P.z() >= seaDepth;
76 }
77
78 double m_dryMass;
80 environment::EnvironmentProvider* const* m_environment;
81};
82} // namespace CoRiBoDynamics
Definition AddedMassRigidElement.h:34
AddedMassRigidElement(const vec6 &dryInertia, int ix_P, int ix_Q, int ix_V, int ix_W, const trawl_cable_water::Segment &segment, environment::EnvironmentProvider *const *environment)
Definition AddedMassRigidElement.h:46
The properties of the elements of one cable segment.
Definition CableSegmentWaterForce.h:33