FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetSolidity.h
1#pragma once
2
46#include <cmath>
47#include <string>
48
49namespace net_solidity
50{
51
53enum class SolidityModel
54{
55 Fixed,
56 MeshOpening
57};
58
60const SolidityModel kDefaultSolidityModel = SolidityModel::MeshOpening;
61
63const double kDefaultKnotFactor = 1.0;
64
71inline bool ParseSolidityModel(const std::string& name, SolidityModel& model)
72{
73 if (name == "Fixed") {
74 model = SolidityModel::Fixed;
75 return true;
76 }
77 if (name == "MeshOpening") {
78 model = SolidityModel::MeshOpening;
79 return true;
80 }
81 return false;
82}
83
93template<class T>
94T MeshOpeningSolidity(double knotFactor, double twineThickness, double barLength, const T& meshOpeningAngle)
95{
96 using std::cos;
97 using std::sin;
98
99 return knotFactor * twineThickness / (barLength * sin(meshOpeningAngle) * cos(meshOpeningAngle));
100}
101
104{
105 SolidityModel model = kDefaultSolidityModel;
106 double fixed = 0;
107 double knotFactor = kDefaultKnotFactor;
108};
109
118template<class T>
119T Solidity(const PanelSolidity& rule, double twineThickness, double barLength, const T& meshOpeningAngle)
120{
121 if (rule.model == SolidityModel::Fixed) {
122 return T(rule.fixed);
123 }
124 return MeshOpeningSolidity(rule.knotFactor, twineThickness, barLength, meshOpeningAngle);
125}
126
143inline double CylinderSolidity(double twineThickness, double barLength, double meshOpeningAngle)
144{
145 const double coverage = twineThickness / (barLength * std::abs(std::sin(2 * meshOpeningAngle)));
146 if (!(coverage < 1.0)) // Also a NaN and a closed mesh (sin 2φ = 0).
147 return 1.0;
148 return coverage * (2.0 - coverage);
149}
150
162inline double WakeSolidity(const PanelSolidity& rule, double twineThickness, double barLength, double meshOpeningAngle)
163{
164 if (rule.model == SolidityModel::Fixed)
165 return rule.fixed;
166 return CylinderSolidity(twineThickness, barLength, meshOpeningAngle);
167}
168
169} // namespace net_solidity
The solidity rule of one panel.
Definition NetSolidity.h:104
SolidityModel model
Which rule applies.
Definition NetSolidity.h:105
double fixed
Sₙ for Fixed, dimensionless.
Definition NetSolidity.h:106
double knotFactor
K for MeshOpening.
Definition NetSolidity.h:107