FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructureWakeEffect.h
1#pragma once
2#include "CommonTypes.h"
3
178// #define CNetStructureWakeEffect_DO_PROFILE
179
180// Includes
181#include "NetBottomContactFilter.h"
182#include "NetCableElement.h"
183#include "NetCableElementSpec.h"
184#include "NetElement3NWakeEffect.h"
185#include "NetElementDef.h"
186#include "NetStructureSpec.h"
187
188#include "sfh/timers/ProfilerWallclock.h"
189
190#include <fhsim/simobject/SimObject.h>
191#include <fhsim_environment/EnvironmentProvider.h>
192#include <fhsim_environment/SeafloorForcesInterface.h>
193#include <string>
194
195
196#ifdef FH_VISUALIZATION
197# include "sfh/ogre/C3DLine.h"
198# include "sfh/ogre/NMeshGenerators.h"
199
200# include <fhsim/visual/renderer/TextRenderer.h>
201#endif
202
203// Class definition
204class NetStructureWakeEffect : public SimObject
205{
206public:
208 NetStructureWakeEffect(std::string simObjectName, ISimObjectCreator* creator);
211 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
212 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
213 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
214 const double* outExternalNodeForce(const double dT, const double* const adX, int extNode);
215
216#ifdef FH_VISUALIZATION
218 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
220 virtual void RenderUpdate(const double dT, const double* const adX);
221
222 void CreateCapsule(Ogre::ManualObject* capsule_manual);
223 C3DLine* myline;
224#endif
225 virtual const double* NodePos(const double dT, const double* const adX, int extNode);
226 virtual const double* NodeVel(const double dT, const double* const adX, int extNode);
227 virtual const double* BottomContact(const double dT, const double* const adX);
228 void SetAddedDragPerMPS(double AddedDragPerMPS);
229 const double* GetNetTotalForceForCheck(const double dT, const double* const adX);
230protected:
231 virtual void CalcStateDerivatives(const double* const adX, double* const adXDot) const;
232 virtual void AddExternalForces(const double dT, const double* const adX) const;
233 virtual void AddNetForces(const double dT, const double* const adX) const;
234 virtual void AddCableForces(const double dT, const double* const adX) const;
235 virtual double AddNodeBottomForce(const double* const adX, int node, double diam, double adForceInOut[3]) const;
236 virtual void AddBottomForces(const double* const adX) const;
237 virtual void AddInputPorts(ISimObjectCreator* creator);
238 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
239 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
240 virtual void CreateDataStructures();
241 virtual void CreateOutputPorts(ISimObjectCreator* creator);
242 VSPairStrInt CreateExternalNodeMap(std::string tag, int* piUsed, NetStructureSpec& NetSpec, ISimObjectCreator* creator);
243 void PRINTALLNODEFORCES(std::string spec, double dT);
244
246
247 ISignalPort** m_inExternalForces;
248 int* m_iStatePos;
249 int* m_iStateVel;
251 double* m_NodeExternalForces;
253
255 int m_numNodesOutputPosAndVel;
256 int m_numPanelsCalc;
257 int m_numCablesCalc;
258 int m_numNodesOriginal;
259 int m_numNodesCalc;
260 int m_numNodeOutputs;
262
264
266 double m_bottomContact[6];
267
268 environment::EnvironmentProvider* m_environment;
269 environment::SeafloorForcesInterface* m_seafloor;
271
273
274 std::vector<NetCableElement*> m_VpCableElements;
275 std::vector<NetElement3NWakeEffect*> m_VpNetElements;
276 float* m_inertia;
277 int* m_netConn;
278 int** m_aaiCableConn;
279 SAdaptationSpec_t m_SAdaptations;
280 bool m_foldingPointRefinementUsed;
282
283
285
287 VSPairStrInt m_VsNodesInputForce;
288 bool m_useTagForExternalNodes;
290
291 double* m_nodeForce;
292 mutable sfh::timers::StopWatch m_OdeTimer;
293
294 // Screen model
295 bool m_UseScreenModel;
296 bool m_UseMoeFore2021; // Use drag and lift coefficients from model tests published in Moe-F�re et al. 2021.
297 double m_SnImg; // Use solidity derived from image analysis. Only to be used with drag formulation from Moe-F�re et al. 2021.
298 double m_RhoWater;
299 double m_NetForcesTotalForOutputCheck[3];
300
301 // Wake effect inclusion
306 bool m_useReynoldsDependentDragCoefficients;
307
308#ifdef CNetStructureWakeEffect_DO_PROFILE
309 sfh::timers::ProfilerWallclock m_Profiler;
310#endif
311};
Definition NetBottomContactFilter.h:7
Definition NetStructureSpec.h:38
Definition NetStructureWakeEffect.h:205
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:304
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:286
NetBottomContactFilter m_BottomContactFilter
Environment.
Definition NetStructureWakeEffect.h:265
int m_numNodesInputForce
Node counts.
Definition NetStructureWakeEffect.h:254
int m_NElementBarsInWakeEffectCalc
Number of u and v bars in calculation of wake effect if m_UseActualElementSizeInWakeEffect is set to ...
Definition NetStructureWakeEffect.h:305
bool m_InternalElementWakeEffectsActive
Set to true if wake effects should be active within an element.
Definition NetStructureWakeEffect.h:303
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructureWakeEffect.h:247
std::vector< NetCableElement * > m_VpCableElements
Element properties.
Definition NetStructureWakeEffect.h:274
bool m_ExternalElementWakeEffectsActive
Set to true if elements should be affected by the wake from other elements.
Definition NetStructureWakeEffect.h:302
virtual ~NetStructureWakeEffect()
The destructor deletes dynamically allocated memory.
Class containing the specification for a net object.
Definition NetStructureSpec.h:22