FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
SeafloorForces.h
1#pragma once
2#include "SeafloorForcesInterface.h"
3
4#include <marenv/seafloor/BathymetryField.h>
5#include <memory>
6namespace environment
7{
8
15class SeafloorForces : public SeafloorForcesInterface
16{
17public:
22 explicit SeafloorForces(std::shared_ptr<marenv::seafloor::BathymetryField> bathymetrybroker);
27 void SetDampingHor(double dDampingHor);
32 void SetDampingVert(double dDampingVert);
37 void SetHardness(double dHardness);
42 void SetDensity(double dDensity);
47 void SetCableDampingTangential(double dCableDampingTangential);
52 void SetCableDampingNormal(double dCableDampingNormal);
58 void SetContactDampingRatio(double ratio);
60 double GetContactDampingRatio() const;
62 double GetDampingHor();
66 double GetHardness();
68 double GetDensity();
74 double GetSubmergence(const double pos[3]) override;
76 double GetSubmergence(const double pos[2], const double objectDepth) override;
78 void CalcBottomForceSphere(double diameter, const double pos[3], const double vel[3], double forceOut[3]) override;
80 void CalcBottomForceBeam(double tangent[3], double beamWidth, double beamLength, double beamHeight, const double endAPos_ned[3], const double endBPos_ned[3], const double endAVel_ned[3], const double endBVel_ned[3], double forceOutA[3], double forceOutB[3]) override;
82 void CalcBottomForceBeam(double beamWidth, double beamHeight, const double endAPos_ned[3], const double endBPos_ned[3], const double endAVel_ned[3], const double endBVel_ned[3], double forceOutA[3], double forceOutB[3]) override;
84 void AddBottomForceCylinder(const double diameter, const double endAPos_ned[3], const double endBPos_ned[3], const double endAVel_ned[3], const double endBVel_ned[3], double forceOutA[3], double forceOutB[3]) override;
86 void CoulombNonDirectionalForce(const double pos[3], const double vel[3], double frictionCoeff, double verticalStiffness, double speedFullCoulomb, double touchDistance, double forceOut[3]) override;
87
88private:
102 void CalcBottomForceBeam(double tangent[3], double beamWidth, double beamLength, double beamHeight, double submergenceA, double submergenceB, const double endAVel_ned[3], const double endBVel_ned[3], double forceOutsA[3], double forceOutsB[3]);
103
114 void AddBottomForceCylinderNode(const double submergence, const double diameter, const double dL, const double tangent[3], const double endPos_ned[3], const double endVel_ned[3], double forceOut[3]);
115
123 void CalcBottomForceSphere(double diameter, double submergence, const double vel[3], double forceOut[3]);
124
125 double m_dSeaFloorDampingHor;
126 double m_dSeaFloorDampingVert;
127 double m_dSeaFloorHardness;
128 double m_dSeaFloorDensity;
129 double m_dCableDampingTangential;
130 double m_dCableDampingNormal;
131 double m_contactDampingRatio;
132
133 std::shared_ptr<marenv::seafloor::BathymetryField> m_bathymetry;
134};
135
136} // namespace environment
Definition SeafloorForces.h:16
void SetDensity(double dDensity)
void CalcBottomForceSphere(double diameter, const double pos[3], const double vel[3], double forceOut[3]) override
void AddBottomForceCylinder(const double diameter, const double endAPos_ned[3], const double endBPos_ned[3], const double endAVel_ned[3], const double endBVel_ned[3], double forceOutA[3], double forceOutB[3]) override
double GetCableDampingTangential()
Get cable tangential damping.
void SetDampingHor(double dDampingHor)
double GetHardness()
Get seafloor hardness.
double GetSubmergence(const double pos[2], const double objectDepth) override
void CalcBottomForceBeam(double tangent[3], double beamWidth, double beamLength, double beamHeight, const double endAPos_ned[3], const double endBPos_ned[3], const double endAVel_ned[3], const double endBVel_ned[3], double forceOutA[3], double forceOutB[3]) override
double GetSubmergence(const double pos[3]) override
void CalcBottomForceBeam(double beamWidth, double beamHeight, const double endAPos_ned[3], const double endBPos_ned[3], const double endAVel_ned[3], const double endBVel_ned[3], double forceOutA[3], double forceOutB[3]) override
SeafloorForces(std::shared_ptr< marenv::seafloor::BathymetryField > bathymetrybroker)
void CoulombNonDirectionalForce(const double pos[3], const double vel[3], double frictionCoeff, double verticalStiffness, double speedFullCoulomb, double touchDistance, double forceOut[3]) override
void SetCableDampingTangential(double dCableDampingTangential)
void SetContactDampingRatio(double ratio)
void SetDampingVert(double dDampingVert)
double GetContactDampingRatio() const
Get the damping ratio of the linear contact damping [-].
double GetDampingVert()
Get vertical damping coefficient.
double GetCableDampingNormal()
Get cable normal damping.
void SetHardness(double dHardness)
double GetDampingHor()
Get horizontal damping coefficient.
void SetCableDampingNormal(double dCableDampingNormal)
double GetDensity()
Get seafloor density.