2#include "CommonTypes.h"
177#include "NetBottomContactFilter.h"
178#include "NetCableElement.h"
179#include "NetCableElementSpec.h"
180#include "NetElement3N.h"
181#include "NetElementDef.h"
182#include "NetStructureSpec.h"
184#include "sfh/math/math.h"
185#include "sfh/timers/ProfilerWallclock.h"
187#include <fhsim/simobject/SimObject.h>
188#include <fhsim_environment/EnvironmentProvider.h>
189#include <fhsim_environment/SeafloorForcesInterface.h>
193#ifdef FH_VISUALIZATION
194# include "sfh/ogre/C3DLine.h"
195# include "sfh/ogre/NMeshGenerators.h"
197# include <fhsim/visual/renderer/TextRenderer.h>
209 virtual void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
210 virtual void InitialConditionSetup(
const double dT,
const double*
const adCurrentIC,
double*
const adUpdatedIC, ISimObjectCreator*
const creator);
211 virtual void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator);
212 const double* outExternalNodeForce(
const double dT,
const double*
const adX,
int extNode);
225 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
226 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
228 bool HasPortJacobians()
const override;
229 void InputPortJacobian(
const std::string& portName,
double T,
const double* X,
230 double* dF_dInput,
int portSize,
int nStates)
override;
233#ifdef FH_VISUALIZATION
235 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
237 virtual void RenderUpdate(
const double dT,
const double*
const adX);
239 const virtual double* NodePos(
const double dT,
const double*
const adX,
int extNode);
240 const virtual double* NodeVel(
const double dT,
const double*
const adX,
int extNode);
241 const virtual double* BottomContact(
const double dT,
const double*
const adX);
243 const virtual double* StrainEnergy(
const double dT,
const double*
const adX);
244 const virtual double* VelNorm(
const double dT,
const double*
const adX);
247 void SetAddedDragPerMPS(
double AddedDragPerMPS);
250 virtual void CalcStateDerivatives(
const double*
const adX,
double*
const adXDot)
const;
251 virtual void AddExternalForces(
const double dT,
const double*
const adX)
const;
252 virtual void AddNetForces(
const double dT,
const double*
const adX)
const;
253 virtual void AddCableForces(
const double dT,
const double*
const adX)
const;
254 virtual double AddNodeBottomForce(
const double*
const adX,
int node,
double diam,
double adForceInOut[3])
const;
255 virtual void AddBottomForces(
const double*
const adX)
const;
256 virtual void AddInputPorts(ISimObjectCreator* creator);
257 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
258 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
259 virtual void CreateDataStructures();
260 virtual void CreateOutputPorts(ISimObjectCreator* creator);
261 VSPairStrInt CreateExternalNodeMap(std::string tag,
int* piUsed,
NetStructureSpec& NetSpec, ISimObjectCreator* creator);
262 void PRINTALLNODEFORCES(std::string spec,
double dT);
270 const double pA[3],
const double pB[3],
271 const double vA[3],
const double vB[3],
272 double dFA_dpA[9],
double dFA_dpB[9],
273 double dFA_dvA[9],
double dFA_dvB[9])
const;
282 const double pA[3],
const double pB[3],
283 const double vA[3],
const double vB[3],
284 const double vFluid[3],
double rhoWater,
285 double dFA_dvA[9],
double dFA_dvB[9],
286 double dFB_dvA[9],
double dFB_dvB[9])
const;
288 void ComputeCableDragPositionJacobian(
290 const double pA[3],
const double pB[3],
291 const double vA[3],
const double vB[3],
292 const double vFluid[3],
double rhoWater,
293 double dFA_dpA[9],
double dFA_dpB[9],
294 double dFB_dpA[9],
double dFB_dpB[9])
const;
301 const double pA[3],
const double pB[3],
const double pC[3],
302 const double vA[3],
const double vB[3],
const double vC[3],
303 const double vWater[3],
double addedLinearDrag,
304 double dFA_dpA[9],
double dFA_dpB[9],
double dFA_dpC[9],
305 double dFB_dpA[9],
double dFB_dpB[9],
double dFB_dpC[9],
306 double dFC_dpA[9],
double dFC_dpB[9],
double dFC_dpC[9],
307 double dFA_dvA[9],
double dFA_dvB[9],
double dFA_dvC[9],
308 double dFB_dvA[9],
double dFB_dvB[9],
double dFB_dvC[9],
309 double dFC_dvA[9],
double dFC_dvB[9],
double dFC_dvC[9])
const;
311 double m_StrainEnergy;
323 int m_numNodesOutputPosAndVel;
326 int m_numNodesOriginal;
328 int m_numNodeOutputs;
334 double m_bottomContact[6];
336 environment::EnvironmentProvider* m_environment;
337 environment::SeafloorForcesInterface* m_seafloor;
343 std::vector<NetElement3N*> m_VpNetElements;
346 int** m_aaiCableConn;
348 bool m_foldingPointRefinementUsed;
355 VSPairStrInt m_VsNodesInputForce;
356 bool m_useTagForExternalNodes;
360 mutable sfh::timers::StopWatch m_OdeTimer;
361 double* m_accelerationNorms;
363#ifdef CNetStructure_DO_PROFILE
364 sfh::timers::ProfilerWallclock m_Profiler;
367#ifdef FH_VISUALIZATION
368 bool m_lineVisualization;
369 C3DLine* m_LineVisualizationPressure;
370 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:203
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:333
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:315
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:342
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:322
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition NetStructure.h:354
Class containing the specification for a net object.
Definition NetStructureSpec.h:22