FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructureWakeEffect.h
1#pragma once
2
3#include <limits>
4#include "CommonTypes.h"
5
117// #define CNetStructureWakeEffect_DO_PROFILE
118
119// Includes
120#include "NetBottomContactFilter.h"
121#include "NetCableElement.h"
122#include "NetCableElementSpec.h"
123#include "NetElement3NWakeEffect.h"
124#include "NetElementDef.h"
125#include "NetStructureSpec.h"
126
127#include "sfh/timers/ProfilerWallclock.h"
128
129#include <fhsim/simobject/SimObject.h>
130#include <fhsim_environment/EnvironmentProvider.h>
131#include <fhsim_environment/SeafloorForcesInterface.h>
132#include <string>
133
134
135#ifdef FH_VISUALIZATION
136# include "sfh/ogre/C3DLine.h"
137# include "sfh/ogre/NMeshGenerators.h"
138#endif
139
140// Class definition
141class NetStructureWakeEffect : public SimObject
142{
143public:
145 NetStructureWakeEffect(std::string simObjectName, ISimObjectCreator* creator);
148 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
149 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
150 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
151
153 void PreOdeFcn(double T, const double* X, IStateUpdater* updater) override;
154 const double* outExternalNodeForce(const double dT, const double* const adX, int extNode);
155
156#ifdef FH_VISUALIZATION
158 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
160 virtual void RenderUpdate(const double dT, const double* const adX);
161
162 void CreateCapsule(Ogre::ManualObject* capsule_manual);
163 C3DLine* myline;
164#endif
165 virtual const double* NodePos(const double dT, const double* const adX, int extNode);
166 virtual const double* NodeVel(const double dT, const double* const adX, int extNode);
167 virtual const double* BottomContact(const double dT, const double* const adX);
168 void SetAddedDragPerMPS(double AddedDragPerMPS);
169 const double* GetNetTotalForceForCheck(const double dT, const double* const adX);
170protected:
171 virtual void CalcStateDerivatives(const double* const adX, double* const adXDot) const;
172 virtual void AddExternalForces(const double dT, const double* const adX) const;
173 virtual void AddNetForces(const double dT, const double* const adX) const;
174 virtual void AddCableForces(const double dT, const double* const adX) const;
175 virtual double AddNodeBottomForce(const double* const adX, int node, double diam, double adForceInOut[3]) const;
176 virtual void AddBottomForces(const double* const adX) const;
177 virtual void AddInputPorts(ISimObjectCreator* creator);
178 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
179 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
180 virtual void CreateDataStructures();
181 virtual void CreateOutputPorts(ISimObjectCreator* creator);
182 VSPairStrInt CreateExternalNodeMap(std::string tag, int* piUsed, NetStructureSpec& NetSpec, ISimObjectCreator* creator);
183 void PRINTALLNODEFORCES(std::string spec, double dT);
184
186
187 ISignalPort** m_inExternalForces;
188 int* m_iStatePos;
189 int* m_iStateVel;
191 double* m_NodeExternalForces;
193
195 int m_numNodesOutputPosAndVel;
196 int m_numPanelsCalc;
197 int m_numCablesCalc;
198 int m_numNodesOriginal;
199 int m_numNodesCalc;
200 int m_numNodeOutputs;
202
204
206 double m_bottomContact[6];
207
208 environment::EnvironmentProvider* m_environment;
209 environment::SeafloorForcesInterface* m_seafloor;
211
213
214 std::vector<NetCableElement*> m_VpCableElements;
215 std::vector<NetElement3NWakeEffect*> m_VpNetElements;
216 float* m_inertia;
217 int* m_netConn;
218 int** m_aaiCableConn;
219 SAdaptationSpec_t m_SAdaptations;
220 bool m_foldingPointRefinementUsed;
222
223
225
227 VSPairStrInt m_VsNodesInputForce;
228 bool m_useTagForExternalNodes;
230
231 double* m_nodeForce;
233 double m_meanTensionTime = std::numeric_limits<double>::quiet_NaN();
234
235 // Screen model
236 bool m_UseScreenModel;
237 bool m_UseMoeFore2021; // Use drag and lift coefficients from model tests published in Moe-F�re et al. 2021.
238 double m_SnImg; // Use solidity derived from image analysis. Only to be used with drag formulation from Moe-F�re et al. 2021.
239 double m_RhoWater;
240 double m_NetForcesTotalForOutputCheck[3] = {0.0, 0.0, 0.0};
241
242 // Wake effect inclusion
247 bool m_useReynoldsDependentDragCoefficients;
248
249#ifdef CNetStructureWakeEffect_DO_PROFILE
250 sfh::timers::ProfilerWallclock m_Profiler;
251#endif
252};
Definition NetBottomContactFilter.h:7
Definition NetStructureSpec.h:37
Definition NetStructureWakeEffect.h:142
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
Advances the cable elements' mean tension from the step's start state (owner ruling R64).
bool m_UseActualElementSizeInWakeEffect
Set to true if actual size (number of u and v bars) of net element shall be used in wake effect calcu...
Definition NetStructureWakeEffect.h:245
double m_NetForcesTotalForOutputCheck[3]
Never computed, so NetTotalForceCheck outputs zeros.
Definition NetStructureWakeEffect.h:240
NetStructureWakeEffect(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
virtual void CalcStateDerivatives(const double *const adX, double *const adXDot) const
For screen model. Checking calculated total net force.
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition NetStructureWakeEffect.h:226
NetBottomContactFilter m_BottomContactFilter
Environment.
Definition NetStructureWakeEffect.h:205
double m_meanTensionTime
The time of the last per-step mean-tension update of the cable elements (owner ruling R64),...
Definition NetStructureWakeEffect.h:233
int m_numNodesInputForce
Node counts.
Definition NetStructureWakeEffect.h:194
int m_NElementBarsInWakeEffectCalc
Number of u and v bars in calculation of wake effect if m_UseActualElementSizeInWakeEffect is set to ...
Definition NetStructureWakeEffect.h:246
bool m_InternalElementWakeEffectsActive
Set to true if wake effects should be active within an element.
Definition NetStructureWakeEffect.h:244
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructureWakeEffect.h:187
std::vector< NetCableElement * > m_VpCableElements
Element properties.
Definition NetStructureWakeEffect.h:214
bool m_ExternalElementWakeEffectsActive
Set to true if elements should be affected by the wake from other elements.
Definition NetStructureWakeEffect.h:243
virtual ~NetStructureWakeEffect()
The destructor deletes dynamically allocated memory.
Class containing the specification for a net object.
Definition NetStructureSpec.h:22