20 #ifndef _FLEXIBLE_BODY_1S_21_COSSERAT_H_
21 #define _FLEXIBLE_BODY_1S_21_COSSERAT_H_
23 #include <fmatvec/fmatvec.h>
24 #include "mbsimFlexibleBody/flexible_body/flexible_body_1s_cosserat.h"
25 #include "mbsimFlexibleBody/flexible_body.h"
26 #include "mbsimFlexibleBody/pointer.h"
27 #include "mbsimFlexibleBody/contours/flexible_band.h"
28 #include "mbsimFlexibleBody/flexible_body/finite_elements/finite_element_1s_21_cosserat_translation.h"
29 #include "mbsimFlexibleBody/flexible_body/finite_elements/finite_element_1s_21_cosserat_rotation.h"
30 #include <openmbvcppinterface/spineextrusion.h>
32 namespace MBSimFlexibleBody {
76 virtual void exportPositionVelocity(
const std::string & filenamePos,
const std::string & filenameVel = std::string(),
const int & deg = 3,
const bool & writePsFile =
false);
77 virtual void importPositionVelocity(
const std::string & filenamePos,
const std::string & filenameVel = std::string());
80 virtual void updateVelocities(
Frame1s* frame);
81 virtual void updateAccelerations(
Frame1s* frame);
82 virtual void updateJacobians(
Frame1s* frame,
int j=0);
83 virtual void updateGyroscopicAccelerations(
Frame1s* frame);
85 virtual void updatePositions(
NodeFrame* frame);
86 virtual void updateVelocities(
NodeFrame* frame);
87 virtual void updateAccelerations(
NodeFrame* frame);
88 virtual void updateJacobians(
NodeFrame* frame,
int j=0);
89 virtual void updateGyroscopicAccelerations(
NodeFrame* frame);
95 virtual void init(InitStage stage);
96 virtual double computePotentialEnergy();
97 virtual void updateM();
98 virtual void updateLLM();
103 virtual void updateh(
int i = 0);
106 virtual std::string getType()
const {
return "FlexibleBody1s21Cosserat"; }
110 void setNumberElements(
int n);
112 void setMomentsInertia(
double I1_);
113 void setCurlRadius(
double R1_);
114 void setMaterialDamping(
double cEps0D_,
double cEps1D_);
122 virtual int getNumberOfElementDOF()
const {
126 int getNumberElements()
const {
129 double getLength()
const {
132 virtual int getqSizeFull()
const {
135 bool isOpenStructure()
const {
142 void enablePOD(
const std::string & h5Path,
int reduceMode = 0,
int POMSize = 0);
261 inline void FlexibleBody1s21Cosserat::updateM() {
265 inline void FlexibleBody1s21Cosserat::updateLLM() {
269 inline void FlexibleBody1s21Cosserat::setMomentsInertia(
double I1_) {
273 inline void FlexibleBody1s21Cosserat::setCurlRadius(
double R1_) {
279 inline void FlexibleBody1s21Cosserat::setMaterialDamping(
double cEps0D_,
double cEps1D_) {
284 static_cast<FiniteElement1s21CosseratTranslation*>(
discretization[i])->setMaterialDamping(Elements *
cEps0D, cEps1D);
fmatvec::Vec3 computeAngles(double sGlobal, const fmatvec::Vec &vec)
compute angles at Lagrangian coordinate in local FE coordinates
Definition: flexible_body_1s_21_cosserat.cc:389
std::vector< DiscretizationInterface * > discretization
stl-vector of discretizations/finite elements
Definition: flexible_body.h:199
fmatvec::Vec qFull
vector of position-DOFs of full system
Definition: flexible_body_1s_21_cosserat.h:207
void BuildElementTranslation(const double &sGlobal, double &sLocal, int ¤tElementTranslation)
detect current finite element (translation)
Definition: flexible_body_1s_21_cosserat.cc:448
fmatvec::Vec uFull
vector of velocity-DOFs of full system
Definition: flexible_body_1s_21_cosserat.h:212
fmatvec::Vector< fmatvec::Fixed< 6 >, double > getVelocities(double x)
compute velocities and differentiated angles at Lagrangian coordinate in local FE coordinates ...
Definition: flexible_body_1s_21_cosserat.cc:377
Definition: frame_1s.h:27
fmatvec::Vector< fmatvec::Fixed< 6 >, double > getPositions(double x)
compute positions and angle at Lagrangian coordinate in local FE coordinates
Definition: flexible_body_1s_21_cosserat.cc:364
int Elements
number of translational elements
Definition: flexible_body_1s_cosserat.h:164
bool PODreduced
bool true: execute POD, false: without POD
Definition: flexible_body_1s_21_cosserat.h:197
double R1
radius of undeformed shape R1: in t-b-plane R2: in t-n-plane
Definition: flexible_body_1s_cosserat.h:204
Definition: flexible_body_1s_cosserat.h:52
void initInfo()
initialise beam only for giving information with respect to state, number elements, length, (not for simulation)
Definition: flexible_body_1s_21_cosserat.cc:423
virtual void GlobalVectorContribution(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)
insert 'local' information in global vectors
Definition: flexible_body_1s_21_cosserat.cc:101
bool openStructure
flag for open (cantilever beam) or closed (rings) structures
Definition: flexible_body_1s.h:73
fmatvec::SymMat MConst
constant mass matrix
Definition: flexible_body_1s_21_cosserat.h:182
virtual ~FlexibleBody1s21Cosserat()
destructor
Definition: flexible_body_1s_21_cosserat.cc:41
bool JInterp
marker if Jacobians already interpolated
Definition: flexible_body_1s_21_cosserat.h:192
fmatvec::Mat U
POM projection matrix.
Definition: flexible_body_1s_21_cosserat.h:202
std::vector< DiscretizationInterface * > rotationDiscretization
stl-vector of finite elements for rotation grid
Definition: flexible_body_1s_cosserat.h:144
fmatvec::Vec hFull
vector of smooth right-hand side of full system
Definition: flexible_body_1s_21_cosserat.h:217
void GlobalVectorContributionRotation(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)
insert 'local' information in global vectors for rotation grid
Definition: flexible_body_1s_21_cosserat.cc:113
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_1s_21_cosserat.cc:560
virtual void BuildElements()
references finite element coordinates to assembled coordinates
Definition: flexible_body_1s_21_cosserat.cc:50
bool updEle
vector of contour parameters each describing a frame
Definition: flexible_body.h:230
std::vector< Frame * > frame
double cEps0D
strain damping
Definition: flexible_body_1s_cosserat.h:209
void computeBoundaryCondition()
compute boundary conditions for rotation grid first and last finite difference rotation beam element ...
Definition: flexible_body_1s_21_cosserat.cc:491
fmatvec::SymMat LLMConst
constant decomposed mass matrix
Definition: flexible_body_1s_21_cosserat.h:187
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_1s_21_cosserat.cc:495
virtual void GlobalMatrixContribution(int n, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat)
insert 'local' information in global matrices
Definition: flexible_body_1s_21_cosserat.cc:124
int findPOMSize(const fmatvec::Mat &POM, const fmatvec::Mat &SVD, double precission=1-1.e-3)
find reduction order for POM
Definition: flexible_body_1s_21_cosserat.cc:694
virtual fmatvec::Mat3xV transformJacobian(fmatvec::Mat3xV J)
interface function to transform the Jacobian if the generalized coordinates have been changed ...
Definition: flexible_body_1s_21_cosserat.h:116
bool initialised
initialised FLAG
Definition: flexible_body_1s_cosserat.h:214
double I1
area moments of inertia I0: around torsional axis I1: in t-b-plane I2: in t-n-plane ...
Definition: flexible_body_1s_cosserat.h:192
fmatvec::Mat readPositionMatrix(const std::string &h5File, const std::string &job)
read position matrix of other simulation for POD-reduction
Definition: flexible_body_1s_21_cosserat.cc:646
void initM()
initialize translational part of mass matrix and calculate Cholesky decomposition ...
Definition: flexible_body_1s_21_cosserat.cc:467
cartesian frame on nodes of flexible bodies
Definition: node_frame.h:31
flexible body for planar beam using Cosserat model
Definition: flexible_body_1s_21_cosserat.h:54
double L
length of beam
Definition: flexible_body_1s.h:68