Marine systems simulation
System::CFlexibleBottomRing Class Reference

SimObject representing a continuous bottom ring. More...

#include <CFlexibleBottomRing.h>

+ Inheritance diagram for System::CFlexibleBottomRing:
+ Collaboration diagram for System::CFlexibleBottomRing:

Public Member Functions

 CFlexibleBottomRing (string simobjectname, ISimObjectCreator *creator)
 Reads parameters, registers states, input/output ports and shared resources. More...
 
virtual void FinalSetup (const double T, const double *const X, ISimObjectCreator *const pCreator)
 
void GetExternalForces (const double T, const double *const X, double *m_extlForce, int index)
 Returns the external forces at indexed element. More...
 
const double * outNetConnectorPos (const double T, const double *const X, const int index)
 Output port. Returns the position of indexed net connection point. More...
 
const double * outNetConnectorVel (const double T, const double *const X, const int index)
 Output port. Returns the velocity of indexed net connection point. More...
 
const double * outChainConnectorPos (const double T, const double *const X, const int index)
 Output port. Returns the position of indexed chain connection point. More...
 
const double * outChainConnectorVel (const double T, const double *const X, const int index)
 Output port. Returns the velocity of indexed chain connection point. More...
 
- Public Member Functions inherited from System::CRing
 CRing (const string &simObjectName, ISimObjectCreator *const creator)
 reads parameters, registers states, output and intput ports.
 
void OdeFcn (const double T, const double *const X, double *const XDot, const bool bIsMajorTimeStep)
 
