21 #ifndef _FLEXIBLE_BODY_H_
22 #define _FLEXIBLE_BODY_H_
24 #include <mbsimFlexibleBody/node_frame.h>
26 #include "mbsim/body.h"
27 #include "mbsim/frame.h"
30 class DiscretizationInterface;
31 class ContourPointData;
34 namespace MBSimFlexibleBody {
36 const MBXMLUtils::NamespaceURI MBSIMFLEX(
"http://www.mbsim-env.de/MBSimFlexibleBody");
67 virtual void updatedq(
double t,
double dt) {
qd = u*dt; }
68 virtual void updateqd(
double t) {
qd = u; }
69 virtual void updateh(
double t,
int k=0);
70 virtual void updateM(
double t,
int k=0);
71 virtual void updatedhdz(
double t);
72 virtual void updateStateDependentVariables(
double t);
73 virtual void updateJacobians(
double t,
int k=0);
76 virtual void plot(
double t,
double dt=1);
77 virtual std::string getType()
const {
return "FlexibleBody"; }
78 virtual void initializeUsingXML(xercesc::DOMElement *element);
83 virtual double computeKineticEnergy();
84 virtual double computePotentialEnergy();
86 virtual void setq0(
fmatvec::Vec q0_) {
if(q0_.size()) MBSim::Body::setInitialGeneralizedPosition(q0_);
q<<
q0; }
87 virtual void setu0(
fmatvec::Vec u0_) {
if(u0_.size()) MBSim::Body::setInitialGeneralizedVelocity(u0_); u<<u0; }
132 THROW_MBSIMERROR(
"updateKinematicsAtNode(): Not implemented for " + getType());
168 void addFrame(
const std::string &name,
const int &
id);
191 virtual void exportPositionVelocity(
const std::string & filenamePos,
const std::string & filenameVel = std::string(),
const int & deg = 3,
const bool &writePsFile =
false){
throw MBSim::MBSimError(
"exportPositionVelocity(const std::string& filenamePos, const std::string& filenameVel, const int& deg, const bool& writePsFile) is not implemented for " + this->getType()) ;}
198 virtual void importPositionVelocity(
const std::string& filenamePos,
const std::string& filenameVel = std::string()){
throw MBSim::MBSimError(
"importPositionVelocity(const std::string& filenamePos, const std::string& filenameVel) is not implemented for " + this->getType()) ;}
262 virtual std::string getType()
const {
return "FlexibleBodyContinuum"; }
265 void setContourNodes(
const std::vector<AT> nodes) {
userContourNodes = nodes; }
273 void addFrame(
const std::string &name,
const AT& alpha) {
287 void setNodeOffset(
const AT nodeOffset_){
nodeOffset = nodeOffset_;}
288 AT getNodeOffset()
const {
return nodeOffset;}
virtual void BuildElements()=0
references finite element coordinates to assembled coordinates
upmost class for flexible body implementation
Definition: flexible_body.h:53
double d_massproportional
damping factor for mass proportion, see BodyFlexible::setMassProportionalDamping() ...
Definition: flexible_body.h:219
FlexibleBody(const std::string &name)
constructor
Definition: flexible_body.cc:44
AT nodeOffset
offset of the ROTNODE from the TRANSNODE
Definition: flexible_body.h:299
virtual void GlobalMatrixContribution(int CurrentElement, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat)=0
insert 'local' information in global matrices
std::vector< MBSim::FixedRelativeFrame * > fixedRelativeFrames
list of all contour frames
Definition: flexible_body.h:238
std::vector< MBSim::DiscretizationInterface * > discretization
stl-vector of discretizations/finite elements
Definition: flexible_body.h:204
std::vector< MBSim::ContourPointData > S_Frame
vector of contour parameters each describing a frame
Definition: flexible_body.h:224
virtual void importPositionVelocity(const std::string &filenamePos, const std::string &filenameVel=std::string())
imports the interpolated position and optional the velocity files (created with exportPositionVelocit...
Definition: flexible_body.h:198
virtual ~FlexibleBody()
destructor
Definition: flexible_body.cc:49
flexible body entirely described within MBSim holding all informations about continuum approximations...
Definition: flexible_body.h:253
void setMassProportionalDamping(const double d_)
set mass proportional damping
Definition: flexible_body.h:149
std::vector< fmatvec::Vec > uElement
stl-vector of finite element wise velocities
Definition: flexible_body.h:214
void addFrame(MBSim::Frame *frame, const AT &alpha)
Definition: flexible_body.h:282
std::vector< fmatvec::Vec > qElement
stl-vector of finite element wise positions
Definition: flexible_body.h:209
void addFrame(const std::string &name, const MBSim::ContourPointData &S_)
std::vector< AT > userContourNodes
grid for contact point detection
Definition: flexible_body.h:294
std::vector< Frame * > frame
virtual void updateKinematicsForFrame(MBSim::ContourPointData &data, MBSim::Frame::Frame::Feature ff, MBSim::Frame *frame=0)=0
cartesian kinematic for contour or external frame (normal, tangent, binormal) is set by implementatio...
std::vector< NodeFrame * > nodeFrames
list of all Node-Frames
Definition: flexible_body.h:243
virtual void GlobalVectorContribution(int CurrentElement, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)=0
insert 'local' information in global vectors
virtual void updateJacobiansForFrame(MBSim::ContourPointData &data, MBSim::Frame *frame=0)=0
Jacobians and gyroscopes for contour or external frame are set by implementation class.
virtual void updateKinematicsAtNode(NodeFrame *frame, MBSim::Frame::Feature ff)
cartesian kinematic on a node
Definition: flexible_body.h:131
void addFrame(const std::string &name, const AT &alpha)
Definition: flexible_body.h:273
cartesian frame on nodes of flexible bodies
Definition: node_frame.h:31
virtual void exportPositionVelocity(const std::string &filenamePos, const std::string &filenameVel=std::string(), const int °=3, const bool &writePsFile=false)
interpolates the position and optional the velocity coordinates of the flexible body with Nurbs-packa...
Definition: flexible_body.h:191