223#include "cable/subroutines/InternalCableWithBottomContact.h"
225#include "sfh/timers/StopWatch.h"
227#include <fhsim/simobject/SimObject.h>
228#include <fhsim_environment/EnvironmentProvider.h>
229#include <fhsim_environment/SeafloorForcesInterface.h>
235#ifdef FH_VISUALIZATION
236# ifdef USE_BILLBOARD_LABELS
237# include "CMovableText.h"
256 virtual void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
259 bool HasJacobians()
const override;
261 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
262 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
263 void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator);
264 void InitialConditionSetup(
const double dT,
const double*
const adCurrentIC,
double*
const adUpdatedIC, ISimObjectCreator*
const creator);
265#ifdef FH_VISUALIZATION
267 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
270 void RenderUpdate(
const double dT,
const double*
const adX);
289 void CreateStates(ISimObjectCreator* creator);
290 void CalcOutput(
const double dT,
const double*
const adX)
const;
298 void OutputExternalConnForces(
double dT,
const double* adX);
299 void GetPosAndVelPointer(
302 const double*
const adX,
303 const double**
const padPos,
304 const double**
const padVel)
const;
306 const double* GetPosPointer(
309 const double*
const adX)
const;
314 virtual void CreateDataStructures();
315 virtual void CreateInputports(ISimObjectCreator* creator);
316 virtual void CreateOutputports(ISimObjectCreator* creator);
320 void CheckNodeNumber(
int nodeNumber, std::string nodeDescription, ISimObjectCreator* creator);
326 const double* ExternalForce(
const double dT,
const double*
const adX,
int i);
327 const double* ExternalTension(
const double dT,
const double*
const adX,
int i);
328 const double* SectionLength(
const double dT,
const double*
const adX,
int i);
388 double* m_externalTensions;
391 const double* m_padVelWater;
392 environment::EnvironmentProvider* m_environment;
393 environment::SeafloorForcesInterface* m_seafloor;
395#ifdef FH_VISUALIZATION
396# ifdef USE_BILLBOARD_LABELS
397 Ogre::SceneNode** m_renderNode;
398 Ogre::CMovableText** m_bBTxt;
405 void ReadFile(ISimObjectCreator* creator,
const SectionFactory& makeSection);
Definition CableBranched.h:243
virtual void PrepareSections(double, const double *) const
Definition CableBranched.h:297
double m_drawScale
The scale for which to draw the cable diameter.
Definition CableBranched.h:387
InternalCable ** m_cableSections
An array holding the cable sections.
Definition CableBranched.h:389
int * m_iStateVel
An array of indices to the node velocity states.
Definition CableBranched.h:330
CableBranched(std::string simObjectName, ISimObjectCreator *creator, const SectionFactory &makeSection)
A subclass's sections: reads the file as Cable/Branched does and makes each section with makeSection.
double * m_relaxedLength
The relaxed length of the cable.
Definition CableBranched.h:362
CableBranched(std::string simObjectName, ISimObjectCreator *creator)
Cable/Branched: reads the file and makes every section an InternalCableWithBottomContact.
int * m_iStatePos
An array of indices to the node position states.
Definition CableBranched.h:329
int m_cableFaces
The number of faces of the cable visuaization.
Definition CableBranched.h:348
double m_bottomContactDiameter
BottomContactDiameter of the General section: the sphere of each main node in the seabed contact [m].
Definition CableBranched.h:365
void PreOdeFcn(double T, const double *X) override
Applies the Length inputs and advances the sections' mean tension from the step's start state (MARE-0...
int m_numExternalConn
The number of external connections.
Definition CableBranched.h:346
void OdeJacobian(double T, const double *X, double *J, int nStates) override
Writes nothing while HasJacobians() is false (FhSim's Jacobian checker, E12-Q3).
ISignalPort ** m_inPos
The position input ports.
Definition CableBranched.h:323
int m_iStateBase
Global index of this SimObject's first state, set in CreateStates().
Definition CableBranched.h:332
virtual void AddBottomForces(double dT, const double *const adX) const
Adds the bottom forces to the main nodes, and marks the state (MarkForceOutsideJacobian) if any of th...
double * m_dE
The stiffness of the cable material.
Definition CableBranched.h:368
double * m_density
The density of the cable material.
Definition CableBranched.h:367
int m_numNodesCalc
The number of nodes of the cable between the cable elements.
Definition CableBranched.h:343
double * m_stiffness
The linear stiffness of the cable.
Definition CableBranched.h:361
int * m_nodeConnections
The nodes connected to each cable section.
Definition CableBranched.h:347
double m_eAdaptationPeriod
The time constant of the adaptation of the mean tension.
Definition CableBranched.h:357
double * m_diameter
The diameter of the cable.
Definition CableBranched.h:369
double m_maxLengthChangeSpeed
The maximum speed of the cable length change.
Definition CableBranched.h:364
std::function< std::unique_ptr< InternalCable >(ISimObjectCreator *creator, const SCableSpec &spec)> SectionFactory
Definition CableBranched.h:248
double * m_lengths
The lengths of the cable elements.
Definition CableBranched.h:384
double * m_outLengths
As m_lengths, as CalcOutput found it for the Length ports.
Definition CableBranched.h:385
~CableBranched()
The destructor deletes dynamically allocated memory.
int LocalIndex(int globalStateIndex) const
Definition CableBranched.h:341
double m_stepSafetyFactor
The safety factor when calculating the Young modulus of the element.
Definition CableBranched.h:356
void UpdateSectionLength(int element, double dT, const double *adX) const
Reads the Length input of a cable section and applies it to the section (MARE-0037).
std::mutex m_sectionMutex
Definition CableBranched.h:381
double m_maxStep
The maximum steplength of the simulation.
Definition CableBranched.h:359
double * m_maxTension
The maximum tension in the cable.
Definition CableBranched.h:370
bool m_forceOutsideJacobian
Whether the last OdeFcn state had a force OdeJacobian does not model: bottom contact (FISH-0086) or a...
Definition CableBranched.h:333
int m_numCableSections
The number of cable sections in the branched cable, where each section may be comprised of one or mor...
Definition CableBranched.h:344
double * m_dampingRatio
The damping ratio to specify the internal damping.
Definition CableBranched.h:366
virtual void AddJunctionNodeForce(const double[3], const double[3], double[3]) const
Definition CableBranched.h:283
double * m_nodeForce
The force on the calculation nodes belonging to this simObject, as OdeFcn found it.
Definition CableBranched.h:374
double m_numericalDamping
The numerical damping of the cable.
Definition CableBranched.h:358
double * m_outNodeForce
As m_nodeForce, as CalcOutput found it for the Force and Tension ports.
Definition CableBranched.h:375
int m_numElements
The number of elements to divide the cable into.
Definition CableBranched.h:342
int * m_iStateCable
An array of indices to the cable sections states.
Definition CableBranched.h:331
double * m_meanTension
The mean tension of the cable.
Definition CableBranched.h:360
ISignalPort ** m_inLength
The cable sections length port.
Definition CableBranched.h:324
double * m_outNodeInertia
As m_nodeInertia, as CalcOutput found it.
Definition CableBranched.h:376
int m_numNodesGlobal
The number of nodes of the branched cable used for conecting the internal cable sections.
Definition CableBranched.h:345
double * m_nodeInertia
The inertia of the calculation nodes belonging to this simObject.
Definition CableBranched.h:371
ICommonComputation * m_commonCalc
Calculations necessary for more than one output port.
Definition CableBranched.h:325
std::string m_materialName
The material name of the cable;.
Definition CableBranched.h:386
double * m_relaxedLength_d
The desired relaxed length of the cable.
Definition CableBranched.h:363
ISignalPort ** m_inVel
The velocity input port s.
Definition CableBranched.h:322
void MarkForceOutsideJacobian() const
Definition CableBranched.h:287
void CheckNodeNumber(int nodeNumber, std::string nodeDescription, ISimObjectCreator *creator)
Checks to see if a specified nodenumber is ok.
Definition InternalCable.h:191
Contains some specifications used for simulating cables.
Definition InternalCable.h:36