mbsimflexiblebody 4.0.0 MBSim Flexible Body Module

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
MBSimFlexibleBody::FlexibleBody1s33Cosserat Class Reference

finite element for spatial beam using Cosserat model More...

`#include <1s_33_cosserat.h>`

Inheritance diagram for MBSimFlexibleBody::FlexibleBody1s33Cosserat:
[legend]

## Public Member Functions

| FlexibleBody1s33Cosserat (const std::string &name, bool openStructure)
| constructor More...
| ~FlexibleBody1s33Cosserat () override
| destructor
void | BuildElements () override
| references finite element coordinates to assembled coordinates
void | GlobalVectorContribution (int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec) override
| insert 'local' information in global vectors More...
void | GlobalMatrixContribution (int n, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat) override
| insert 'local' information in global matrices More...
void | GlobalMatrixContribution (int n, const fmatvec::SymMat &locMat, fmatvec::SymMat &gloMat) override
| insert 'local' information in global matrices More...
void | exportPositionVelocity (const std::string &filenamePos, const std::string &filenameVel=std::string(), const int &deg=3, const bool &writePsFile=false) override
| interpolates the position and optional the velocity coordinates of the flexible body with Nurbs-package and exports the nurbs curve in the specified file More...
void | importPositionVelocity (const std::string &filenamePos, const std::string &filenameVel=std::string()) override
| imports the interpolated position and optional the velocity files (created with exportPositionVelocity) and fits the rigid and flexible coordinate dofs and optional the translatory velocity components of flexible body to the imported nurbs curve More...
void | updatePositions (Frame1s *frame) override
void | updateVelocities (Frame1s *frame) override
void | updateAccelerations (Frame1s *frame) override
void | updateJacobians (Frame1s *frame, int j=0) override
void | updateGyroscopicAccelerations (Frame1s *frame) override
void | updatePositions (int node) override
void | updateVelocities (int node) override
void | updateAccelerations (int node) override
void | updateJacobians (int node, int j=0) override
void | updateGyroscopicAccelerations (int node) override
fmatvec::Vec3 | getAngles (int i) override
fmatvec::Vec3 | getDerivativeOfAngles (int i) override
void | init (InitStage stage, const MBSim::InitConfigSet &config) override
double | computePotentialEnergy () override
void | updateLLM () override
void | setNumberElements (int n) override
void | setMomentsInertia (double I1_, double I2_, double I0_) override
void | setCurlRadius (double R1_, double R2_) override
void | setMaterialDamping (double cEps0D_, double cEps1D_, double cEps2D_) override
int | getNumberOfElementDOF () const override
int | getNumberElements () const override
int | getNumberDOFs () const
fmatvec::Vector< fmatvec::Fixed< 6 >, double > | getPositions (double x)
| compute positions and angle at Lagrangian coordinate in local FE coordinates More...
fmatvec::Vector< fmatvec::Fixed< 6 >, double > | getVelocities (double x)
| compute velocities and differentiated angles at Lagrangian coordinate in local FE coordinates More...
fmatvec::Vec3 | computeAngles (double sGlobal, const fmatvec::Vec &vec)
| compute angles at Lagrangian coordinate in local FE coordinates More...
void | initInfo () override
| initialise beam only for giving information with respect to state, number elements, length, (not for simulation)
void | BuildElementTranslation (const double &sGlobal, double &sLocal, int &currentElementTranslation) override
| detect current finite element (t void setOpenMBVSpineExtrusion(OpenMBV::SpineExtrusion* spineExtrusion) { openMBVSpineExtrusion = spineExtrusion; } OpenMBV::Body* getOpenMBVSpineExtrusion() { return openMBVSpineExtrusion; } More...
Public Member Functions inherited from MBSimFlexibleBody::FlexibleBody1sCosserat
| FlexibleBody1sCosserat (const std::string &name, bool openStructure)
| constructor More...
const fmatvec::Vec & | evalqRotationElement (int i)
const fmatvec::Vec & | evaluRotationElement (int i)
void | updateh (int i=0) override
void | setEGModuls (double E_, double G_)
void | setDensity (double rho_)
void | setCrossSectionalArea (double A_)
virtual void | setMomentsInertia (double I1_)
virtual void | setCurlRadius (double R1_)
virtual void | setMaterialDamping (double cEps0D_, double cEps1D_)
virtual Contour1sNeutralCosserat * | createNeutralPhase (const std::string &contourName="Neutral")
| automatically creates its neutral contour
virtual fmatvec::Mat3xV | transformJacobian (fmatvec::Mat3xV J)
| interface function to transform the Jacobian if the generalized coordinates have been changed More...
virtual int | getqSizeFull () const
Public Member Functions inherited from MBSimFlexibleBody::FlexibleBody1s
| FlexibleBody1s (const std::string &name, bool openStructure)
| constructor: More...
void | init (InitStage stage, const MBSim::InitConfigSet &config) override
void | plot () override
void | setLength (double L_)
double | getLength () const
bool | getOpenStructure () const
void | addFrame (Frame1s *frame)
virtual fmatvec::Vec3 | getPosition (double s)
virtual fmatvec::SqrMat3 | getOrientation (double s)
virtual fmatvec::Vec3 | getAngles (double s)
void | setOpenMBVSpineExtrusion (const std::shared_ptr< OpenMBV::SpineExtrusion > &body)
Public Member Functions inherited from MBSimFlexibleBody::FlexibleBodyContinuum< double >
| FlexibleBodyContinuum (const std::string &name)
| constructor More...
void | setContourNodes (const std::vector< double > nodes)
void | setNodeOffset (const double nodeOffset_)
double | getNodeOffset () const
Public Member Functions inherited from MBSimFlexibleBody::FlexibleBody
| FlexibleBody (const std::string &name)
| constructor More...
| ~FlexibleBody () override
| destructor
void | updateqd () override
void | updateh (int k=0) override
void | updateM () override
void | updatedhdz () override
void | initializeUsingXML (xercesc::DOMElement *element) override
void | init (InitStage stage, const MBSim::InitConfigSet &config) override
virtual double | computeKineticEnergy ()
void | setFrameOfReference (MBSim::Frame *frame) override
virtual void | setq0 (const fmatvec::Vec &q0_)
virtual void | setu0 (const fmatvec::Vec &u0_)
const fmatvec::Vec & | getqElement (int i)
const fmatvec::Vec & | getuElement (int i)
void | setMassProportionalDamping (const double d_)
| cartesian kinematic for contour or external frame (normal, tangent, binormal) is set by implementation class More...
void | addFrame (MBSim::ContourFrame *frame)
void | addFrame (MBSim::FixedRelativeFrame *frame)
void | addContour (MBSim::Contour *contour) override
void | resetUpToDate () override
void | addFrame (NodeBasedFrame *frame)
Public Member Functions inherited from MBSimFlexibleBody::NodeBasedBody
| NodeBasedBody (const std::string &name)
void | resetUpToDate () override
virtual void | updateStresses (int i)
const fmatvec::Vec3 & | evalNodalPosition (int i)
const fmatvec::Vec3 & | evalNodalVelocity (int i)
const fmatvec::Vec3 & | evalNodalAcceleration (int i)
const fmatvec::Mat3xV & | evalNodalJacobianOfTranslation (int i, int j=0)
const fmatvec::Vec3 & | evalNodalGyroscopicAccelerationOfTranslation (int i)
const fmatvec::Vec3 & | evalNodalDisplacement (int i)
const fmatvec::Vector< fmatvec::Fixed< 6 >, double > & | evalNodalStress (int i)
fmatvec::SqrMat3 & | getNodalOrientation (int i, bool check=true)
fmatvec::Vec3 & | getNodalAngularVelocity (int i, bool check=true)
fmatvec::Vec3 & | getNodalAngularAcceleration (int i, bool check=true)
fmatvec::Mat3xV & | getNodalJacobianOfRotation (int i, int j=0, bool check=true)
fmatvec::Vec3 & | getNodalGyroscopicAccelerationOfRotation (int i, bool check=true)
void | addFrame (NodeBasedFrame *frame)
void | init (InitStage stage, const MBSim::InitConfigSet &config) override
int | getNumberOfNodes ()
int | getNodeIndex (int nodeNumber) const
Public Member Functions inherited from MBSim::Body
| Body (const std::string &name)
void | setDynamicSystemSolver (DynamicSystemSolver *sys) override
void | init (InitStage stage, const InitConfigSet &config) override
void | createPlotGroup () override
virtual Contour * | getContour (const std::string &name, bool check=true) const
virtual Frame * | getFrame (const std::string &name, bool check=true) const
virtual Frame * | getFrameOfReference ()
virtual const Frame * | getFrameOfReference () const
int | frameIndex (const Frame *frame_) const
int | contourIndex (const Contour *contour_) const
Element * | getChildByContainerAndName (const std::string &container, const std::string &name) const override
virtual void | addFrame (Frame *frame)
Public Member Functions inherited from MBSim::Object
| Object (const std::string &name)
virtual void | updateqRef (fmatvec::Vec &qRef)
virtual void | updateqdRef (fmatvec::Vec &qdRef)
virtual void | updatedqRef (fmatvec::Vec &dqRef)
virtual void | updateuRef (fmatvec::Vec &uRef)
virtual void | updateuallRef (fmatvec::Vec &uallRef)
virtual void | updateudRef (fmatvec::Vec &udRef)
virtual void | updateduRef (fmatvec::Vec &duRef)
virtual void | updateudallRef (fmatvec::Vec &udallRef)
virtual void | updatehRef (fmatvec::Vec &hRef, int i=0)
virtual void | updatedhdqRef (fmatvec::Mat &dhdqRef, int i=0)
virtual void | updatedhduRef (fmatvec::SqrMat &dhduRef, int i=0)
virtual void | updatedhdtRef (fmatvec::Vec &dhdtRef, int i=0)
virtual void | updaterRef (fmatvec::Vec &ref, int i=0)
virtual void | updaterdtRef (fmatvec::Vec &ref)
virtual void | updateTRef (fmatvec::Mat &ref)
virtual void | updateMRef (fmatvec::SymMat &ref)
virtual void | updateLLMRef (fmatvec::SymMat &ref)
void | init (InitStage stage, const InitConfigSet &config) override
virtual void | initz ()
virtual void | writez (H5::GroupBase *group)
virtual void | readz0 (H5::GroupBase *group)
virtual void | setUpInverseKinetics ()
void | createPlotGroup () override
Public Member Functions inherited from MBSim::Element
| Element (const std::string &name)
virtual void | plotAtSpecialEvent ()
const std::string & | getName () const
void | setName (const std::string &str)
DynamicSystemSolver * | getDynamicSystemSolver ()
H5::GroupBase * | getPlotGroup ()
bool | getPlotFeature (const PlotFeatureEnum &pf)
virtual void | setPlotFeature (const PlotFeatureEnum &pf, bool value)
void | setPlotFeatureForChildren (const PlotFeatureEnum &pf, bool value)
void | setPlotFeatureRecursive (const PlotFeatureEnum &pf, bool value)
void | setPlotAttribute (const std::string &name, const T &value)
T * | getByPath (const std::string &path, bool initialCaller=true) const
std::string | getPath (const Element *relTo=nullptr, std::string sep="/") const
std::vector< Element * > | getDependencies () const
int | computeLevel ()

## Protected Member Functions

| FlexibleBody1s33Cosserat (const FlexibleBody1s33Cosserat &)
FlexibleBody1s33Cosserat & | operator= (const FlexibleBody1s33Cosserat &)
void | initM () override
| initialize translational part of mass matrix and calculate Cholesky decomposition
void | computeBoundaryCondition () override
| compute boundary conditions for rotation grid first and last finite difference rotation beam element refer to values not directly given by dof in open structure they have to be estimated in the following function
void | GlobalVectorContributionRotation (int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec) override
| insert 'local' information in global vectors for rotation grid More...
Protected Member Functions inherited from MBSimFlexibleBody::FlexibleBody1sCosserat
| FlexibleBody1sCosserat (const FlexibleBody1sCosserat &)
FlexibleBody1sCosserat & | operator= (const FlexibleBody1sCosserat &)

## Protected Attributes

bool | JTransInterp
| marker if Jacobians already interpolated
double | I2
| area moments of inertia I0: around torsional axis I1: in t-b-plane I2: in t-n-plane
double | I0
double | R2
| radius of undeformed shape R1: in t-b-plane R2: in t-n-plane
double | cEps2D
| strain damping
Protected Attributes inherited from MBSimFlexibleBody::FlexibleBody1sCosserat
std::vector< DiscretizationInterface * > | rotationDiscretization
| stl-vector of finite elements for rotation grid
std::vector< fmatvec::Vec > | qRotationElement
| stl-vector of finite element positions for rotation grid
std::vector< fmatvec::Vec > | uRotationElement
| stl-vector of finite element wise velocities for rotation grid
CardanPtr | angle
| angle parametrisation
int | Elements
| number of translational elements
int | rotationalElements
| number of rotational elements =Elements (for a closed structure) or =Elements+1 (for an open structure)
double | l0
| length of entire beam and finite elements
double | E
| elastic modules
double | G
double | A
| area of cross-section
double | I1
| area moments of inertia I0: around torsional axis I1: in t-b-plane I2: in t-n-plane
double | rho
| density
double | R1
| radius of undeformed shape R1: in t-b-plane R2: in t-n-plane
double | cEps0D
| strain damping
double | cEps1D
bool | initialised
| initialised FLAG
fmatvec::Vec | bound_ang_start
| boundary conditions for rotation grid first and last finite difference rotation beam element refer to values not directly given by dof in open structure they have to be estimated by the following values calculated in computeBoundaryCondition()
fmatvec::Vec | bound_ang_end
fmatvec::Vec | bound_ang_vel_start
fmatvec::Vec | bound_ang_vel_end
Contour1sNeutralCosserat * | ncc
| contour for the spine extrusion
Protected Attributes inherited from MBSimFlexibleBody::FlexibleBody1s
double | L
| length of beam
bool | openStructure
| flag for open (cantilever beam) or closed (rings) structures
Frame1s | P
Protected Attributes inherited from MBSimFlexibleBody::FlexibleBodyContinuum< double >
std::vector< double > | userContourNodes
| grid for contact point detection
double | nodeOffset
| offset of the ROTNODE from the TRANSNODE
Protected Attributes inherited from MBSimFlexibleBody::FlexibleBody
std::vector< DiscretizationInterface * > | discretization
| stl-vector of discretizations/finite elements
std::vector< fmatvec::Vec > | qElement
| stl-vector of finite element wise positions
std::vector< fmatvec::Vec > | uElement
| stl-vector of finite element wise velocities
double | d_massproportional
| damping factor for mass proportion, see BodyFlexible::setMassProportionalDamping()
bool | updEle
| vector of contour parameters each describing a frame More...
Protected Attributes inherited from MBSimFlexibleBody::NodeBasedBody
std::vector< fmatvec::Vec3 > | WrOP
std::vector< fmatvec::Vec3 > | WvP
std::vector< fmatvec::Vec3 > | Wom
std::vector< fmatvec::Vec3 > | WaP
std::vector< fmatvec::Vec3 > | Wpsi
std::vector< fmatvec::Vec3 > | WjP
std::vector< fmatvec::Vec3 > | WjR
std::vector< fmatvec::Vec3 > | disp
std::vector< fmatvec::SqrMat3 > | AWK
std::vector< fmatvec::Mat3xV > | WJP [2]
std::vector< fmatvec::Mat3xV > | WJR [2]
std::vector< bool > | updNodalPos
std::vector< bool > | updNodalVel
std::vector< bool > | updNodalAcc
std::vector< bool > | updNodalGA
std::vector< bool > | updNodalStress
std::vector< bool > | updNodalJac [2]
std::vector< fmatvec::Vector< fmatvec::Fixed< 6 >, double > > | sigma
int | nn {0}
std::vector< int > | nodeMap
std::vector< int > | nodeNumbers
Protected Attributes inherited from MBSim::Body
std::vector< Frame * > | frame
Frame * | R
fmatvec::Mat3xV | PJT [2]
Protected Attributes inherited from MBSim::Object
int | qSize
int | uSize [2]
int | hSize [2]
int | qInd
fmatvec::Vec | q
fmatvec::Vec | q0
fmatvec::Vec | qd
fmatvec::Vec | h [2]
fmatvec::Mat | dhdq
fmatvec::Mat | T
fmatvec::SymMat | M
fmatvec::SymMat | LLM
Protected Attributes inherited from MBSim::Element
std::string | name
std::string | path
MBXMLUtils::DOMEvalException | domEvalError
DynamicSystemSolver * | ds
H5::VectorSerie< double > * | plotVectorSerie
std::vector< double > | plotVector
std::vector< std::string > | plotColumns
H5::GroupBase * | plotGroup
std::vector< Element * > | dependency
PlotFeatureMap | plotFeature

## Additional Inherited Members

Public Types inherited from MBSim::Element
enum | InitStage
Public Attributes inherited from MBSim::Element
| resolveStringRef
| preInit
| plotting
| unknownStage

## Detailed Description

finite element for spatial beam using Cosserat model

Author
  Thorsten Schindler
  Christian Käsbauer
  Thomas Cebulla

Date
  2011-09-10 initial commit (Thorsten Schindler) \data 2011-10-08 basics derived and included (Thorsten Schindler)
  2011-10-12 rotation grid added (Thorsten Schindler)
  2012-03-15 updateKinematicsForFrame and contact Jacobians (Cebulla / Schindler)
  2012-05-10 added initInfo()-function and Contour1sFlexible for perlchain example (Thomas Cebulla)
  2012-05-25 added export and import position velocity function (Thomas Cebulla)

Todo:

  compute boundary conditions TODO

  check open structure in contact kinematics TODO

Cosserat model based on H. Lang, J. Linn, M. Arnold: Multi-body dynamics simulation of geometrically exact Cosserat rods but with

- Kirchhoff assumption (-> less stiff)
- Cardan parametrisation (-> less problems with condition and drift for quaternion dae system)
- piecewise constant Darboux vector with evaluation according to I. Romero: The interpolation of rotations and its application to finite element models of geometrically exact beams

## Constructor & Destructor Documentation

## ◆ FlexibleBody1s33Cosserat()

MBSimFlexibleBody::FlexibleBody1s33Cosserat::FlexibleBody1s33Cosserat | ( | const std::string & | name,
|  | bool | openStructure
| ) |  |

constructor

Parameters

  name | of body
  bool | to specify open (cantilever) or closed (ring) structure

## Member Function Documentation

## ◆ BuildElementTranslation()

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::BuildElementTranslation | ( | const double & | sGlobal,
|  | double & | sLocal,
|  | int & | currentElementTranslation
| ) |  |

override virtual

detect current finite element (t void setOpenMBVSpineExtrusion(OpenMBV::SpineExtrusion* spineExtrusion) { openMBVSpineExtrusion = spineExtrusion; } OpenMBV::Body* getOpenMBVSpineExtrusion() { return openMBVSpineExtrusion; }

Parameters

  global | parametrisation
  local | parametrisation
  finite | element number

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

## ◆ computeAngles()

Vec3 MBSimFlexibleBody::FlexibleBody1s33Cosserat::computeAngles | ( | double | sGlobal,
|  | const fmatvec::Vec & | vec
| ) |  |

compute angles at Lagrangian coordinate in local FE coordinates

Parameters

  Lagrangian | coordinate
  vector | to be interpolated

## ◆ exportPositionVelocity()

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::exportPositionVelocity | ( | const std::string & | filenamePos,
|  | const std::string & | filenameVel = `std::string()`,
|  | const int & | deg = `3`,
|  | const bool & | writePsFile = `false`
| ) |  |

override virtual

interpolates the position and optional the velocity coordinates of the flexible body with Nurbs-package and exports the nurbs curve in the specified file

Parameters

  filenamePos | Name of the exported position curve file
  filenameVel | Name of the exported velocity curve file
  deg | Degree of Nurbs interpolation
  writePsFile | A Postscript-file of the curve profile is created

Remark: the knot vector is parametrized between [0,L]

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

## ◆ getPositions()

fmatvec::Vector< Fixed< 6 >, double > MBSimFlexibleBody::FlexibleBody1s33Cosserat::getPositions | ( | double | x | ) |

compute positions and angle at Lagrangian coordinate in local FE coordinates

Parameters

  Lagrangian | coordinate

## ◆ getVelocities()

fmatvec::Vector< Fixed< 6 >, double > MBSimFlexibleBody::FlexibleBody1s33Cosserat::getVelocities | ( | double | x | ) |

compute velocities and differentiated angles at Lagrangian coordinate in local FE coordinates

Parameters

  Lagrangian | coordinate

## ◆ GlobalMatrixContribution() [1/2]

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::GlobalMatrixContribution | ( | int | CurrentElement,
|  | const fmatvec::Mat & | locMat,
|  | fmatvec::Mat & | gloMat
| ) |  |

override virtual

insert 'local' information in global matrices

Parameters

  CurrentElement | number of current finite element
  locMat | local matrix
  gloMat | global matrix

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

## ◆ GlobalMatrixContribution() [2/2]

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::GlobalMatrixContribution | ( | int | CurrentElement,
|  | const fmatvec::SymMat & | locMat,
|  | fmatvec::SymMat & | gloMat
| ) |  |

override virtual

insert 'local' information in global matrices

Parameters

  CurrentElement | number of current finite element
  locMat | local matrix
  gloMat | global matrix

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

## ◆ GlobalVectorContribution()

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::GlobalVectorContribution | ( | int | CurrentElement,
|  | const fmatvec::Vec & | locVec,
|  | fmatvec::Vec & | gloVec
| ) |  |

override virtual

insert 'local' information in global vectors

Parameters

  number | of finite element
  local | vector
  global | vector

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

## ◆ GlobalVectorContributionRotation()

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::GlobalVectorContributionRotation | ( | int | n,
|  | const fmatvec::Vec & | locVec,
|  | fmatvec::Vec & | gloVec
| ) |  |

override protected virtual

insert 'local' information in global vectors for rotation grid

Parameters

  number | of finite element
  local | vector
  global | vector

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

## ◆ importPositionVelocity()

void MBSimFlexibleBody::FlexibleBody1s33Cosserat::importPositionVelocity | ( | const std::string & | filenamePos,
|  | const std::string & | filenameVel = `std::string()`
| ) |  |

override virtual

imports the interpolated position and optional the velocity files (created with exportPositionVelocity) and fits the rigid and flexible coordinate dofs and optional the translatory velocity components of flexible body to the imported nurbs curve

Parameters

  filenamePos | Name of the imported position curve file
  filenameVel | Name of the imported velocity curve file

Implements MBSimFlexibleBody::FlexibleBody1sCosserat.

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

- /mbsim-env/mbsim/modules/mbsimFlexibleBody/mbsimFlexibleBody/flexible_body/1s_33_cosserat.h
- /mbsim-env/mbsim/modules/mbsimFlexibleBody/mbsimFlexibleBody/flexible_body/1s_33_cosserat.cc