All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
flexible_body_1s_33_cosserat.h
1 /* Copyright (C) 2004-2012 MBSim Development Team
2  *
3  * This library is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU Lesser General Public
5  * License as published by the Free Software Foundation; either
6  * version 2.1 of the License, or (at your option) any later version.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16  *
17  * Contact: thorsten.schindler@mytum.de
18  */
19 
20 #ifndef _FLEXIBLE_BODY_1S_33_COSSERAT_H_
21 #define _FLEXIBLE_BODY_1S_33_COSSERAT_H_
22 
23 #include "flexible_body_1s_cosserat.h"
24 #include "mbsimFlexibleBody/pointer.h"
25 #include "mbsimFlexibleBody/flexible_body/finite_elements/finite_element_1s_33_cosserat_translation.h"
26 #include "mbsimFlexibleBody/flexible_body/finite_elements/finite_element_1s_33_cosserat_rotation.h"
27 
28 namespace MBSimFlexibleBody {
29 
30 // class NurbsCurve1s;
31 
56  public:
57 
63  FlexibleBody1s33Cosserat(const std::string &name, bool openStructure);
64 
68  virtual ~FlexibleBody1s33Cosserat();
69 
70  /* INHERITED INTERFACE OF FLEXIBLE BODY */
71  virtual void BuildElements();
72  virtual void GlobalVectorContribution(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec);
73  virtual void GlobalMatrixContribution(int n, const fmatvec::Mat& locMat, fmatvec::Mat& gloMat);
74  virtual void GlobalMatrixContribution(int n, const fmatvec::SymMat& locMat, fmatvec::SymMat& gloMat);
75  virtual void exportPositionVelocity(const std::string & filenamePos, const std::string & filenameVel = std::string(), const int & deg = 3, const bool & writePsFile = false);
76  virtual void importPositionVelocity(const std::string & filenamePos, const std::string & filenameVel = std::string());
77  /***************************************************/
78 
79  virtual void updatePositions(Frame1s* frame);
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);
84 
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);
90 
91  virtual fmatvec::Vec3 getAngles(int i);
92  virtual fmatvec::Vec3 getDerivativeOfAngles(int i);
93 
94  /* INHERITED INTERFACE OF OBJECT */
95  virtual void init(InitStage stage);
96  virtual double computePotentialEnergy();
97  /***************************************************/
98 
99  /* INHERITED INTERFACE OF OBJECTINTERFACE */
100  virtual void updateLLM();
101 
102  /* INHERITED INTERFACE OF ELEMENT */
103  virtual std::string getType() const { return "FlexibleBody1s33Cosserat"; }
104  /***************************************************/
105 
106  /* GETTER / SETTER */
107  void setNumberElements(int n);
108 
109  void setMomentsInertia(double I1_, double I2_, double I0_);
110 
111  void setCurlRadius(double R1_, double R2_);
112  void setMaterialDamping(double cEps0D_, double cEps1D_, double cEps2D_);
113 
114  virtual int getNumberOfElementDOF() const { return 6; }
115 
116  int getNumberElements() const { return Elements; }
117  int getNumberDOFs() const { return qSize; }
118  /***************************************************/
119 
125 
131 
137  fmatvec::Vec3 computeAngles(double sGlobal, const fmatvec::Vec & vec);
138 
142  void initInfo();
143 
156  void BuildElementTranslation(const double& sGlobal, double& sLocal, int& currentElementTranslation);
157 
158  protected:
159 
164 
171  double I2, I0;
172 
178  double R2;
179 
183  double cEps2D;
184 
185  FlexibleBody1s33Cosserat(); // standard constructor
186  FlexibleBody1s33Cosserat(const FlexibleBody1s33Cosserat&); // copy constructor
187  FlexibleBody1s33Cosserat& operator=(const FlexibleBody1s33Cosserat&); // assignment operator
188 
192  void initM();
193 
200 
207  void GlobalVectorContributionRotation(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec);
208  };
209 
210  inline void FlexibleBody1s33Cosserat::setMomentsInertia(double I1_, double I2_, double I0_) {
211  I1 = I1_;
212  I2 = I2_;
213  I0 = I0_;
214  }
215 
216  inline void FlexibleBody1s33Cosserat::setCurlRadius(double R1_, double R2_) {
217  R1 = R1_;
218  R2 = R2_;
219  if (initialised)
220  for (int i = 0; i < Elements; i++)
221  static_cast<FiniteElement1s33CosseratRotation*>(rotationDiscretization[i])->setCurlRadius(R1, R2);
222  }
223  inline void FlexibleBody1s33Cosserat::setMaterialDamping(double cEps0D_, double cEps1D_, double cEps2D_) {
224  cEps0D = cEps0D_;
225  cEps1D = cEps1D_;
226  cEps2D = cEps2D_;
227  if (initialised)
228  for (int i = 0; i < Elements; i++)
229  static_cast<FiniteElement1s33CosseratTranslation*>(discretization[i])->setMaterialDamping(Elements * cEps0D, cEps1D, cEps2D);
230  }
231 
232 }
233 
234 #endif /* _FLEXIBLE_BODY_1S_33_COSSERAT_H_ */
virtual void GlobalMatrixContribution(int n, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat)
insert &#39;local&#39; information in global matrices
Definition: flexible_body_1s_33_cosserat.cc:123
std::vector< DiscretizationInterface * > discretization
stl-vector of discretizations/finite elements
Definition: flexible_body.h:199
virtual void GlobalVectorContribution(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)
insert &#39;local&#39; information in global vectors
Definition: flexible_body_1s_33_cosserat.cc:111
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_33_cosserat.cc:338
virtual void BuildElements()
references finite element coordinates to assembled coordinates
Definition: flexible_body_1s_33_cosserat.cc:49
Definition: frame_1s.h:27
int Elements
number of translational elements
Definition: flexible_body_1s_cosserat.h:164
fmatvec::Vector< fmatvec::Fixed< 6 >, double > getPositions(double x)
compute positions and angle at Lagrangian coordinate in local FE coordinates
Definition: flexible_body_1s_33_cosserat.cc:323
double R1
radius of undeformed shape R1: in t-b-plane R2: in t-n-plane
Definition: flexible_body_1s_cosserat.h:204
void computeBoundaryCondition()
compute boundary conditions for rotation grid first and last finite difference rotation beam element ...
Definition: flexible_body_1s_33_cosserat.cc:442
double R2
radius of undeformed shape R1: in t-b-plane R2: in t-n-plane
Definition: flexible_body_1s_33_cosserat.h:178
double I2
area moments of inertia I0: around torsional axis I1: in t-b-plane I2: in t-n-plane ...
Definition: flexible_body_1s_33_cosserat.h:171
Definition: flexible_body_1s_cosserat.h:52
bool openStructure
flag for open (cantilever beam) or closed (rings) structures
Definition: flexible_body_1s.h:73
void initInfo()
initialise beam only for giving information with respect to state, number elements, length, (not for simulation)
Definition: flexible_body_1s_33_cosserat.cc:387
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_33_cosserat.cc:537
fmatvec::Vec3 computeAngles(double sGlobal, const fmatvec::Vec &vec)
compute angles at Lagrangian coordinate in local FE coordinates
Definition: flexible_body_1s_33_cosserat.cc:354
std::vector< DiscretizationInterface * > rotationDiscretization
stl-vector of finite elements for rotation grid
Definition: flexible_body_1s_cosserat.h:144
double cEps2D
strain damping
Definition: flexible_body_1s_33_cosserat.h:183
bool JTransInterp
marker if Jacobians already interpolated
Definition: flexible_body_1s_33_cosserat.h:163
void initM()
initialize translational part of mass matrix and calculate Cholesky decomposition ...
Definition: flexible_body_1s_33_cosserat.cc:429
virtual ~FlexibleBody1s33Cosserat()
destructor
Definition: flexible_body_1s_33_cosserat.cc:40
std::vector< Frame * > frame
void BuildElementTranslation(const double &sGlobal, double &sLocal, int &currentElementTranslation)
detect current finite element (t void setOpenMBVSpineExtrusion(OpenMBV::SpineExtrusion* spineExtrusio...
Definition: flexible_body_1s_33_cosserat.cc:410
double cEps0D
strain damping
Definition: flexible_body_1s_cosserat.h:209
void GlobalVectorContributionRotation(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)
insert &#39;local&#39; information in global vectors for rotation grid
Definition: flexible_body_1s_33_cosserat.cc:446
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
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-packa...
Definition: flexible_body_1s_33_cosserat.cc:472
cartesian frame on nodes of flexible bodies
Definition: node_frame.h:31
finite element for spatial beam using Cosserat model
Definition: flexible_body_1s_33_cosserat.h:55

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML