2#include "CommonTypes.h"
181#include "NetBottomContactFilter.h"
182#include "NetCableElement.h"
183#include "NetCableElementSpec.h"
184#include "NetElement3N.h"
185#include "NetElementDef.h"
186#include "NetStructureSpec.h"
188#include "sfh/math/math.h"
189#include "sfh/timers/ProfilerWallclock.h"
191#include <fhsim/simobject/SimObject.h>
192#include <fhsim_environment/EnvironmentProvider.h>
193#include <fhsim_environment/SeafloorForcesInterface.h>
197#ifdef FH_VISUALIZATION
198# include "sfh/ogre/C3DLine.h"
199# include "sfh/ogre/NMeshGenerators.h"
201# include <fhsim/visual/renderer/TextRenderer.h>
213 virtual void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
214 virtual void InitialConditionSetup(
const double dT,
const double*
const adCurrentIC,
double*
const adUpdatedIC, ISimObjectCreator*
const creator);
215 virtual void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator);
216 const double* outExternalNodeForce(
const double dT,
const double*
const adX,
int extNode);
229 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
230 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
232 bool HasPortJacobians()
const override;
233 void InputPortJacobian(
const std::string& portName,
double T,
const double* X,
234 double* dF_dInput,
int portSize,
int nStates)
override;
237#ifdef FH_VISUALIZATION
239 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
241 virtual void RenderUpdate(
const double dT,
const double*
const adX);
243 const virtual double* NodePos(
const double dT,
const double*
const adX,
int extNode);
244 const virtual double* NodeVel(
const double dT,
const double*
const adX,
int extNode);
245 const virtual double* BottomContact(
const double dT,
const double*
const adX);
247 const virtual double* StrainEnergy(
const double dT,
const double*
const adX);
248 const virtual double* VelNorm(
const double dT,
const double*
const adX);
251 void SetAddedDragPerMPS(
double AddedDragPerMPS);
254 virtual void CalcStateDerivatives(
const double*
const adX,
double*
const adXDot)
const;
255 virtual void AddExternalForces(
const double dT,
const double*
const adX)
const;
256 virtual void AddNetForces(
const double dT,
const double*
const adX)
const;
257 virtual void AddCableForces(
const double dT,
const double*
const adX)
const;
258 virtual double AddNodeBottomForce(
const double*
const adX,
int node,
double diam,
double adForceInOut[3])
const;
259 virtual void AddBottomForces(
const double*
const adX)
const;
260 virtual void AddInputPorts(ISimObjectCreator* creator);
261 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
262 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
263 virtual void CreateDataStructures();
264 virtual void CreateOutputPorts(ISimObjectCreator* creator);
265 VSPairStrInt CreateExternalNodeMap(std::string tag,
int* piUsed,
NetStructureSpec& NetSpec, ISimObjectCreator* creator);
266 void PRINTALLNODEFORCES(std::string spec,
double dT);
274 const double pA[3],
const double pB[3],
275 const double vA[3],
const double vB[3],
276 double dFA_dpA[9],
double dFA_dpB[9],
277 double dFA_dvA[9],
double dFA_dvB[9])
const;
286 const double pA[3],
const double pB[3],
287 const double vA[3],
const double vB[3],
288 const double vFluid[3],
double rhoWater,
289 double dFA_dvA[9],
double dFA_dvB[9],
290 double dFB_dvA[9],
double dFB_dvB[9])
const;
292 void ComputeCableDragPositionJacobian(
294 const double pA[3],
const double pB[3],
295 const double vA[3],
const double vB[3],
296 const double vFluid[3],
double rhoWater,
297 double dFA_dpA[9],
double dFA_dpB[9],
298 double dFB_dpA[9],
double dFB_dpB[9])
const;
305 const double pA[3],
const double pB[3],
const double pC[3],
306 const double vA[3],
const double vB[3],
const double vC[3],
307 const double vWater[3],
double addedLinearDrag,
308 double dFA_dpA[9],
double dFA_dpB[9],
double dFA_dpC[9],
309 double dFB_dpA[9],
double dFB_dpB[9],
double dFB_dpC[9],
310 double dFC_dpA[9],
double dFC_dpB[9],
double dFC_dpC[9],
311 double dFA_dvA[9],
double dFA_dvB[9],
double dFA_dvC[9],
312 double dFB_dvA[9],
double dFB_dvB[9],
double dFB_dvC[9],
313 double dFC_dvA[9],
double dFC_dvB[9],
double dFC_dvC[9])
const;
315 double m_StrainEnergy;
327 int m_numNodesOutputPosAndVel;
330 int m_numNodesOriginal;
332 int m_numNodeOutputs;
338 double m_bottomContact[6];
340 environment::EnvironmentProvider* m_environment;
341 environment::SeafloorForcesInterface* m_seafloor;
347 std::vector<NetElement3N*> m_VpNetElements;
350 int** m_aaiCableConn;
352 bool m_foldingPointRefinementUsed;
359 VSPairStrInt m_VsNodesInputForce;
360 bool m_useTagForExternalNodes;
364 mutable sfh::timers::StopWatch m_OdeTimer;
365 double* m_accelerationNorms;
367#ifdef CNetStructure_DO_PROFILE
368 sfh::timers::ProfilerWallclock m_Profiler;
371#ifdef FH_VISUALIZATION
372 bool m_lineVisualization;
373 C3DLine* m_LineVisualizationPressure;
374 C3DLine* m_LineVisualizationStrain;
Class containing a cable element object, allowing for disks and spheres to be connected.
Definition NetCableElement.h:34
Definition NetElement3N.h:34
Definition NetStructureSpec.h:38
Definition NetStructure.h:207
void ComputeCableDragVelocityJacobian(const NetCableElement *cable, const double pA[3], const double pB[3], const double vA[3], const double vB[3], const double vFluid[3], double rhoWater, double dFA_dvA[9], double dFA_dvB[9], double dFB_dvA[9], double dFB_dvB[9]) const
virtual ~NetStructure()
The destructor deletes dynamically allocated memory.
NetBottomContactFilter m_BottomContactFilter
Environment.
Definition NetStructure.h:337
NetStructure(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructure.h:319
void ComputeCableStructuralJacobian(const NetCableElement *cable, const double pA[3], const double pB[3], const double vA[3], const double vB[3], double dFA_dpA[9], double dFA_dpB[9], double dFA_dvA[9], double dFA_dvB[9]) const
bool HasJacobians() const override
std::vector< NetCableElement * > m_VpCableElements
Element properties.
Definition NetStructure.h:346
void ComputePanelJacobianFD(NetElement3N *panel, const double pA[3], const double pB[3], const double pC[3], const double vA[3], const double vB[3], const double vC[3], const double vWater[3], double addedLinearDrag, double dFA_dpA[9], double dFA_dpB[9], double dFA_dpC[9], double dFB_dpA[9], double dFB_dpB[9], double dFB_dpC[9], double dFC_dpA[9], double dFC_dpB[9], double dFC_dpC[9], double dFA_dvA[9], double dFA_dvB[9], double dFA_dvC[9], double dFB_dvA[9], double dFB_dvB[9], double dFB_dvC[9], double dFC_dvA[9], double dFC_dvB[9], double dFC_dvC[9]) const
int m_numNodesInputForce
Node counts.
Definition NetStructure.h:326
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition NetStructure.h:358
Class containing the specification for a net object.
Definition NetStructureSpec.h:22