Marine systems simulation
Loading...
Searching...
No Matches
CNetStructureWakeEffect.h
1#pragma once
2
175//#define CNetStructureWakeEffect_DO_PROFILE
176
177// Includes
178#include <string>
179
180#include <SimObject.h>
181#include "sfh/timers/ProfilerWallclock.h"
182
183#include <EnvironmentProvider.h>
184#include <SeafloorForcesInterface.h>
185
186#include "CNetElement3NWakeEffect.h"
187#include "CNetCableElementSpec.h"
188#include "CNetCableElement.h"
189#include "CNetElementDef.h"
190#include "CNetBottomContactFilter.h"
191#include "CNetStructureSpec.h"
192
193
194#ifdef FH_VISUALIZATION
195 #include "sfh/ogre/NMeshGenerators.h"
196 #include "sfh/ogre/C3DLine.h"
197 #include <CTextRenderer.h>
198#endif
199
200//Class definition
201class CNetStructureWakeEffect : public SimObject
202{
203public:
205 CNetStructureWakeEffect(std::string sSimObjectName, ISimObjectCreator *pCreator);
208 virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep);
209 virtual void InitialConditionSetup(const double dT, const double *const adCurrentIC, double *const adUpdatedIC, ISimObjectCreator *const pCreator);
210 virtual void FinalSetup(const double dT, const double *const adX, ISimObjectCreator *const pCreator);
211 const double * outExternalNodeForce(const double dT, const double *const adX, int iExtNode);
212
213#ifdef FH_VISUALIZATION
215 virtual void RenderInit(Ogre::Root *const pOgreRoot, ISimObjectCreator *const pCreator);
217 virtual void RenderUpdate(const double dT, const double *const adX);
218
219 void CreateCapsule( Ogre::ManualObject *capsule_manual);
220 C3DLine *myline;
221#endif
222 virtual const double * NodePos(const double dT, const double *const adX, int iExtNode);
223 virtual const double * NodeVel(const double dT, const double *const adX, int iExtNode);
224 virtual const double * BottomContact(const double dT, const double *const adX);
225 void SetAddedDragPerMPS(double AddedDragPerMPS);
226 const double* GetNetTotalForceForCheck(const double dT, const double *const adX);
227protected:
228 virtual void CalcStateDerivatives(const double *const adX, double *const adXDot);
229 virtual void AddExternalForces(const double dT, const double *const adX);
230 virtual void AddNetForces(const double dT, const double *const adX);
231 virtual void AddCableForces(const double dT, const double *const adX);
232 virtual double AddNodeBottomForce(const double *const adX, int iNode, double dDiam, double adForceInOut[3]);
233 virtual void AddBottomForces(const double *const adX);
234 virtual void AddInputPorts(ISimObjectCreator *pCreator);
235 virtual void CreateNetPanels(std::vector<const CNetElementDef*> VNetElementDefs, ISimObjectCreator *pCreator);
236 virtual void CreateNetCables(std::vector<const CNetCableElementSpec*> VCableElements, ISimObjectCreator *pCreator);
237 virtual void CreateDataStructures();
238 virtual void CreateOutputPorts(ISimObjectCreator *pCreator);
239 VSPairStrInt CreateExternalNodeMap( std::string sTag, int* piUsed, CNetStructureSpec & NetSpec, ISimObjectCreator *pCreator);
240 void PRINTALLNODEFORCES(std::string spec, double dT);
241
243
244 ISignalPort **m_apInExternalForces;
245 int *m_aIStatePos;
246 int *m_aIStateVel;
248 double* m_NodeExternalForces;
250
252 int m_iNumNodesOutputPosAndVel;
253 int m_iNumPanelsCalc;
254 int m_iNumCablesCalc;
255 int m_iNumNodesOriginal;
256 int m_iNumNodesCalc;
257 int m_iNumNodeOutputs;
259
261
263 double m_adBottomContact[6];
264
265 environment::EnvironmentProvider* m_pEnvironment;
266 environment::SeafloorForcesInterface *m_seafloor;
268
270
271 std::vector<CNetCableElement*> m_VpCableElements;
272 std::vector<CNetElement3NWakeEffect*> m_VpNetElements;
273 float* m_afInertia;
274 int* m_aiNetConn;
275 int** m_aaiCableConn;
276 SAdaptationSpec_t m_SAdaptations;
277 bool m_bFoldingPointRefinementUsed;
279
280
282
284 VSPairStrInt m_VsNodesInputForce;
285 bool m_bUseTagForExternalNodes;
287
288 double* m_adNodeForce;
289 sfh::timers::StopWatch m_OdeTimer;
290
291 // Screen model
292 bool m_UseScreenModel;
293 bool m_UseMoeFore2021; // Use drag and lift coefficients from model tests published in Moe-F�re et al. 2021.
294 double m_SnImg; // Use solidity derived from image analysis. Only to be used with drag formulation from Moe-F�re et al. 2021.
295 double m_RhoWater;
296 double m_NetForcesTotalForOutputCheck[3];
297
298 // Wake effect inclusion
303 bool m_useReynoldsDependentDragCoefficients;
304
305#ifdef CNetStructureWakeEffect_DO_PROFILE
306 sfh::timers::ProfilerWallclock m_Profiler;
307#endif
308
309
310};
Definition CNetBottomContactFilter.h:7
Definition CNetStructureSpec.h:38
Definition CNetStructureWakeEffect.h:202
CNetStructureWakeEffect(std::string sSimObjectName, ISimObjectCreator *pCreator)
The constructor sets the pointer to the output object and the parser object.
int m_NElementBarsInWakeEffectCalc
Number of u and v bars in calculation of wake effect if m_UseActualElementSizeInWakeEffect is set to ...
Definition CNetStructureWakeEffect.h:302
CNetBottomContactFilter m_BottomContactFilter
Environment.
Definition CNetStructureWakeEffect.h:262
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 CNetStructureWakeEffect.h:301
int m_iNumNodesInputForce
Node counts.
Definition CNetStructureWakeEffect.h:251
ISignalPort ** m_apInExternalForces
Interface member variables.
Definition CNetStructureWakeEffect.h:244
std::vector< CNetCableElement * > m_VpCableElements
Element properties.
Definition CNetStructureWakeEffect.h:271
virtual void CalcStateDerivatives(const double *const adX, double *const adXDot)
For screen model. Checking calculated total net force.
virtual ~CNetStructureWakeEffect()
The destructor deletes dynamically allocated memory.
bool m_ExternalElementWakeEffectsActive
Set to true if elements should be affected by the wake from other elements.
Definition CNetStructureWakeEffect.h:299
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition CNetStructureWakeEffect.h:283
bool m_InternalElementWakeEffectsActive
Set to true if wake effects should be active within an element.
Definition CNetStructureWakeEffect.h:300
Class containing the specification for a net object.
Definition CNetStructureSpec.h:22