15namespace cable_hydrodynamics
19constexpr double kLowReynolds = 14.0;
21constexpr double kCriticalReynolds = 1e6;
23constexpr double kSupercriticalNormalDrag = 0.3;
33inline double ReynoldsNumber(
double speedSquared,
double normalSpeed,
double diameter,
double viscosity)
35 return speedSquared * diameter / (viscosity * normalSpeed);
50inline double NormalDragCoefficient(
double reynolds)
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;
67inline double TangentialDragCoefficient(
double reynolds)
69 return 0.015 + 0.7535 / (std::pow(reynolds, 0.9) + 0.1);
74constexpr double kCylinderAddedMassCoefficient = 1.0;
85inline double InertiaForceFactor(
double waterDensity,
double volume,
double wetFraction,
double addedMassCoefficient)
87 return (1.0 + addedMassCoefficient) * waterDensity * volume * wetFraction;
100inline void MorisonInertiaForce(
double factor,
const double acceleration[3],
const double axis[3],
double force[3])
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]);