FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
CableHydrodynamics.h
1#pragma once
2
13#include <cmath>
14
15namespace cable_hydrodynamics
16{
17
19constexpr double kLowReynolds = 14.0;
21constexpr double kCriticalReynolds = 1e6;
23constexpr double kSupercriticalNormalDrag = 0.3;
24
33inline double ReynoldsNumber(double speedSquared, double normalSpeed, double diameter, double viscosity)
34{
35 return speedSquared * diameter / (viscosity * normalSpeed);
36}
37
50inline double NormalDragCoefficient(double reynolds)
51{
52 if (reynolds < kLowReynolds)
53 return 1.3 + 8.85 / (std::pow(reynolds, 0.85) + 0.01646);
54 if (reynolds < 2515.0)
55 return 0.75 + 2.35 / (std::pow(reynolds, 0.38) - 1.67);
56 if (reynolds < kCriticalReynolds)
57 return 1.15 - 5.05 / (std::pow(reynolds, 0.5) - 31.6);
58 return kSupercriticalNormalDrag;
59}
60
67inline double TangentialDragCoefficient(double reynolds)
68{
69 return 0.015 + 0.7535 / (std::pow(reynolds, 0.9) + 0.1);
70}
71
74constexpr double kCylinderAddedMassCoefficient = 1.0;
75
85inline double InertiaForceFactor(double waterDensity, double volume, double wetFraction, double addedMassCoefficient)
86{
87 return (1.0 + addedMassCoefficient) * waterDensity * volume * wetFraction;
88}
89
100inline void MorisonInertiaForce(double factor, const double acceleration[3], const double axis[3], double force[3])
101{
102 const double axial = acceleration[0] * axis[0] + acceleration[1] * axis[1] + acceleration[2] * axis[2];
103 for (int k = 0; k < 3; k++)
104 force[k] = factor * (acceleration[k] - axial * axis[k]);
105}
106
107} // namespace cable_hydrodynamics