Marine systems simulation
|
SimObject representing a continuous bottom ring. More...
#include <CFlexibleBottomRing.h>
Public Member Functions | |
CFlexibleBottomRing (const string &simObjectName, ISimObjectCreator *const 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 RbCable::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. | |
CEnvironment * | m_Environment |
Pointer to DeepSeaGravityWaves, CEnvironment. | |
Protected Attributes inherited from RbCable::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] |
element * | m_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] |
Additional Inherited Members | |
Protected Types inherited from RbCable::CRing | |
typedef Eigen::Matrix< double, 3, 3 > | mat3 |
typedef Eigen::Matrix< double, 3, 1 > | vec3 |
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.
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\>").
Parameter | Default | Comment | |
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] | |
NumNetConnectors | 0 | Number of connection points between net structure and bottom ring [#] | |
NumChainConnectors | 0 | Number of connection points between floating collar and bottom ring [#] | |
CentrePosInit | Initial position of the centre of the ring in x,y,z [m,m,m] |
Tag | Size | Comment |
ForceCables | 3 | Force transferred to the buoy from cables attached to the apex of the cone. |
Tag | Size | Comment |
NetConnectorPos<i> | 3 | Position of the net connection point referred to by <i>. |
NetConnectorVel<i> | 3 | Velocity of the net connection point referred to by <i>. |
ChainConnectorPos<i> | 3 | Position of the chain connection point referred to by <i>. |
ChainConnectorVel<i> | 3 | Velocity of the chain connection point referred to by <i>. |
Tag | Size | Comment |
NetForce<i> | 3 | Force input to ring at net connection point referred to by <i>. |
ChainForce<i> | 3 | Force input to ring at chain connection point referred to by <i>. |
Netcage::CFlexibleBottomRing::CFlexibleBottomRing | ( | const string & | simObjectName, |
ISimObjectCreator *const | 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.
[in] | simObjectName | -> The name of the simobject |
[in] | creator | -> Retrieve parameters. Register states, ports and shared resources |
|
virtual |
[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 RbCable::CRing.
const double * Netcage::CFlexibleBottomRing::outChainConnectorPos | ( | const double | T, |
const double *const | X, | ||
const int | index | ||
) |
See PortDefs.h
[in] | T | -> Current simulation time |
[in] | X | -> Current simulation state |
[in] | index | -> Index of desired chain connection point position |
const double * Netcage::CFlexibleBottomRing::outChainConnectorVel | ( | const double | T, |
const double *const | X, | ||
const int | index | ||
) |
See PortDefs.h
[in] | T | -> Current simulation time |
[in] | X | -> Current simulation state |
[in] | index | -> Index of desired chain connection point velocity |
const double * Netcage::CFlexibleBottomRing::outNetConnectorPos | ( | const double | T, |
const double *const | X, | ||
const int | index | ||
) |
See PortDefs.h
[in] | T | -> Current simulation time |
[in] | X | -> Current simulation state |
[in] | index | -> Index of desired net connection point position |
const double * Netcage::CFlexibleBottomRing::outNetConnectorVel | ( | const double | T, |
const double *const | X, | ||
const int | index | ||
) |
See PortDefs.h
[in] | T | -> Current simulation time |
[in] | X | -> Current simulation state |
[in] | index | -> Index of desired net connection point velocity |