All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
flexible_body_1s_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_COSSERAT_H_
21 #define FLEXIBLE_BODY_1S_COSSERAT_H_
22 
23 #include "mbsimFlexibleBody/flexible_body/flexible_body_1s.h"
24 #include "mbsimFlexibleBody/pointer.h"
25 //#include <mbsimFlexibleBody/contours/neutral_contour/contour_1s_neutral_cosserat.h>
26 //#include "mbsimFlexibleBody/flexible_body/finite_elements/finite_element_1s_33_cosserat_translation.h"
27 //#include "mbsimFlexibleBody/flexible_body/finite_elements/finite_element_1s_33_cosserat_rotation.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 //#include "mbsimFlexibleBody/contours/nurbs_curve_1s.h"
33 
34 namespace MBSimFlexibleBody {
35 
50  class Contour1sNeutralCosserat;
51 
53  public:
54 
60  FlexibleBody1sCosserat(const std::string &name, bool openStructure);
61 
62  /* INHERITED INTERFACE OF FLEXIBLE BODY */
63  virtual void BuildElements()=0;
64  const fmatvec::Vec& evalqRotationElement(int i) { if(updEle) BuildElements(); return qRotationElement[i]; }
65  const fmatvec::Vec& evaluRotationElement(int i) { if(updEle) BuildElements(); return uRotationElement[i]; }
66  virtual void GlobalVectorContribution(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec)=0;
67  virtual void GlobalMatrixContribution(int n, const fmatvec::Mat& locMat, fmatvec::Mat& gloMat)=0;
68  virtual void GlobalMatrixContribution(int n, const fmatvec::SymMat& locMat, fmatvec::SymMat& gloMat)=0;
69  virtual void exportPositionVelocity(const std::string & filenamePos, const std::string & filenameVel = std::string(), const int & deg = 3, const bool & writePsFile = false)=0;
70  virtual void importPositionVelocity(const std::string & filenamePos, const std::string & filenameVel = std::string())=0;
71  /***************************************************/
72 
73  /* INHERITED INTERFACE OF OBJECTINTERFACE */
74  virtual void updateh(int i = 0);
75 
76  /* INHERITED INTERFACE OF ELEMENT */
77  virtual std::string getType() const { return "FlexibleBody1sCosserat"; }
78  /***************************************************/
79 
80  /* GETTER / SETTER */
81  virtual void setNumberElements(int n)=0;
82  void setEGModuls(double E_, double G_) { E = E_; G = G_; }
83  void setDensity(double rho_) { rho = rho_; }
84  void setCrossSectionalArea(double A_) { A = A_; }
85 
86  virtual void setMomentsInertia(double I1_, double I2_, double I0_) { }
87  virtual void setMomentsInertia(double I1_) { }
88 
89  virtual void setCurlRadius(double R1_, double R2_) { }
90  virtual void setCurlRadius(double R1_) { }
91  virtual void setMaterialDamping(double cEps0D_, double cEps1D_, double cEps2D_) { }
92  virtual void setMaterialDamping(double cEps0D_, double cEps1D_) { }
93 
97  virtual Contour1sNeutralCosserat* createNeutralPhase(const std::string & contourName = "Neutral");
98 
106  virtual fmatvec::Mat3xV transformJacobian(fmatvec::Mat3xV J) { return J; }
107 
108  virtual int getNumberOfElementDOF() const { THROW_MBSIMERROR("(FlexibleBody1sCosserat::getNumberOfElementDOF): Not implemented!"); }
109  virtual int getNumberElements() const { return Elements; }
110  virtual int getqSizeFull() const { return getqSize(); }
111 
112  /***************************************************/
113 
114 // /**
115 // * \brief compute state (positions, angles, velocities, differentiated angles) at Lagrangian coordinate in local FE coordinates
116 // * \param Lagrangian coordinate
117 // */
118 // virtual fmatvec::Vec computeState(double s)=0;
119 //
120 // /**
121 // * \brief compute angles at Lagrangian coordinate in local FE coordinates
122 // * \param Lagrangian coordinate
123 // */
124 // virtual fmatvec::Vec3 computeAngles(double sGlobal, const fmatvec::Vec & vec)=0;
125 
129  virtual void initInfo()=0;
130 
137  virtual void BuildElementTranslation(const double& sGlobal, double& sLocal, int& currentElementTranslation) = 0;
138 
139  protected:
140 
144  std::vector<DiscretizationInterface*> rotationDiscretization;
145 
149  std::vector<fmatvec::Vec> qRotationElement;
150 
154  std::vector<fmatvec::Vec> uRotationElement;
155 
159  CardanPtr angle;
160 
164  int Elements;
165 
170 
174  double l0;
175 
179  double E, G;
180 
184  double A;
185 
192  double I1;
193 
197  double rho;
198 
204  double R1;
205 
209  double cEps0D, cEps1D;
210 
215 
222  fmatvec::Vec bound_ang_end;
223  fmatvec::Vec bound_ang_vel_start;
224  fmatvec::Vec bound_ang_vel_end;
225 
230 
231  FlexibleBody1sCosserat(); // standard constructor
232  FlexibleBody1sCosserat(const FlexibleBody1sCosserat&); // copy constructor
233  FlexibleBody1sCosserat& operator=(const FlexibleBody1sCosserat&); // assignment operator
234 
238  virtual void initM()=0;
239 
245  virtual void computeBoundaryCondition()=0;
246 
253  virtual void GlobalVectorContributionRotation(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec)=0;
254  };
255 }
256 
257 #endif /* FLEXIBLE_BODY_1S_COSSERAT_H_ */
virtual void GlobalMatrixContribution(int n, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat)=0
insert &#39;local&#39; information in global matrices
std::vector< fmatvec::Vec > qRotationElement
stl-vector of finite element positions for rotation grid
Definition: flexible_body_1s_cosserat.h:149
virtual void GlobalVectorContribution(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)=0
insert &#39;local&#39; information in global vectors
virtual void exportPositionVelocity(const std::string &filenamePos, const std::string &filenameVel=std::string(), const int &deg=3, const bool &writePsFile=false)=0
interpolates the position and optional the velocity coordinates of the flexible body with Nurbs-packa...
tbd
Definition: flexible_body_1s.h:33
int Elements
number of translational elements
Definition: flexible_body_1s_cosserat.h:164
fmatvec::Vec bound_ang_start
boundary conditions for rotation grid first and last finite difference rotation beam element refer to...
Definition: flexible_body_1s_cosserat.h:221
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
std::vector< fmatvec::Vec > uRotationElement
stl-vector of finite element wise velocities for rotation grid
Definition: flexible_body_1s_cosserat.h:154
bool openStructure
flag for open (cantilever beam) or closed (rings) structures
Definition: flexible_body_1s.h:73
double E
elastic modules
Definition: flexible_body_1s_cosserat.h:179
CardanPtr angle
angle parametrisation
Definition: flexible_body_1s_cosserat.h:159
virtual fmatvec::Mat3xV transformJacobian(fmatvec::Mat3xV J)
interface function to transform the Jacobian if the generalized coordinates have been changed ...
Definition: flexible_body_1s_cosserat.h:106
std::vector< DiscretizationInterface * > rotationDiscretization
stl-vector of finite elements for rotation grid
Definition: flexible_body_1s_cosserat.h:144
virtual void BuildElements()=0
references finite element coordinates to assembled coordinates
bool updEle
vector of contour parameters each describing a frame
Definition: flexible_body.h:230
double cEps0D
strain damping
Definition: flexible_body_1s_cosserat.h:209
virtual void importPositionVelocity(const std::string &filenamePos, const std::string &filenameVel=std::string())=0
imports the interpolated position and optional the velocity files (created with exportPositionVelocit...
double A
area of cross-section
Definition: flexible_body_1s_cosserat.h:184
virtual Contour1sNeutralCosserat * createNeutralPhase(const std::string &contourName="Neutral")
automatically creates its neutral contour
Definition: flexible_body_1s_cosserat.cc:35
virtual void GlobalVectorContributionRotation(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec)=0
insert &#39;local&#39; information in global vectors for rotation grid
Definition: contour_1s_neutral_cosserat.h:21
Contour1sNeutralCosserat * ncc
contour for the spine extrusion
Definition: flexible_body_1s_cosserat.h:229
double rho
density
Definition: flexible_body_1s_cosserat.h:197
virtual void computeBoundaryCondition()=0
compute boundary conditions for rotation grid first and last finite difference rotation beam element ...
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 initM()=0
initialize translational part of mass matrix and calculate Cholesky decomposition ...
virtual void initInfo()=0
compute state (positions, angles, velocities, differentiated angles) at Lagrangian coordinate in loca...
int rotationalElements
number of rotational elements =Elements (for a closed structure) or =Elements+1 (for an open structur...
Definition: flexible_body_1s_cosserat.h:169
virtual void BuildElementTranslation(const double &sGlobal, double &sLocal, int &currentElementTranslation)=0
detect current finite element (translation)
double l0
length of entire beam and finite elements
Definition: flexible_body_1s_cosserat.h:174

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML