mbsimflexiblebody  4.0.0
MBSim Flexible Body Module
MBSimFlexibleBody::FlexibleBody Class Referenceabstract

upmost class for flexible body implementation More...

#include <flexible_body.h>

Inheritance diagram for MBSimFlexibleBody::FlexibleBody:
[legend]

Public Member Functions

 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 ()
 
virtual double computePotentialEnergy ()
 
void setFrameOfReference (MBSim::Frame *frame) override
 
virtual void setq0 (const fmatvec::Vec &q0_)
 
virtual void setu0 (const fmatvec::Vec &u0_)
 
virtual void BuildElements ()=0
 references finite element coordinates to assembled coordinates More...
 
const fmatvec::Vec & getqElement (int i)
 
const fmatvec::Vec & getuElement (int i)
 
virtual fmatvec::Vec3 getAngles (int i)
 
virtual fmatvec::Vec3 getDerivativeOfAngles (int i)
 
virtual void GlobalVectorContribution (int CurrentElement, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)=0
 insert 'local' information in global vectors More...
 
virtual void GlobalMatrixContribution (int CurrentElement, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat)=0
 insert 'local' information in global matrices More...
 
virtual void GlobalMatrixContribution (int CurrentElement, const fmatvec::SymMat &locMat, fmatvec::SymMat &gloMat)=0
 insert 'local' information in global matrices More...
 
void setMassProportionalDamping (const double d_)
 Jacobians and gyroscopes for contour or external frame are set by implementation class. More...
 
void addFrame (MBSim::ContourFrame *frame)
 
void addFrame (MBSim::FixedRelativeFrame *frame)
 
void addContour (MBSim::Contour *contour) override
 
virtual void exportPositionVelocity (const std::string &filenamePos, const std::string &filenameVel=std::string(), const int &deg=3, const bool &writePsFile=false)
 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...
 
virtual void importPositionVelocity (const std::string &filenamePos, const std::string &filenameVel=std::string())
 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 resetUpToDate () override
 
void addFrame (NodeBasedFrame *frame)
 
- Public Member Functions inherited from MBSimFlexibleBody::NodeBasedBody
 NodeBasedBody (const std::string &name)
 
void resetUpToDate () override
 
virtual void updatePositions (int i)
 
virtual void updateVelocities (int i)
 
virtual void updateAccelerations (int i)
 
virtual void updateJacobians (int i, int j=0)
 
virtual void updateGyroscopicAccelerations (int i)
 
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 plot () override
 
void setDynamicSystemSolver (DynamicSystemSolver *sys) override
 
void init (InitStage stage, const InitConfigSet &config) override
 
void createPlotGroup () override
 
virtual ContourgetContour (const std::string &name, bool check=true) const
 
virtual FramegetFrame (const std::string &name, bool check=true) const
 
virtual FramegetFrameOfReference ()
 
virtual const FramegetFrameOfReference () const
 
virtual void setFrameOfReference (Frame *frame)
 
int frameIndex (const Frame *frame_) const
 
int contourIndex (const Contour *contour_) const
 
ElementgetChildByContainerAndName (const std::string &container, const std::string &name) const override
 
virtual void addFrame (Frame *frame)
 
virtual void addContour (Contour *contour)
 
- Public Member Functions inherited from MBSim::Object
 Object (const std::string &name)
 
void plot () override
 
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 updateLLM ()
 
virtual void setUpInverseKinetics ()
 
void createPlotGroup () override
 
- Public Member Functions inherited from MBSim::Element
 Element (const std::string &name)
 
virtual void setDynamicSystemSolver (DynamicSystemSolver *sys)
 
virtual void plot ()
 
virtual void plotAtSpecialEvent ()
 
const std::string & getName () const
 
void setName (const std::string &str)
 
DynamicSystemSolvergetDynamicSystemSolver ()
 
virtual void init (InitStage stage, const InitConfigSet &config=InitConfigSet())
 
virtual void createPlotGroup ()
 
H5::GroupBasegetPlotGroup ()
 
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, PlotAttributeStorage storage=PlotAttributeStorage::attribute)
 
T * getByPath (const std::string &path, bool initialCaller=true) const
 
std::string getPath (const Element *relTo=nullptr, std::string sep="/") const
 
virtual ElementgetChildByContainerAndName (const std::string &container, const std::string &name) const
 
std::vector< Element * > getDependencies () const
 
int computeLevel ()
 

Protected Attributes

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
 
FrameR
 
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
 
DynamicSystemSolverds
 
H5::VectorSerie< double > * plotVectorSerie
 
std::vector< double > plotVector
 
std::vector< std::string > plotColumns
 
H5::GroupBaseplotGroup
 
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

upmost class for flexible body implementation

Author
Roland Zander
Thorsten Schindler
Date
2009-03-24 changes for new MBSim (Thorsten Schindler)
2009-03-25 conflicts solved (Thorsten Schindler)
2009-04-05 changed to non-template definition (Schindler / Zander)
2009-04-20 frame concept (Thorsten Schindler)
2009-06-14 OpenMP (Thorsten Schindler)
2009-07-16 splitted link / object right hand side (Thorsten Schindler)
2009-07-27 implicit integration (Thorsten Schindler)
2010-06-20 revision of doxygen comments: add parameter names (Roland Zander)
Todo:

OpenMP only static scheduling with intelligent reordering of vectors by dynamic test runs TODO

mass proportional damping should be distributed on discretization and is not at the correct place (dependence on M) TODO

Constructor & Destructor Documentation

◆ FlexibleBody()

MBSimFlexibleBody::FlexibleBody::FlexibleBody ( const std::string &  name)

constructor

Parameters
nameof body

Member Function Documentation

◆ addContour()

void MBSimFlexibleBody::FlexibleBody::addContour ( MBSim::Contour contour)
overridevirtual

Reimplemented from MBSim::Body.

◆ addFrame() [1/2]

void MBSimFlexibleBody::FlexibleBody::addFrame ( MBSim::FixedRelativeFrame frame)
Parameters
fixedrelative frame that should be added

◆ addFrame() [2/2]

void MBSimFlexibleBody::NodeBasedBody::addFrame ( NodeBasedFrame frame)
Parameters
nodeframe

◆ BuildElements()

◆ computePotentialEnergy()

double MBSimFlexibleBody::FlexibleBody::computePotentialEnergy ( )
virtual

◆ exportPositionVelocity()

virtual void MBSimFlexibleBody::FlexibleBody::exportPositionVelocity ( const std::string &  filenamePos,
const std::string &  filenameVel = std::string(),
const int &  deg = 3,
const bool &  writePsFile = false 
)
inlinevirtual

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
filenamePosName of the exported position curve file
filenameVelName of the exported velocity curve file
degDegree of Nurbs interpolation
writePsFileA Postscript-file of the curve profile is created

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

Reimplemented in MBSimFlexibleBody::FlexibleBody1s21Cosserat, MBSimFlexibleBody::FlexibleBody1s21RCM, MBSimFlexibleBody::FlexibleBody1s33Cosserat, MBSimFlexibleBody::FlexibleBody1s33RCM, and MBSimFlexibleBody::FlexibleBody1sCosserat.

◆ GlobalMatrixContribution() [1/2]

◆ GlobalMatrixContribution() [2/2]

virtual void MBSimFlexibleBody::FlexibleBody::GlobalMatrixContribution ( int  CurrentElement,
const fmatvec::SymMat &  locMat,
fmatvec::SymMat &  gloMat 
)
pure virtual

◆ GlobalVectorContribution()

◆ importPositionVelocity()

virtual void MBSimFlexibleBody::FlexibleBody::importPositionVelocity ( const std::string &  filenamePos,
const std::string &  filenameVel = std::string() 
)
inlinevirtual

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
filenamePosName of the imported position curve file
filenameVelName of the imported velocity curve file

Reimplemented in MBSimFlexibleBody::FlexibleBody1s21Cosserat, MBSimFlexibleBody::FlexibleBody1s21RCM, MBSimFlexibleBody::FlexibleBody1s33Cosserat, MBSimFlexibleBody::FlexibleBody1s33RCM, and MBSimFlexibleBody::FlexibleBody1sCosserat.

◆ setFrameOfReference()

void MBSimFlexibleBody::FlexibleBody::setFrameOfReference ( MBSim::Frame frame)
overridevirtual

Reimplemented from MBSim::Body.

◆ setMassProportionalDamping()

void MBSimFlexibleBody::FlexibleBody::setMassProportionalDamping ( const double  d_)
inline

Jacobians and gyroscopes for contour or external frame are set by implementation class.

       \brief cartesian kinematic on a node
      &zwj;/

virtual void updateKinematicsAtNode(NodeFrame *frame, MBSim::Frame::Feature ff) { throwError("updateKinematicsAtNode(): Not implemented for " + typid(*this).name()); //TODO: make that interface prettier }

/‍**

Parameters
datacontour parameter
frameoptional external frame, otherwise contour parameters are changed ‍/ virtual void updateJacobiansForFrame(MBSim::ContourPointData &data, MBSim::Frame *frame=0) = 0; /‍***************************************************‍/
  /* GETTER / SETTER 

damping matrix computation, updated with changes in mass matrix \(\vM\): \(\vh_d=-d_{pm}\vM\vu\)

set mass proportional damping

Parameters
d_coefficient \(d_{pm}\)

Member Data Documentation

◆ updEle

bool MBSimFlexibleBody::FlexibleBody::updEle
protected

vector of contour parameters each describing a frame

list of all contour frames

Todo:
: actually continous frames should be added to a contour and not to the body?!

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