FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Cable.h
1#pragma once
116#include "cable/subroutines/CableElDynStiff.h"
117#include "cable/subroutines/InternalCableWithBottomContact.h"
118
119#include "sfh/timers/Timer.h"
120
121#include <fhsim/simobject/SimObject.h>
122#include <memory>
123#include <mutex>
124#include <string>
125
126// Class definition
127class Cable : public SimObject
128{
129public:
131 Cable(std::string simObjectName, ISimObjectCreator* creator);
132
135
136 // Member functions
137 void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
139 void PreOdeFcn(double T, const double* X) override;
140 void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
141 void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
142 void CalcOutput(const double dT, const double* const adX) const;
143
145 bool HasJacobians() const override;
146 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
147 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
148
149 const double* OutForceA(const double dT, const double* const adX);
150 const double* OutForceB(const double dT, const double* const adX);
151 const double* OutPosA(const double dT, const double* const adX);
152 const double* OutPosB(const double dT, const double* const adX);
153
154#ifdef FH_VISUALIZATION
155
157 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
158
160 void RenderUpdate(const double dT, const double* const adX);
161#endif
162protected:
163 void UpdateLength(double newLength, double deltaT);
164
166 void UpdateStiffness(const double* const adForceA, const double* const adForceB);
167
170
171
172 ISignalPort* m_inLength;
173 ISignalPort* m_inVelA;
174 ISignalPort* m_inVelB;
175 ISignalPort* m_inPosA;
176 ISignalPort* m_inPosB;
178 ICommonComputation* m_commonCalc;
181 mutable std::mutex m_cableMutex;
182
183 // Member variables
186
187 double m_inertiaA;
188 double m_inertiaB;
189 mutable double m_forceA[3];
190 mutable double m_forceB[3];
191 double* m_lengths;
192 std::string m_cableName;
193
194 std::unique_ptr<InternalCableWithBottomContact> m_internalCable;
196};
Definition Cable.h:128
double * m_lengths
The lengths of the cable elements.
Definition Cable.h:191
ISignalPort * m_inLength
The cable length input port.
Definition Cable.h:172
ISignalPort * m_inPosB
The position B input port.
Definition Cable.h:176
std::string m_cableName
The identification name of the cable;.
Definition Cable.h:192
void InitialConditionSetup(const double dT, const double *const adCurrentIC, double *const adUpdatedIC, ISimObjectCreator *const creator)
functionality for setting initialconditions based on input port results.
bool HasJacobians() const override
False while an element was in seabed contact at the last OdeFcn (MARE-0391); FhSim then differences t...
double m_inertiaB
The inertia of the end B.
Definition Cable.h:188
int m_IStates
The index to the internal states of the cable.
Definition Cable.h:177
std::mutex m_cableMutex
Definition Cable.h:181
~Cable()
The destructor deletes dynamically allocated memory.
std::unique_ptr< InternalCableWithBottomContact > m_internalCable
The cable calculations; owned (it was never deleted, MARE-0427).
Definition Cable.h:194
void PreOdeFcn(double T, const double *X) override
Applies the Length input and advances the elements' mean tension from the step's start state (MARE-03...
ICommonComputation * m_commonCalc
Definition Cable.h:178
Cable(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
double m_forceB[3]
The force on the end B.
Definition Cable.h:190
int m_numElements
The number of elements to divide the cable into.
Definition Cable.h:184
ISignalPort * m_inVelB
The velocity B input port.
Definition Cable.h:174
void UpdateInertia()
Updates the inertia of the cable according to the changing length.
void UpdateStiffness(const double *const adForceA, const double *const adForceB)
Updates the stiffness of the cable to ensure that this is not too large.
double m_inertiaA
The inertia of the end A.
Definition Cable.h:187
ISignalPort * m_inPosA
The position A input port.
Definition Cable.h:175
int m_numNodes
The number of nodes of the cable.
Definition Cable.h:185
SCableSpec m_CableSpec
The cable specification.
Definition Cable.h:195
double m_forceA[3]
The force on the end A.
Definition Cable.h:189
ISignalPort * m_inVelA
The velocity A input port.
Definition Cable.h:173
Contains some specifications used for simulating cables.
Definition InternalCable.h:59