4#include "CommonTypes.h"
121#include "NetBottomContactFilter.h"
122#include "NetCableElement.h"
123#include "NetCableElementSpec.h"
124#include "NetElement3NWakeEffect.h"
125#include "NetElementDef.h"
126#include "NetStructureSpec.h"
128#include "sfh/timers/ProfilerWallclock.h"
130#include <fhsim/simobject/SimObject.h>
131#include <fhsim_environment/EnvironmentProvider.h>
132#include <fhsim_environment/SeafloorForcesInterface.h>
136#ifdef FH_VISUALIZATION
137# include "sfh/ogre/C3DLine.h"
138# include "sfh/ogre/NMeshGenerators.h"
149 virtual void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
150 virtual void InitialConditionSetup(
const double dT,
const double*
const adCurrentIC,
double*
const adUpdatedIC, ISimObjectCreator*
const creator);
151 virtual void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator);
154 void PreOdeFcn(
double T,
const double* X, IStateUpdater* updater)
override;
155 const double* outExternalNodeForce(
const double dT,
const double*
const adX,
int extNode);
157#ifdef FH_VISUALIZATION
159 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
161 virtual void RenderUpdate(
const double dT,
const double*
const adX);
163 void CreateCapsule(Ogre::ManualObject* capsule_manual);
166 virtual const double* NodePos(
const double dT,
const double*
const adX,
int extNode);
167 virtual const double* NodeVel(
const double dT,
const double*
const adX,
int extNode);
168 virtual const double* BottomContact(
const double dT,
const double*
const adX);
169 void SetAddedDragPerMPS(
double AddedDragPerMPS);
170 const double* GetNetTotalForceForCheck(
const double dT,
const double*
const adX);
173 virtual void AddExternalForces(
const double dT,
const double*
const adX)
const;
174 virtual void AddNetForces(
const double dT,
const double*
const adX)
const;
175 virtual void AddCableForces(
const double dT,
const double*
const adX)
const;
176 virtual double AddNodeBottomForce(
const double*
const adX,
int node,
double diam,
double adForceInOut[3])
const;
177 virtual void AddBottomForces(
const double*
const adX)
const;
178 virtual void AddInputPorts(ISimObjectCreator* creator);
179 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
180 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
181 virtual void CreateDataStructures();
182 virtual void CreateOutputPorts(ISimObjectCreator* creator);
183 VSPairStrInt CreateExternalNodeMap(std::string tag,
int* piUsed,
NetStructureSpec& NetSpec, ISimObjectCreator* creator);
184 void PRINTALLNODEFORCES(std::string spec,
double dT);
192 double* m_NodeExternalForces;
196 int m_numNodesOutputPosAndVel;
199 int m_numNodesOriginal;
201 int m_numNodeOutputs;
207 double m_bottomContact[6];
209 environment::EnvironmentProvider* m_environment;
210 environment::SeafloorForcesInterface* m_seafloor;
216 std::vector<NetElement3NWakeEffect*> m_VpNetElements;
219 int** m_aaiCableConn;
221 bool m_foldingPointRefinementUsed;
228 VSPairStrInt m_VsNodesInputForce;
229 bool m_useTagForExternalNodes;
237 bool m_UseScreenModel;
238 bool m_UseMoeFore2021;
248 bool m_useReynoldsDependentDragCoefficients;
250#ifdef CNetStructureWakeEffect_DO_PROFILE
251 sfh::timers::ProfilerWallclock m_Profiler;
Definition NetStructureSpec.h:39
Definition NetStructureWakeEffect.h:143
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:246
double m_NetForcesTotalForOutputCheck[3]
Never computed, so NetTotalForceCheck outputs zeros.
Definition NetStructureWakeEffect.h:241
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:227
NetBottomContactFilter m_BottomContactFilter
Environment.
Definition NetStructureWakeEffect.h:206
double m_meanTensionTime
The time of the last per-step mean-tension update of the cable elements (owner ruling R64),...
Definition NetStructureWakeEffect.h:234
int m_numNodesInputForce
Node counts.
Definition NetStructureWakeEffect.h:195
int m_NElementBarsInWakeEffectCalc
Number of u and v bars in calculation of wake effect if m_UseActualElementSizeInWakeEffect is set to ...
Definition NetStructureWakeEffect.h:247
bool m_InternalElementWakeEffectsActive
Set to true if wake effects should be active within an element.
Definition NetStructureWakeEffect.h:245
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructureWakeEffect.h:188
std::vector< NetCableElement * > m_VpCableElements
Element properties.
Definition NetStructureWakeEffect.h:215
bool m_ExternalElementWakeEffectsActive
Set to true if elements should be affected by the wake from other elements.
Definition NetStructureWakeEffect.h:244
virtual ~NetStructureWakeEffect()
The destructor deletes dynamically allocated memory.
Class containing the specification for a net object.
Definition NetStructureSpec.h:24