void InitialConditionSetup (const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
 
virtual void GetExternalForces (const double T, const double *const X, double *m_extlForce, int index)
 get the external forces at element 'index'. Should be overridden by inheriting classes to get forces from their specific connectors More...
 
void calculations (const double T, const double *const X)
 
virtual const double * outConnectorPos (const double T, const double *const X, const int index)
 
virtual const double * outConnectorVel (const double T, const double *const X, const int index)
 

Protected Attributes

int m_numNetConnectors
 number of connectors to the net structure
 
int m_numChainConnectors
 number of connectors to the bottom ring chains
 
int m_ElementsPerNetConnector
 number of elements between net connector positions (must be an int; check perfomed in constructor)
 
int m_ElementsPerChainConnector
 number of elements between chain connector positions (must be an int; check perfomed in constructor)
 
double m_Cd_t
 Drag coefficient. Tangential drag.
 
double m_Cd_n
 Drag coefficient. Normal drag.
 
double m_Cm_diff
 Added mass coefficient for diffraction force.
 
ISignalPort ** m_aIINetForce
 Array of indices to net connector forces.
 
ISignalPort ** m_aIIChainForce
 Array of indices to chain connector forces.
 
double ** m_aadNetConnectorPos
 Local array for storing output positions.
 
double ** m_aadNetConnectorVel
 Local array for storing output velocities.
 
double ** m_aadChainConnectorPos
 Local array for storing output positions.
 
double ** m_aadChainConnectorVel
 Local array for storing output velocities.
 
CEnvironmentm_Environment
 Pointer to DeepSeaGravityWaves, CEnvironment.
 
- Protected Attributes inherited from System::CRing
int m_numElements
 
double m_totalLength
 
double m_radius
 
double m_weight
 
double m_length
 
double m_mass
 
double m_Ixy
 
double m_Iz
 
double m_C_isAddMassHack
 
double m_AddMassHack
 
double m_alphaN
 
double m_betaN
 
double m_epsilonN
 
double m_alphaM
 
double m_betaM
 
double m_epsilonM
 
double m_alphaT
 
double m_betaT
 
double m_epsilonT
 
double m_centrePosInit [3]
 Parameter for describing the initial position of the centre of the ring (not an IC since there is no corresponding state)
 
double m_rho
 
double m_surfacePosZ
 
double m_rhoWater
 
double m_Ct
 
double m_Cn
 
double m_bouyFactor
 
bool m_additionalConnectors
 flag for additional connectors along cable
 
int m_numConnectors
 number of additional connectors, if any
 
int m_numInputsPerConnector
 number of force inputs per connector position (used for multiple attachments at same point)
 
int m_ElementsPerConnector
 number of elements between connectors
 
ISignalPort ** m_aIIForce
 Array of indices to connector forces in input vector.
 
double m_extlForce [3]
 Array for holding current value of external force at a given node.
 
double ** m_aadConnectorPos
 Local array for storing output positions.
 
double ** m_aadConnectorVel
 Local array for storing output velocities.
 
double m_bending_epsilon [3]
 
elementm_el
 
ICommonComputation * m_calcDynamics
 
Eigen::Matrix< double, Eigen::Dynamic, 1 > m_lambda
 
Eigen::Matrix< double, Eigen::Dynamic, 1 > m_F_MDotV
 
double m_forceA [3]
 
double m_forceB [3]
 
int m_shape
 
Eigen::Matrix< double, Eigen::Dynamic, 1 > m_shapeMat
 0: circular; 1: square
 

Additional Inherited Members

- Protected Types inherited from System::CRing
typedef Eigen::Matrix< double, 3, 3 > mat3
 
typedef Eigen::Matrix< double, 3, 1 > vec3
 

Detailed Description

Author
Brad Scofield
User Documentation:

Class modelling a flexible bottom ring using a cable model with bending/torsional stiffness. The cable is discretized as "6 degrees of freedom" rigid cylinders which are connected with axial and angular constraints. For high bending stiffness the cable will work as a truss/beam.

The constraints are regularized with a compliant variation of the Baumgarte method. In effect the cylinders can be thought of as connected with axial and angular springs like a traditional spring-mass-damper model, but without some of the numerical instability problems associated with high stiffness cables.

The behavior of the springs are defined with three parameters; \(\alpha\), \(\beta\) and \(\epsilon\). \(\beta\) controls the rate at which the constraint seeks towards equilibrium, \(\alpha\) is the damping factor, and \(\epsilon\) is the constraint compliance.

The effective spring stiffness is a combination of \(\beta\), \(\epsilon\), and the mathematical formulation of the constraint function.

For the axial spring the effective restoring force is: \( F = \beta^2/\epsilon*dL \) where \(dL\) is the distance between two successive cylinder endpoints.

For the angular spring the effective restoring moment is: \(M = \beta^2/\epsilon*sin(\theta/2)\) where theta is the difference in orientation angle between two successive cylinders. Note that the bending and the torsional stiffness can be set independently.

\(\alpha\) less than \(\beta\) means the system is underdamped, \(\alpha\) equal to \(\beta\) means critical damping, and \(\alpha\) larger than Beta means overdamped. The effective damping scales with \(\alpha/\epsilon\)

A fairly robust technique for adjusting the parameters when using an explicit integration scheme is as follows:

  • Choose a time step \(dt\) small enough to resolve the main macroscopic dynamics of the cable. The exact meaning of this is not precisely defined, but the important part is that the axial wave propagation speed which is responsible for the main numerical problems in spring-mass cable modeling need -not- be accounted for.

  • Set BetaN to \(1/dt\) or smaller, and then EpsilonN to the value which gives the desired global stiffness. A formula for determining effective Youngs-modulus is: \(E = \beta^2*L/(\epsilon*N*A)\), where \(L\) is the total cable length, \(N\) is the number of discrete cylinders in the cable, and \(A\) is the material cross-sectional area. For bending and torsional stiffness the expression is the same except \(A\) is replaced with \(2*I\) and \(2*J\) respectively.

  • Higher axial loads gives higher propagation rate of transversal waves. A smaller EpsilonM-value will suppress numerical instabilities from this cause. If the simulation crashes, reduce EpsilonM. As long as the BetaM-value is adjusted simultaneously, the total bending stiffness can be kept the same. If however BetaM becomes to small, the rate at which the cable 'self-aligns' will become too small, and the cable will tend to 'keep its shape'. In this case one may either accept this slightly non-physical consequence, keep the bending stiffness higher than the actual physical value, or reduce the time step and/or the element count.

  • Torsional parameters and \(\alpha\) values have only minor effect on stability, and can usually be set to taste. No \(\alpha\) or \(\beta\) value should however be set larger than \(1/dt\).

The bottom ring may be connected to a net structure through and a floating collar through connection points ("NetConnector" for net, "ChainConnector" for floating collar). Each of these connection points are assigned input ports ("NetForce\<i\>" or "ChainForce\<i\>") that take in forces in N, and output ports ("NetConnectorPos\<i\>/NetConnectorVel\<i\>" or "ChainConnectorPos\<i\>/ChainConnectorVel\<i\>").

Parameters
ParameterDefaultComment
Length-total circumference of the ring [m]
numElements-number of rigid elements in the ring [#]
AlphaN-axial damping factor [s^-1]
BetaN-axial restoring factor [s^-1]
EpsilonN-axial compliance factor [kg^-1]
AlphaM-bending damping factor [s^-1]
BetaM-bending restoring factor [s^-1]
EpsilonM-bending compliance factor [kg^-1*m^-2]
AlphaT-torsional damping factor [s^-1]
BetaT-torsional restoring factor [s^-1]
EpsilonT-torsional compliance factor [kg^-1*m^-2]
Weight-weight of the ring [kg/m]
Radius-radius of the tube forming the bottom ring [m]
NumNetConnectors0Number of connection points between net structure and bottom ring [#]
NumChainConnectors0Number of connection points between floating collar and bottom ring [#]
CentrePosInitInitial position of the centre of the ring in x,y,z [m,m,m]
Input ports
TagSizeComment
ForceCables3Force transferred to the buoy from cables attached to the apex of the cone.
Output ports
TagSizeComment
NetConnectorPos<i>3Position of the net connection point referred to by <i>.
NetConnectorVel<i>3Velocity of the net connection point referred to by <i>.
ChainConnectorPos<i>3Position of the chain connection point referred to by <i>.
ChainConnectorVel<i>3

Velocity of the chain connection point referred to by <i>.

States
TagSizeComment
NetForce<i>3Force input to ring at net connection point referred to by <i>.
ChainForce<i>3Force input to ring at chain connection point referred to by <i>.
Revision history:
12.08.2011 BS: Initial version

Constructor & Destructor Documentation

◆ CFlexibleBottomRing()

System::CFlexibleBottomRing::CFlexibleBottomRing ( string  simobjectname,
ISimObjectCreator *  creator 
)

The constructor performs all initial setup for a flexible bottom ring simobject. Reading in parameters, setting up communication interface i.e. output ports, input ports, and states, plus additional 'one time only' resource setup.

Parameters
[in]simobjectname-> The name of the simobject
[in]creator-> Retrieve parameters. Register states, ports and shared resources

Member Function Documentation

◆ GetExternalForces()

void System::CFlexibleBottomRing::GetExternalForces ( const double  T,
const double *const  X,
double *  m_extlForce,
int  index 
)
virtual
Parameters
[in]T-> Current simulation time
[in]X-> Current simulation state
[out]m_extlForce-> External forces at element indexed by "index"
[in]index-> Element for which external forces will be provided

Reimplemented from System::CRing.

◆ outChainConnectorPos()

const double * System::CFlexibleBottomRing::outChainConnectorPos ( const double  T,
const double *const  X,
const int  index 
)

See PortDefs.h

Parameters
[in]T-> Current simulation time
[in]X-> Current simulation state
[in]index-> Index of desired chain connection point position
Returns
-> Address of position of chain connection point indexed by "index"

◆ outChainConnectorVel()

const double * System::CFlexibleBottomRing::outChainConnectorVel ( const double  T,
const double *const  X,
const int  index 
)

See PortDefs.h

Parameters
[in]T-> Current simulation time
[in]X-> Current simulation state
[in]index-> Index of desired chain connection point velocity
Returns
-> Address of velocity of chain connection point indexed by "index"

◆ outNetConnectorPos()

const double * System::CFlexibleBottomRing::outNetConnectorPos ( const double  T,
const double *const  X,
const int  index 
)

See PortDefs.h

Parameters
[in]T-> Current simulation time
[in]X-> Current simulation state
[in]index-> Index of desired net connection point position
Returns
-> Address of position of net connection point indexed by "index"

◆ outNetConnectorVel()

const double * System::CFlexibleBottomRing::outNetConnectorVel ( const double  T,
const double *const  X,
const int  index 
)

See PortDefs.h

Parameters
[in]T-> Current simulation time
[in]X-> Current simulation state
[in]index-> Index of desired net connection point velocity
Returns
-> Address of velocity of net connection point indexed by "index"

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