FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Cable.h
1
96#ifndef CABLE_H
97#define CABLE_H
98#include <fhsim/simobject/SimObject.h>
99namespace environment
100{
101class EnvironmentProvider;
102}
103class C3DLine;
104
105class CCable : public SimObject
106{
107 public:
119 CCable(const std::string& simObjectName, ISimObjectCreator* const creator);
120
121 ~CCable();
122
135 void OdeFcn(const double T, const double* const X, double* const XDot) const;
136
137
153 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
154
155 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
156
157 const double* ForceA(const double T, const double* const X);
158 const double* ForceB(const double T, const double* const X);
159
160 void computeEndForces(const double T, const double* const X) const;
161
162#ifdef FH_VISUALIZATION
163 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
164 void RenderUpdate(const double T, const double* const X);
165#endif
166
167 protected:
184 void computeSegmentForces(const double T, const double* X, const double* pA, const double* pB, const double* vA, const double* vB, double* FA, double* FB) const;
185
186
202 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;
203
204 void testPositiveParam(double value, ISimObjectCreator* creator, std::string valueName);
205 void computeElementTension(const double* prev, const double* curr, double* force);
206
211 void computeSegmentStructuralJacobian(const double* pA, const double* pB, const double* vA, const double* vB,
212 double* dFA_dpA, double* dFA_dpB, double* dFA_dvA, double* dFA_dvB) const;
213
214 double m_cableLength;
216 double m_Emodulus;
219 double m_diameter;
225
233
234 ISignalPort* m_PositionA;
235 ISignalPort* m_PositionB;
236 ISignalPort* m_VelocityA;
237 ISignalPort* m_VelocityB;
242
243 mutable double m_endForceA[3];
244 mutable double m_endForceB[3];
245 mutable double m_nodeForceA[3];
246 mutable double m_nodeForceB[3];
247 mutable double m_retractedLengthA;
248 mutable double m_retractedLengthB;
249 mutable int m_retractedNodesA;
250 mutable int m_retractedNodesB;
251 mutable double m_virtualPointA[3];
252 mutable double m_virtualPointB[3];
253 mutable double m_virtualPointVelocityA[3];
254 mutable double m_virtualPointVelocityB[3];
255 mutable double m_residualA;
256 mutable double m_residualB;
257 ICommonComputation* m_computeEndForces;
258
259 mutable const double* m_posA;
260 mutable const double* m_posB;
261 mutable const double* m_velA;
262 mutable const double* m_velB;
263
264 environment::EnvironmentProvider* m_environment;
265
266 public:
267 bool HasJacobians() const override;
268 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
269 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
270
271#ifdef FH_VISUALIZATION
272 C3DLine* m_lines1 = nullptr;
273 C3DLine* m_lines2 = nullptr;
274#endif
275};
276#endif
Definition Cable.h:106
ISignalPort * m_VelocityB
input port. Velocity of point A [m/s]
Definition Cable.h:237
const double * ForceB(const double T, const double *const X)
output port. See PortDefs.h. Returns force at point A
double m_hydrodynamicDiameter
cable diameter [m]
Definition Cable.h:220
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:244
environment::EnvironmentProvider * m_environment
Velocity of point B [m].
Definition Cable.h:264
double m_submergedWeight
effective hydrodynamic diameter [m]
Definition Cable.h:221
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:230
const double * m_posA
computation node for endpoint reaction forces
Definition Cable.h:259
ISignalPort * m_retractedSpeedPortB
retraction rate at endpoint A [m/s]
Definition Cable.h:241
double m_segmentMass
inverse mass of each element [kg^-1]
Definition Cable.h:227
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:224
ISignalPort * m_PositionB
input port. Position of point A [m]
Definition Cable.h:235
double m_retractedLengthA
force on first free node at endpoint A [N]
Definition Cable.h:247
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:254
double m_Emodulus
cable weight [kg/m]
Definition Cable.h:216
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:253
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:251
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:252
double m_diameter
displaced fluid volume per meter cable [m^2]
Definition Cable.h:219
double m_displacementCrossSectionArea
cross section area of load bearing material [m^2]
Definition Cable.h:218
double m_endForceA[3]
retraction rate at endpoint B [m/s]
Definition Cable.h:243
void computeSegmentStructuralJacobian(const double *pA, const double *pB, const double *vA, const double *vB, double *dFA_dpA, double *dFA_dpB, double *dFA_dvA, double *dFA_dvB) const
compute structural tension for a single element
int m_retractedNodesA
amount of retracted cable at endpoint B [m]
Definition Cable.h:249
int * m_elementVelocityIndex
The relative index of the position state in the state array for each element [#].
Definition Cable.h:232
const double * m_velA
Position of point B [m].
Definition Cable.h:261
double m_tensileCrossSectionArea
Young's modulus of load bearing material [Pa].
Definition Cable.h:217
int m_retractedNodesB
number of nodes currently on winch A
Definition Cable.h:250
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:256
double m_elementMassInverse
mass of each element [kg]
Definition Cable.h:226
double m_residualA
when cable is winched, the closest free node is attracted towards a ghost point "beyond" the actual e...
Definition Cable.h:255
ISignalPort * m_retractedLengthPortA
input port. Velocity of point B [m/s]
Definition Cable.h:238
double m_cableWeight
total cable length [m]
Definition Cable.h:215
ISignalPort * m_retractedSpeedPortA
amount of retracted cable at endpoint B [m]
Definition Cable.h:240
ISignalPort * m_VelocityA
input port. Position of point B [m]
Definition Cable.h:236
bool HasJacobians() const override
pointer to environment object
int * m_elementPositionIndex
spring stiffness [N/m]
Definition Cable.h:231
int m_numElements
structural axial damping. [N*s/m]
Definition Cable.h:223
double m_internalDamping
weight of cable underwater [kg/m]
Definition Cable.h:222
double m_nodeForceB[3]
force on first free node at endpoint A [N]
Definition Cable.h:246
ISignalPort * m_PositionA
The relative index of the velocity state in the state array for each element [#].
Definition Cable.h:234
double m_retractedLengthB
amount of retracted cable at endpoint A [m]
Definition Cable.h:248
void computeSegmentForces(const double T, const double *X, const double *pA, const double *pB, const double *vA, const double *vB, double *FA, double *FB) const
computes free nodes and both end forces
const double * m_velB
Velocity of point A [m].
Definition Cable.h:262
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:239
double m_segmentSubmergedMass
mass of each segment [kg]
Definition Cable.h:228
const double * m_posB
Position of point A [m].
Definition Cable.h:260
double m_segmentLength
submerged weight of each element [kg]
Definition Cable.h:229
ICommonComputation * m_computeEndForces
free length of closest free node [m]
Definition Cable.h:257
double m_nodeForceA[3]
reactive force at endpoint A [N]
Definition Cable.h:245