FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructure Class Reference
+ Inheritance diagram for NetStructure:
+ Collaboration diagram for NetStructure:

Public Member Functions

 NetStructure (std::string simObjectName, ISimObjectCreator *creator)
 The constructor sets the pointer to the output object and the parser object.
 
virtual ~NetStructure ()
 The destructor deletes dynamically allocated memory.
 
virtual void OdeFcn (const double dT, const double *const adX, double *const adXDot) const
 
virtual void InitialConditionSetup (const double dT, const double *const adCurrentIC, double *const adUpdatedIC, ISimObjectCreator *const creator)
 
virtual void FinalSetup (const double dT, const double *const adX, ISimObjectCreator *const creator)
 
const double * outExternalNodeForce (const double dT, const double *const adX, int extNode)
 
bool HasJacobians () const override
 
void OdeJacobian (double T, const double *X, double *J, int nStates) override
 
int GetJacobianSparsity (int nStates, int *rowPtr, int *colIdx) override
 
bool HasPortJacobians () const override
 
void InputPortJacobian (const std::string &portName, double T, const double *X, double *dF_dInput, int portSize, int nStates) override
 
virtual const double * NodePos (const double dT, const double *const adX, int extNode)
 
virtual const double * NodeVel (const double dT, const double *const adX, int extNode)
 
virtual const double * BottomContact (const double dT, const double *const adX)
 
virtual const double * StrainEnergy (const double dT, const double *const adX)
 
virtual const double * VelNorm (const double dT, const double *const adX)
 
void SetAddedDragPerMPS (double AddedDragPerMPS)
 

Public Attributes

double m_velNorm
 

Protected Member Functions

virtual void CalcStateDerivatives (const double *const adX, double *const adXDot) const
 
virtual void AddExternalForces (const double dT, const double *const adX) const
 
virtual void AddNetForces (const double dT, const double *const adX) const
 
virtual void AddCableForces (const double dT, const double *const adX) const
 
virtual double AddNodeBottomForce (const double *const adX, int node, double diam, double adForceInOut[3]) const
 
virtual void AddBottomForces (const double *const adX) const
 
virtual void AddInputPorts (ISimObjectCreator *creator)
 
virtual void CreateNetPanels (std::vector< const NetElementDef * > VNetElementDefs, ISimObjectCreator *creator)
 
virtual void CreateNetCables (std::vector< const NetCableElementSpec * > VCableElements, ISimObjectCreator *creator)
 
virtual void CreateDataStructures ()
 
virtual void CreateOutputPorts (ISimObjectCreator *creator)
 
VSPairStrInt CreateExternalNodeMap (std::string tag, int *piUsed, NetStructureSpec &NetSpec, ISimObjectCreator *creator)
 
void PRINTALLNODEFORCES (std::string spec, double dT)
 
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
 
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
 
void ComputeCableDragPositionJacobian (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_dpA[9], double dFA_dpB[9], double dFB_dpA[9], double dFB_dpB[9]) const
 
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
 

Protected Attributes

double m_StrainEnergy
 
ISignalPort ** m_inExternalForces
 Interface member variables.
 
int * m_iStatePos
 
int * m_iStateVel
 
int m_numNodesInputForce
 Node counts.
 
int m_numNodesOutputPosAndVel
 
int m_numPanelsCalc
 
int m_numCablesCalc
 
int m_numNodesOriginal
 
int m_numNodesCalc
 
int m_numNodeOutputs
 
NetBottomContactFilter m_BottomContactFilter
 Environment.
 
double m_bottomContact [6]
 
environment::EnvironmentProvider * m_environment
 
environment::SeafloorForcesInterface * m_seafloor
 
std::vector< NetCableElement * > m_VpCableElements
 Element properties.
 
std::vector< NetElement3N * > m_VpNetElements
 
float * m_inertia
 
int * m_netConn
 
int ** m_aaiCableConn
 
SAdaptationSpec_t m_SAdaptations
 
bool m_foldingPointRefinementUsed
 
VSPairStrInt m_VsNodesOutputPosAndVel
 Nodes reachable directly through input or output ports.
 
VSPairStrInt m_VsNodesInputForce
 
bool m_useTagForExternalNodes
 
double * m_nodeForce
 
sfh::timers::StopWatch m_OdeTimer
 
double * m_accelerationNorms
 

Member Function Documentation

◆ ComputeCableDragVelocityJacobian()

void NetStructure::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
protected

Computes the 3x3 velocity-block contributions of the cable hydrodynamic drag (tangential + normal) to the forces on end A and end B. The position-block contribution (direction change with x) is omitted; kSaturationSpeed clipping and the rhoWater air/water blending across z=0 are ignored.

◆ ComputeCableStructuralJacobian()

void NetStructure::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
protected

Computes the 3x3 derivative blocks of the force on cable end A (FA = forceAmp * e_AB, with e_AB = (pB-pA)/L) w.r.t. the position and velocity of both ends. The force on end B is FB = -FA so the caller flips signs when assembling node B contributions.

◆ ComputePanelJacobianFD()

void NetStructure::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
protected

Computes the full 18×9 panel Jacobian (forces on A,B,C w.r.t. positions and velocities of A,B,C) using internal forward finite differences on the panel's AddNodeForces function. Each 3×3 output block is row-major.

◆ HasJacobians()

bool NetStructure::HasJacobians ( ) const
override

Analytical Jacobian support. Covers the dominant stiff terms only:

  • position->velocity coupling (identity block)
  • cable element axial spring + axial damping
  • external force input ports (1/inertia mapping) Net panel forces, hydrodynamic drag, bottom contact, gravity/buoyancy, tension saturation and the adaptation/clamp filters are intentionally omitted (zero contribution). Verification tests must use a loose tolerance (~1e-2) and a configuration that exercises only the covered terms (cables in tension, no panels, no seabed contact, no clamps).

◆ OdeFcn()

virtual void NetStructure::OdeFcn ( const double  dT,
const double *const  adX,
double *const  adXDot 
) const
virtual

Reimplemented in NetWithAttractor.


The documentation for this class was generated from the following file: