All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
flexible_body_1s_21_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: thomas.cebulla@mytum.de
18  */
19 
20 #ifndef _FLEXIBLE_BODY_1S_21_COSSERAT_H_
21 #define _FLEXIBLE_BODY_1S_21_COSSERAT_H_
22 
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>
31 
32 namespace MBSimFlexibleBody {
33 
55  public:
56 
62  FlexibleBody1s21Cosserat(const std::string &name, bool openStructure);
63 
67  virtual ~FlexibleBody1s21Cosserat();
68 
69  /* INHERITED INTERFACE OF FLEXIBLE BODY */
70  virtual void BuildElements();
71  const fmatvec::Vec& evalqFull() { if(updEle) BuildElements(); return qFull; }
72  const fmatvec::Vec& evaluFull() { if(updEle) BuildElements(); return uFull; }
73  virtual void GlobalVectorContribution(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec);
74  virtual void GlobalMatrixContribution(int n, const fmatvec::Mat& locMat, fmatvec::Mat& gloMat);
75  virtual void GlobalMatrixContribution(int n, const fmatvec::SymMat& locMat, fmatvec::SymMat& gloMat);
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());
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  virtual void updateM();
98  virtual void updateLLM();
99 // virtual void updatedu();
100  /***************************************************/
101 
102  /* INHERITED INTERFACE OF OBJECTINTERFACE */
103  virtual void updateh(int i = 0);
104 
105  /* INHERITED INTERFACE OF ELEMENT */
106  virtual std::string getType() const { return "FlexibleBody1s21Cosserat"; }
107  /***************************************************/
108 
109  /* GETTER / SETTER */
110  void setNumberElements(int n);
111 
112  void setMomentsInertia(double I1_);
113  void setCurlRadius(double R1_);
114  void setMaterialDamping(double cEps0D_, double cEps1D_);
115 
116  virtual fmatvec::Mat3xV transformJacobian(fmatvec::Mat3xV J) {
117  if (PODreduced)
118  return J * U;
119  return J;
120  }
121 
122  virtual int getNumberOfElementDOF() const {
123  return 3;
124  }
125 
126  int getNumberElements() const {
127  return Elements;
128  }
129  double getLength() const {
130  return L;
131  }
132  virtual int getqSizeFull() const {
133  return qFull.size();
134  }
135  bool isOpenStructure() const {
136  return openStructure;
137  }
138 
139  /* \brief Set SVD=true for POD model reduction
140  * \param reduced mass matrix
141  */
142  void enablePOD(const std::string & h5Path, int reduceMode = 0, int POMSize = 0);
143  /***************************************************/
144 
150 
156 
162  fmatvec::Vec3 computeAngles(double sGlobal, const fmatvec::Vec & vec);
163 
167  void initInfo();
168 
175  void BuildElementTranslation(const double& sGlobal, double& sLocal, int& currentElementTranslation);
176 
177  protected:
178 
183 
188 
192  bool JInterp;
193 
198 
203 
208 
213 
218 
219  FlexibleBody1s21Cosserat(); // standard constructor
220  FlexibleBody1s21Cosserat(const FlexibleBody1s21Cosserat&); // copy constructor
221  FlexibleBody1s21Cosserat& operator=(const FlexibleBody1s21Cosserat&); // assignment operator
222 
226  void initM();
227 
234 
241  void GlobalVectorContributionRotation(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec);
242 
248  fmatvec::Mat readPositionMatrix(const std::string & h5File, const std::string & job);
249 
256  int findPOMSize(const fmatvec::Mat & POM, const fmatvec::Mat &SVD, double precission = 1 - 1.e-3);
257 
258  }
259  ;
260 
261  inline void FlexibleBody1s21Cosserat::updateM() {
262  M << MConst;
263  }
264 
265  inline void FlexibleBody1s21Cosserat::updateLLM() {
266  LLM << LLMConst;
267  }
268 
269  inline void FlexibleBody1s21Cosserat::setMomentsInertia(double I1_) {
270  I1 = I1_;
271  }
272 
273  inline void FlexibleBody1s21Cosserat::setCurlRadius(double R1_) {
274  R1 = R1_;
275  if (initialised)
276  for (int i = 0; i < Elements; i++)
277  static_cast<FiniteElement1s21CosseratRotation*>(rotationDiscretization[i])->setCurlRadius(R1);
278  }
279  inline void FlexibleBody1s21Cosserat::setMaterialDamping(double cEps0D_, double cEps1D_) {
280  cEps0D = cEps0D_;
281  cEps1D = cEps1D_;
282  if (initialised)
283  for (int i = 0; i < Elements; i++)
284  static_cast<FiniteElement1s21CosseratTranslation*>(discretization[i])->setMaterialDamping(Elements * cEps0D, cEps1D);
285  }
286 
287 }
288 
289 #endif /* _FLEXIBLE_BODY_1S_21_COSSERAT_H_ */
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 &currentElementTranslation)
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 &#39;local&#39; 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 LLM
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 &#39;local&#39; 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 &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_21_cosserat.cc:495
virtual void GlobalMatrixContribution(int n, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat)
insert &#39;local&#39; 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
fmatvec::SymMat M

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML