46 const std::string netName,
47 const unsigned long iID,
49 const int NBarsInWakeEffectCalc,
50 const double dNy_water,
51 const double dRho_water,
52 const double knotDiameterRatio,
53 const double knotMomStiff,
54 const double dKknotMomStiff_contact,
55 const double cnLinearLimitAngle,
56 const double cnLinear,
59 const double turbLimit,
60 const double lamLimit,
61 const double dCt_nominal,
62 const double dCnKnots_nominal,
63 const double dampingRatio,
64 const bool internalWakeEffectsActive,
65 const bool useActualSizeInWakeEffect,
66 const bool useReynoldsDependentDrag);
71 void AddNodeForces(
const double*
const adNodePosA_ned,
72 const double*
const adNodePosB_ned,
73 const double*
const adNodePosC_ned,
74 const double*
const adNodeVelA_ned,
75 const double*
const adNodeVelB_ned,
76 const double*
const adNodeVelC_ned,
77 const double*
const adAmbientCurrentVel_ned,
78 const double*
const adWaveParticleVel_ned,
79 const double*
const adWaterVel_ned,
80 double *
const adNodeForceA_ned,
81 double *
const adNodeForceB_ned,
82 double *
const adNodeForceC_ned,
83 const bool useScreenModel,
84 const bool dUseDragCoeffMoeFore2021,
86 const double rhoWater,
87 double hydroForcesRatio = 1.0,
88 double addedLinearDrag = 0.0
95 void GenerateInternalWakeEffectPolynomial(
double* currentVel);
96 void GenerateExternalWakeEffectPolynomial(
double* currentVel);
97 bool IsInShadowedRegionOfCage();
98 void SetInShadowedRegionOfCage(
bool value);
99 void SetDistanceToWallInFront(
double distance);
100 double GetExternalWakeEffect(
double* currentVel,
double* posA,
double* posB,
double* posC);
101 double GetInternalWakeEffect(
double* currentVel,
double* posA,
double* posB,
double* posC);
105#ifdef FH_VISUALIZATION
107 void RenderInit(Ogre::Root* ogreRoot);
110 void RenderUpdate(
const double*
const adPosA,
const double*
const adPosB,
111 const double*
const adPosC );
114 void setElementIsCoveredByROV(
bool _covered);
117 void CalcTensionForces(
double meshBarComp_panel[6],
double meshBarLength[2],
118 double twineTension[2],
double nodeATension_panel[3],
double nodeBTension_panel[3],
119 double nodeCTension_panel[3]);
121 void CalcLocalUVComponents(
double nodesABdist_panel[3],
double nodesACdist_panel[3],
122 double nodesBCdist_panel[3],
double meshBarComp_panel[6],
double meshBarLength[2]);
124 void CalcMeshContactForces(
double meshBarComp_panel[6],
125 double meshBarLength[2],
126 double nodeAMeshOpeningRes_panel[3],
127 double nodeBMeshOpeningRes_panel[3],
128 double nodeCMeshOpeningRes_panel[3],
129 double nodeATwineContactRes_panel[3],
130 double nodeBTwineContactRes_panel[3],
131 double nodeCTwineContactRes_panel[3]);
133 double CalcVelocities(
double R_ned2panel[3][3],
134 const double*
const adNodeVelA_ned,
135 const double*
const adNodeVelB_ned,
136 const double*
const adNodeVelC_ned,
137 const double*
const adWaterVel_ned,
138 double elementVel_ned[3],
139 double hydDynVel_ned[3],
140 double hydDynVel_panel[3]);
142 void CalcHydroDynamicForcesScreenModel(
143 const double*
const adNodePosA_ned,
144 const double*
const adNodePosB_ned,
145 const double*
const adNodePosC_ned,
146 const double*
const adNodeVelA_ned,
147 const double*
const adNodeVelB_ned,
148 const double*
const adNodeVelC_ned,
149 const double*
const adAmbientCurrentVel_ned,
150 const double*
const adWaveParticleVel_ned,
151 const double*
const adWaterVel_ned,
152 double *
const nodeAforce_ned,
153 double *
const nodeBforce_ned,
154 double *
const nodeCforce_ned,
155 const double rhoWater,
156 const bool useDragCoeffMoeFore2021,
159 void CalcHydroDynamicForces(
double meshBarComp_panel[6],
160 double meshBarLength[2],
161 double R_ned2panel[3][3],
162 const double*
const adNodeVelA_ned,
163 const double*
const adNodeVelB_ned,
164 const double*
const adNodeVelC_ned,
165 const double*
const adWaterVel_ned,
166 double elementVel_ned[3],
167 double totalDragPerNode_panel[3]);
169 void CalcDampingForces(
double elementVel_ned[3],
170 const double*
const adNodeVelA_ned,
171 const double*
const adNodeVelB_ned,
172 const double*
const adNodeVelC_ned,
173 const double*
const adWaterVel_ned,
174 double adDampingForcesNodeA[3],
175 double adDampingForcesNodeB[3],
176 double adDampingForcesNodeC[3],
177 double addedLinearDrag);
180 double DragCoeffCircularCylinderFromReynoldsNumber(
double Sn,
double Urel);
181 vec3 CalcRelativeVelocity(
184 const double*
const adNodeVelA_ned,
185 const double*
const adNodeVelB_ned,
186 const double*
const adNodeVelC_ned);
190 void SortPanelNodes(
int index,
const double * aadNodes[3],
double adNodePosA_mesh[2],
double adNodePosB_mesh[2],
double adNodePosC_mesh[2],
unsigned short* aiSort);
191 void FindTwineCrossings(
unsigned short index,
unsigned short kiNumMeshPerLine,
double* CoeffA,
double* CoeffB,
const double* aadNodes[3]);
193 double GetDragCoefficientFromPolynomial(
double nominalReynoldsNumber);
194 double Blevins(
double DX,
double DY,
double Cd);
195 double SquaredSumColumnIn2DDoubleArray(Eigen::MatrixXd input,
int colIndex,
int length);
196 Eigen::VectorXd PolynomialFit(Eigen::VectorXd alpha,
int nAlpha, Eigen::VectorXd targetArray,
int order);
197 double ComputePolynomialValue(std::string polynomialType,
double inputValue);
198 int m_maxUBarDimension;
199 int m_maxVBarDimension;
200 double *m_InternalWakeEffectPolynomial;
201 double *m_ExternalWakeEffectPolynomial;
202 int m_orderOfInternalPolynomial;
203 int m_orderOfExternalPolynomial;
204 bool m_InternalWakeEffectsActive;
205 bool m_inShadowedRegionOfCage;
206 double m_distanceToWallInFront;
207 bool m_useReynoldsDependentDrag;
208 bool m_UseActualSizeInWakeEff;
209 int m_NBarsInWakeEffectCalc;
217 std::string m_netName;
219 double m_nodeInertia[3];
226 double m_knotMomStiff;
227 double m_knotMomStiffContact;
228 double m_nodeAPos_mesh[2];
229 double m_nodeBPos_mesh[2];
230 double m_nodeCPos_mesh[2];
231 double m_CnLinearLimitAngle;
238 double m_CnKnots_nominal;
242 double m_nodesDistAB_mesh[2];
243 double m_nodesDistAC_mesh[2];
244 double m_nodesDistBC_mesh[2];
253 double m_meshOpeningAngle;
254 double m_ShadowEffect[3];
255 double m_ShadowEffectBias;
260 double m_kTwineDragNormal[2];
261 double m_nodeAforce_ned[3];
262 double m_nodeBforce_ned[3];
263 double m_nodeCforce_ned[3];
264 double m_dampingCoeff;
266 double m_nodeAforce_ned_last[3];
267 double m_nodeBforce_ned_last[3];
268 double m_nodeCforce_ned_last[3];
273#ifdef FH_VISUALIZATION
275 Ogre::Root* m_ogreRoot;
276 Ogre::SceneManager* m_sceneMgr;
277 Ogre::Entity* m_renderElement[3];
278 Ogre::Entity* m_renderSphere[3];
279 Ogre::SceneNode* m_renderNodeMesh;
280 Ogre::SceneNode* m_renderNodeSphere[3];
281 Ogre::SceneNode* m_renderNodeOutline;
282 Ogre::SceneNode* m_renderNodeMaterial;
283#ifdef USE_DYNAMIC_LINES
284 CDynamicLines* m_lines;
288 CDynamicLines* m_lineOutline;
289 Ogre::ManualObject * m_netRenderObj;
292 unsigned short* m_sortU;
293 unsigned short* m_sortV;
294 unsigned long m_numTwines;
295 unsigned long m_numUTwines;
296 unsigned long m_numVTwines;
297 double* m_interpCoeffAu;
298 double* m_interpCoeffAv;
299 double* m_interpCoeffBu;
300 double* m_interpCoeffBv;
NetElement3NWakeEffect(const std::string netName, const unsigned long iID, const NetElementDef *netPanel, const int NBarsInWakeEffectCalc, const double dNy_water, const double dRho_water, const double knotDiameterRatio, const double knotMomStiff, const double dKknotMomStiff_contact, const double cnLinearLimitAngle, const double cnLinear, const double cnTurb, const double cnLam, const double turbLimit, const double lamLimit, const double dCt_nominal, const double dCnKnots_nominal, const double dampingRatio, const bool internalWakeEffectsActive, const bool useActualSizeInWakeEffect, const bool useReynoldsDependentDrag)
The constructor.