10#ifndef CCableElBasics_H
11#define CCableElBasics_H
14#include <fhsim_environment/hydrodynamics/CylinderHydro.h>
15#include <fhsim_environment/hydrodynamics/WetCylinderLaw.h>
18#include <fhsim/Exceptions.h>
21#ifdef FH_VISUALIZATION
25# pragma warning(disable : 4251)
28# include "sfh/ogre/CDynamicLines.h"
33#include "cable/subroutines/CableAxialLaw.h"
48 const double adPosA[3],
49 const double adVelA[3],
50 const double adPosB[3],
51 const double adVelB[3],
52 const double adFluidVel[3],
53 const double rhoWater,
73#ifdef FH_VISUALIZATION
75 virtual void RenderInit(Ogre::Root* ogreRoot);
78 virtual void RenderUpdate(
const double adPosA[3],
const double adPosB[3]);
117 for (
int k = 0; k < 3; k++)
153 const double posA[3],
const double posB[3],
154 const double velA[3],
const double velB[3],
155 const double vFluid[3],
double rhoWater,
156 double dFA_dvA[9],
double dFA_dvB[9],
157 double dFB_dvA[9],
double dFB_dvB[9])
const;
171 const double posA[3],
const double posB[3],
172 const double velA[3],
const double velB[3],
173 const double vFluid[3],
double rhoWater,
174 double dFA_dpA[9],
double dFA_dpB[9],
175 double dFB_dpA[9],
double dFB_dpB[9])
const;
197#ifdef FH_VISUALIZATION
198 std::string m_materialName;
199 unsigned short m_cableFaces;
219 double WetFractionAt(
const double posA[3],
const double posB[3],
double submergence[2],
double& axisVertical)
const;
227 const double adVelA[3],
228 const double adPosB[3],
229 const double adVelB[3],
230 const double adFluidVel[3],
231 const double rhoWater);
238 void AddGravityBuoyancy(
double adForceA[3],
double adForceB[3],
const double adPosA[3],
const double adPosB[3]);
264#ifdef FH_VISUALIZATION
265 Ogre::Root* m_ogreRoot;
266 Ogre::SceneManager* m_sceneMgr;
267 Ogre::Entity* m_renderElement;
268 Ogre::SceneNode* m_renderNode;
269 CDynamicLines* m_lines;
270 Ogre::ManualObject* m_cableRenderObj;
273 Ogre::Entity* m_renderSphere;
274 Ogre::SceneNode* m_renderNodeSphere;
Class containing a fundamental cable element object.
Definition CableElBasics.h:38
virtual double SurfaceHalfSize() const
The half-size the surface gate needs: the element's radius; larger with floats (NetCableElement).
Definition CableElBasics.h:109
double ma_dDampingCoeff
A intermediate damping calculation to increase the computational efficiency.
Definition CableElBasics.h:246
double m_waveAcceleration[3]
The water particle acceleration at the element (SetWaveAcceleration) [m/s²].
Definition CableElBasics.h:210
void AddHydroForcesCable(double adForceA[3], double adForceB[3])
Calculates the hydrodynamic forces on the cable and the spheres and disks attached to it....
double ma_dVnAmp_A
The scalar hydrodynamic normal velocity of the end A (saturated with the vector).
Definition CableElBasics.h:255
double m_submergence[2]
z + η at the ends at the last CalcFoundation [m]; deep before the first.
Definition CableElBasics.h:207
~CableElBasics()
The destructor.
void SetSurfaceElevation(double etaA, double etaB)
Definition CableElBasics.h:102
double m_rhoWaterFull
The water density the owner passed, unblended [kg/m³]; also that of the stiffness factor (CableElDynS...
Definition CableElBasics.h:92
double InertiaShare() const
The inertia force factor of one end node: half of (1 + Ca) rho V f (environment::cylinder_hydro::Iner...
CableElBasics()
The constructor.
double ma_adVt_B[3]
The hydrodynamic axial velocity of the end B.
Definition CableElBasics.h:258
double ma_dCompressionSpeed
The speed at which the distance between the two ends decreases.
Definition CableElBasics.h:262
double ma_adVt_A[3]
The hydrodynamic axial velocity of the end A: its own velocity against the water, the part along the ...
Definition CableElBasics.h:257
double m_rhoWater
The density of the surrounding fluid: the water density blended with the air density by the submerged...
Definition CableElBasics.h:91
double ma_dVtAmp_A
The speed of the hydrodynamic axial velocity of the end A (unsigned, saturated with the vector).
Definition CableElBasics.h:259
double ma_dVelAmp
The scalar average hydrodynamic velocity of the element.
Definition CableElBasics.h:248
double m_surfaceElevation[2]
η above the ends [m] (SetSurfaceElevation).
Definition CableElBasics.h:206
double ma_dVnAmp
The scalar average normal hydrodynamic velocity of the element.
Definition CableElBasics.h:252
double m_dE
The Young modulus of the element.
Definition CableElBasics.h:86
double WetFractionAt(const double posA[3], const double posB[3], double submergence[2], double &axisVertical) const
double m_wetFraction
The element's wet fraction at the last CalcFoundation (CylinderWetFraction).
Definition CableElBasics.h:209
void DragPositionJacobian(const double posA[3], const double posB[3], const double velA[3], const double velB[3], const double vFluid[3], double rhoWater, double dFA_dpA[9], double dFA_dpB[9], double dFB_dpA[9], double dFB_dpB[9]) const
double m_rhoAir
The air density, kg/m³; the owner sets the environment's (cable_air::EnvironmentAirDensity,...
Definition CableElBasics.h:93
double m_normalDragCoeff
The normal drag coefficient of the cable element.
Definition CableElBasics.h:90
double ma_dVtAmp_B
The speed of the hydrodynamic axial velocity of the end B.
Definition CableElBasics.h:260
double ma_adDirection[3]
Memory allocation to increase the computational efficiency.
Definition CableElBasics.h:245
double BlendedFluidDensity(const double posA[3], const double posB[3]) const
double m_massInWaterPerMeter[2]
The mass in water distributed to each node, per meter cable.
Definition CableElBasics.h:196
double ma_adVel[3]
The average hydrodynamic velocity of the element.
Definition CableElBasics.h:247
double m_dD
The diameter of the element.
Definition CableElBasics.h:85
double ma_adVt[3]
The average tangential hydrodynamic velocity of the element.
Definition CableElBasics.h:249
double m_weightInWaterPerMeter[2]
The weight in water distributed to each node, per meter cable.
Definition CableElBasics.h:195
void AddWaveExcitationCable(double adForceA[3], double adForceB[3]) const
Adds the rope's Froude-Krylov and added-mass wave excitation (owner rulings R67, R104)....
void SetWaveAcceleration(const double acceleration[3])
Definition CableElBasics.h:115
virtual void UpdateLength(double newLength)
Upates the length of the cable element, and its dependant properties.
double ma_dVnAmp_B
The scalar hydrodynamic normal velocity of the end B.
Definition CableElBasics.h:256
double m_minLength
The minimum length of the element.
Definition CableElBasics.h:186
virtual bool CheckAndInitialize()
Does the initialization and checking to make sure that the element is ready for simulation.
virtual bool AppendagesNearTheSurface()
True when a float on the element is near the surface, so its weight must be recomputed every call; no...
Definition CableElBasics.h:204
void CalcFoundation(const double adPosA[3], const double adVelA[3], const double adPosB[3], const double adVelB[3], const double adFluidVel[3], const double rhoWater)
double m_addedWeightInWater
The weight in water added to the element.
Definition CableElBasics.h:88
double m_weightInWater[2]
The weight in water distributed to each node.
Definition CableElBasics.h:193
double m_eA
The linear stiffness of the element.
Definition CableElBasics.h:191
double ma_adVn_B[3]
The hydrodynamic normal velocity of the end B.
Definition CableElBasics.h:254
double ma_dLength
The actual distance between the ends.
Definition CableElBasics.h:261
double m_maxTension
The maximum tension in the element.
Definition CableElBasics.h:187
virtual void AddStructuralForces(double adForceA[3], double adForceB[3])=0
double m_dL0
The relaxed length of the element.
Definition CableElBasics.h:84
double m_axisVertical
The vertical component of the unit axis A→B at the last CalcFoundation.
Definition CableElBasics.h:208
double m_dA
The cross sectional area of the cable.
Definition CableElBasics.h:192
virtual void AddEndForces(const double adPosA[3], const double adVelA[3], const double adPosB[3], const double adVelB[3], const double adFluidVel[3], const double rhoWater, double adForceA[3], double adForceB[3])
Calculates the end forces on the cable element.
double ma_adVn_A[3]
The hydrodynamic normal velocity of the end A: its own velocity against the water,...
Definition CableElBasics.h:253
double ma_dVtAmp
The scalar average tangential hydrodynamic velocity of the element.
Definition CableElBasics.h:250
double m_massInWater[2]
The mass in water distributed to each node.
Definition CableElBasics.h:194
double ma_adVn[3]
The average normal hydrodynamic velocity of the element.
Definition CableElBasics.h:251
unsigned long m_iD
The ID of the element.
Definition CableElBasics.h:82
virtual void CalcMassAndWeight()
Calculates the mass and weight of the element in water.
void AddGravityBuoyancy(double adForceA[3], double adForceB[3], const double adPosA[3], const double adPosB[3])
Adds the forces from gravity and buoyancy to the nodes. CalcFoundation must be run first.
void WaveExcitationPositionJacobian(const double posA[3], const double posB[3], const double acceleration[3], double dF_dpB[9]) const
void DragVelocityJacobian(const double posA[3], const double posB[3], const double velA[3], const double velB[3], const double vFluid[3], double rhoWater, double dFA_dvA[9], double dFA_dvB[9], double dFB_dvA[9], double dFB_dvB[9]) const
virtual void SetConstants()
Calculates parameters and sets physical constants.
double m_tangentialFrictionCoeff
The tangential drag coefficient of the cable element.
Definition CableElBasics.h:89
double GetDampingCoeff() const
Returns the structural damping coefficient (negative value: -2*dampRatio*area*sqrt(E*rho)).
Definition CableElBasics.h:67
double m_rho
The density of the element material.
Definition CableElBasics.h:87
std::string m_cableName
The name of the parent cable.
Definition CableElBasics.h:83
double m_dampingRatio
The relative damping ratio of the cable.
Definition CableElBasics.h:188