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);
54 double GetDampingHor();
58 double GetHardness();
60 double GetDensity();
66 double GetSubmergence(const double pos[3]) override;
68 double GetSubmergence(const double pos[2], const double objectDepth) override;
70 void CalcBottomForceSphere(double diameter, const double pos[3], const double vel[3], double forceOut[3]) override;
72 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;
74 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;
76 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;
78 void CoulombNonDirectionalForce(const double pos[3], const double vel[3], double frictionCoeff, double verticalStiffness, double speedFullCoulomb, double touchDistance, double forceOut[3]) override;
79
80private:
94 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]);
95
106 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]);
107
115 void CalcBottomForceSphere(double diameter, double submergence, const double vel[3], double forceOut[3]);
116
117 double m_dSeaFloorDampingHor;
118 double m_dSeaFloorDampingVert;
119 double m_dSeaFloorHardness;
120 double m_dSeaFloorDensity;
121 double m_dCableDampingTangential;
122 double m_dCableDampingNormal;
123
124 std::shared_ptr<marenv::seafloor::BathymetryField> m_bathymetry;
125};
126
127} // 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 SetDampingVert(double dDampingVert)
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.