139#include "JacobianStates.h"
141#include <fhsim/simobject/SimObject.h>
145class EnvironmentProvider;
163 CCable(
const std::string& simObjectName, ISimObjectCreator*
const creator);
179 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
197 void InitialConditionSetup(
const double T,
const double*
const currentIC,
double*
const updatedIC, ISimObjectCreator*
const creator);
199 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
201 const double*
ForceA(
const double T,
const double*
const X);
202 const double*
ForceB(
const double T,
const double*
const X);
214#ifdef FH_VISUALIZATION
215 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
216 void RenderUpdate(
const double T,
const double*
const X);
237 void computeSegmentForces(
const double T,
const double* X,
const double* pA,
const double* pB,
const double* vA,
const double* vB,
double* FA,
double* FB,
double waveBound,
double* wetOut =
nullptr)
const;
255 double wetFraction(
const double T,
const double* pA,
const double* pB,
double waveBound,
double* dWet_dpA =
nullptr,
double* dWet_dpB =
nullptr)
const;
273 void computeVirtualPoint(
const double*
const target,
const double*
const point,
const double*
const targetVel,
const double*
const pointVel,
double* virtualPoint,
double* virtualPointVel,
double residual,
double dResidual)
const;
275 void testPositiveParam(
double value, ISimObjectCreator* creator, std::string valueName);
288 double Q[3] = {0.0, 0.0, 0.0};
289 double midPosition[3] = {0.0, 0.0, 0.0};
292 double dWet_dpB[3] = {0.0, 0.0, 0.0};
294 double acceleration[3] = {0.0, 0.0, 0.0};
296 double relativeHeight = 0.0;
298 double seabedRamp = 0.0;
299 double current[3] = {0.0, 0.0, 0.0};
309 double dFA_dpA[9], dFA_dpB[9], dFA_dvA[9], dFA_dvB[9];
310 double dFB_dpA[9], dFB_dpB[9], dFB_dvA[9], dFB_dvB[9];
321 double m_cableLength;
342 ISignalPort* m_PositionA;
379 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
380 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
382#ifdef FH_VISUALIZATION
383 C3DLine* m_lines1 =
nullptr;
384 C3DLine* m_lines2 =
nullptr;
ISignalPort * m_VelocityB
input port. Velocity of point A [m/s]
Definition Cable.h:345
const double * ForceB(const double T, const double *const X)
output port. See PortDefs.h. Returns force at point A
double m_wetEndB
wetted fraction of the segment from virtual point A to the first free node
Definition Cable.h:356
double nodeMass(double wetHalves) const
SegmentSample sampleSegment(const double T, const double *pA, const double *pB, double waveBound, bool withWetDerivatives) const
double m_hydrodynamicDiameter
cable diameter [m]
Definition Cable.h:327
void computeEndForces(const double T, const double *const X) const
output port. See PortDefs.h. Returns force at point B
double m_endForceB[3]
reactive force at endpoint A [N]
Definition Cable.h:352
environment::EnvironmentProvider * m_environment
Velocity of point B [m].
Definition Cable.h:375
void computeEndpoints(const double T, const StateFrame &frame) const
computes free nodes and both end forces
double m_waterDensity
weight of cable underwater [kg/m]
Definition Cable.h:329
double m_submergedWeight
effective hydrodynamic diameter [m]
Definition Cable.h:328
const double * ForceA(const double T, const double *const X)
retrieves pointer to environment object
double m_segmentStiffness
length of spring between elements [m]
Definition Cable.h:337
const double * m_posA
computation node for endpoint reaction forces
Definition Cable.h:370
ISignalPort * m_retractedSpeedPortB
retraction rate at endpoint A [m/s]
Definition Cable.h:349
double m_wetEndA
force on first free node at endpoint A [N]
Definition Cable.h:355
double m_segmentMass
mass of each free node: its two half-segments, one segment's mass (R96) [kg]
Definition Cable.h:334
void OdeFcn(const double T, const double *const X, double *const XDot) const
free allocated memory
double m_elementMass
number of elements in the cable [#]
Definition Cable.h:332
void addSegmentHydrodynamicJacobian(const double T, const double *pA, const double *pB, const double *vA, const double *vB, SegmentJacobian &jac, double waveBound) const
ISignalPort * m_PositionB
input port. Position of point A [m]
Definition Cable.h:343
double m_retractedLengthA
per node, the summed wetted fractions of its two half-segments
Definition Cable.h:358
double m_virtualPointVelocityB[3]
when cable is winched, the closest free node is attracted towards a ghost point "beyond" the actual e...
Definition Cable.h:365
double m_Emodulus
cable weight [kg/m]
Definition Cable.h:323
double waveInertiaCoefficient() const
(1 + Ca) rho A L of a segment, the factor of the wave excitation on the normal particle acceleration ...
void InitialConditionSetup(const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
Sets initial conditions based on the value of input ports.
double m_virtualPointVelocityA[3]
when cable is winched, the closest free node is attracted towards a ghost point "beyond" the actual e...
Definition Cable.h:364
CCable(const std::string &simObjectName, ISimObjectCreator *const creator)
Reads parameters, registers states, input/output ports and shared resources.
double m_virtualPointA[3]
number of nodes currently on winch B
Definition Cable.h:362
double m_virtualPointB[3]
when cable is winched, the closest free node is attracted towards a ghost point "beyond" the actual e...
Definition Cable.h:363
double m_diameter
displaced fluid volume per meter cable [m^2]
Definition Cable.h:326
double m_displacementCrossSectionArea
cross section area of load bearing material [m^2]
Definition Cable.h:325
double m_endForceA[3]
retraction rate at endpoint B [m/s]
Definition Cable.h:351
int m_retractedNodesA
amount of retracted cable at endpoint B [m]
Definition Cable.h:360
int * m_elementVelocityIndex
The relative index of the position state in the state array for each element [#].
Definition Cable.h:339
const double * m_velA
Position of point B [m].
Definition Cable.h:372
double m_tensileCrossSectionArea
Young's modulus of load bearing material [Pa].
Definition Cable.h:324
int m_retractedNodesB
number of nodes currently on winch A
Definition Cable.h:361
void computeElementTension(const double *prev, const double *curr, double *force)
test if a parameter is positive, and reports error if not.
double m_residualB
free length of closest free node [m]
Definition Cable.h:367
void computeSegmentJacobian(const double T, const double *pA, const double *pB, const double *vA, const double *vB, SegmentJacobian &jac, double waveBound) const
Computes the derivatives of all forces computeSegmentForces differentiates: structural and drag.
double m_residualA
when cable is winched, the closest free node is attracted towards a ghost point "beyond" the actual e...
Definition Cable.h:366
ISignalPort * m_retractedLengthPortA
input port. Velocity of point B [m/s]
Definition Cable.h:346
double m_cableWeight
total cable length [m]
Definition Cable.h:322
ISignalPort * m_retractedSpeedPortA
amount of retracted cable at endpoint B [m]
Definition Cable.h:348
void computeSegmentForces(const double T, const double *X, const double *pA, const double *pB, const double *vA, const double *vB, double *FA, double *FB, double waveBound, double *wetOut=nullptr) const
Computes all forces acting on an element.
ISignalPort * m_VelocityA
input port. Position of point B [m]
Definition Cable.h:344
bool HasJacobians() const override
pointer to environment object
int * m_elementPositionIndex
spring stiffness [N/m]
Definition Cable.h:338
int m_numElements
structural axial damping. [N*s/m]
Definition Cable.h:331
double m_internalDamping
water density, the parameter Rho [kg/m^3]
Definition Cable.h:330
std::vector< double > m_nodeWetHalves
wetted fraction of the segment from the last free node to virtual point B
Definition Cable.h:357
double m_nodeForceB[3]
force on first free node at endpoint A [N]
Definition Cable.h:354
double m_retractedLengthB
amount of retracted cable at endpoint A [m]
Definition Cable.h:359
const double * m_velB
Velocity of point A [m].
Definition Cable.h:373
void computeVirtualPoint(const double *const target, const double *const point, const double *const targetVel, const double *const pointVel, double *virtualPoint, double *virtualPointVel, double residual, double dResidual) const
Computes position and velocity of the virtual point.
ISignalPort * m_retractedLengthPortB
amount of retracted cable at endpoint A [m]
Definition Cable.h:347
double m_segmentSubmergedMass
mass of each segment [kg]
Definition Cable.h:335
const double * m_posB
Position of point A [m].
Definition Cable.h:371
int m_stateBase
The relative index of the velocity state in the state array for each element [#].
Definition Cable.h:340
double m_segmentLength
submerged weight of each element [kg]
Definition Cable.h:336
ICommonComputation * m_computeEndForces
free length of closest free node [m]
Definition Cable.h:368
double m_nodeForceA[3]
reactive force at endpoint A [N]
Definition Cable.h:353
Definition JacobianStates.h:28
Derivatives of one segment's node forces FA and FB, each a row-major [3 x 3] matrix.
Definition Cable.h:308
compute structural tension for a single element
Definition Cable.h:286
bool hasAcceleration
Whether there are waves and the environment gave an acceleration.
Definition Cable.h:293
bool hasCurrent
Whether the current was sampled: relativeHeight > -1.
Definition Cable.h:297
double dWet_dpA[3]
Only when sampled with the wetted fraction's derivatives.
Definition Cable.h:291