mbsimflexiblebody 4.0.0 MBSim Flexible Body Module

1s_33_ancf.h
1 /* Copyright (C) 2004-2014 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_ANCF_H_
21 #define _FLEXIBLE_BODY_1S_33_ANCF_H_
22
23 #include "mbsimFlexibleBody/flexible_body/1s.h"
24
25 namespace MBSimFlexibleBody {
26
27 class NodeFrame;
28
43 class FlexibleBody1s33ANCF : public FlexibleBody1s {
44
45 public:
51 FlexibleBody1s33ANCF(const std::string &name, bool openStructure);
52
53 /* INHERITED INTERFACE OF FLEXIBLE BODY */
54 void updateM() override { }
55 void updateLLM() override { }
56
57 void BuildElements() override;
58
59 void GlobalVectorContribution(int n, const fmatvec::Vec& locVec, fmatvec::Vec& gloVec) override;
60 void GlobalMatrixContribution(int n, const fmatvec::Mat& locMat, fmatvec::Mat& gloMat) override;
61 void GlobalMatrixContribution(int n, const fmatvec::SymMat& locMat, fmatvec::SymMat& gloMat) override;
62
63 void updatePositions(Frame1s* frame) override;
64 void updateVelocities(Frame1s* frame) override;
65 void updateAccelerations(Frame1s* frame) override;
66 void updateJacobians(Frame1s* frame, int j=0) override;
67 void updateGyroscopicAccelerations(Frame1s* frame) override;
68
69 virtual void updatePositions(NodeFrame* frame);
70 virtual void updateVelocities(NodeFrame* frame);
71 virtual void updateAccelerations(NodeFrame* frame);
72 virtual void updateJacobians(NodeFrame* frame, int j=0);
73 virtual void updateGyroscopicAccelerations(NodeFrame* frame);
74 /****************************************/
75
76 /* INHERITED INTERFACE OF OBJECT */
77 void init(InitStage stage, const MBSim::InitConfigSet &config) override;
78 /***************************************************/
79
80 /* INHERITED INTERFACE OF ELEMENT */
81 void plot() override;
82 /***************************************************/
83
84 /* GETTER / SETTER */
85 void setNumberElements(int n);
86 void setEModul(double E_) { E = E_; }
87 void setShearModul(double G_) { G = G_; }
88 void setCrossSectionalArea(double A_) { A = A_; }
89 void setMomentInertia(double I0_,double I1_,double I2_) { I0 = I0_; I1 = I1_; I2 = I2_; }
90 void setDensity(double rho_) { rho = rho_; }
91 void setCurlRadius(double rc1_,double rc2_);
92 int getNumberElements(){ return Elements; }
93 /***************************************************/
94
98 void initInfo();
99
104 void initRelaxed(double alpha);
105
106 private:
110 int Elements;
111
115 double l0;
116
120 double E;
121
125 double G;
126
130 double A;
131
135 double I0;
136
140 double I1;
141
145 double I2;
146
150 double rho;
151
155 double rc1;
156
160 double rc2;
161
165 bool initialised;
166
170 void initM();
171
178 void BuildElement(const double& sGlobal, double& sLocal, int& currentElement);
179
183 FlexibleBody1s33ANCF(const FlexibleBody1s33ANCF&);
184
188 FlexibleBody1s33ANCF& operator=(const FlexibleBody1s33ANCF&);
189 };
190
191 }
192 #endif /* _FLEXIBLE_BODY_1S_33_ANCF_H_ */
MBSimFlexibleBody::FlexibleBody1s33ANCF::BuildElement
void BuildElement(const double &sGlobal, double &sLocal, int &currentElement)
detect current finite element
Definition: 1s_33_ancf.cc:235
MBSimFlexibleBody::FlexibleBody1s33ANCF::I0
double I0
polar moment of inertia of cross-section
Definition: 1s_33_ancf.h:135
MBSimFlexibleBody::FlexibleBody1s33ANCF::initInfo
void initInfo()
initialise beam only for giving information with respect to state, number elements,...
Definition: 1s_33_ancf.cc:264
MBSimFlexibleBody::FlexibleBody1s33ANCF::GlobalVectorContribution
void GlobalVectorContribution(int n, const fmatvec::Vec &locVec, fmatvec::Vec &gloVec) override
insert 'local' information in global vectors
Definition: 1s_33_ancf.cc:41
MBSimFlexibleBody::FlexibleBody1s33ANCF::operator=
FlexibleBody1s33ANCF & operator=(const FlexibleBody1s33ANCF &)
assignment operator is declared private
MBSimFlexibleBody::FlexibleBody1s33ANCF::GlobalMatrixContribution
void GlobalMatrixContribution(int n, const fmatvec::Mat &locMat, fmatvec::Mat &gloMat) override
insert 'local' information in global matrices
Definition: 1s_33_ancf.cc:53
MBSimFlexibleBody::FlexibleBody1s33ANCF::FlexibleBody1s33ANCF
FlexibleBody1s33ANCF(const std::string &name, bool openStructure)
constructor:
MBSimFlexibleBody::FlexibleBody1s33ANCF::I2
double I2
moment of inertia of cross-section
Definition: 1s_33_ancf.h:145
MBSimFlexibleBody::FlexibleBody1s33ANCF::rc1
double rc1
radius of undeformed shape
Definition: 1s_33_ancf.h:155
MBSimFlexibleBody::FlexibleBody1s33ANCF::I1
double I1
moment of inertia of cross-section
Definition: 1s_33_ancf.h:140
MBSimFlexibleBody::FlexibleBody1s
tbd
Definition: 1s.h:33
MBSimFlexibleBody::FlexibleBody1s33ANCF::initialised
bool initialised
flag for testing if beam is initialised
Definition: 1s_33_ancf.h:165
MBSimFlexibleBody::Frame1s
Definition: frame_1s.h:27
MBSimFlexibleBody::FlexibleBody1s33ANCF::rho
double rho
material density
Definition: 1s_33_ancf.h:150
MBSimFlexibleBody::FlexibleBody1s33ANCF::Elements
int Elements
number of finite elements used for discretisation
Definition: 1s_33_ancf.h:110
MBSimFlexibleBody::FlexibleBody1s33ANCF
Absolute Nodal Coordinate Formulation for flexible spatial beams.
Definition: 1s_33_ancf.h:43
MBSimFlexibleBody::FlexibleBody1s::openStructure
bool openStructure
flag for open (cantilever beam) or closed (rings) structures
Definition: 1s.h:73
MBSim::Element::InitStage
InitStage
MBSimFlexibleBody::FlexibleBody1s33ANCF::initRelaxed
void initRelaxed(double alpha)
initialise beam state concerning a straight cantilever setting or a circle shaped ring
Definition: 1s_33_ancf.cc:275
MBSimFlexibleBody::FlexibleBody1s33ANCF::initM
void initM()
initialize mass matrix and calculate Cholesky decomposition
Definition: 1s_33_ancf.cc:251
MBSimFlexibleBody::FlexibleBody1s33ANCF::l0
double l0
length of one finite element
Definition: 1s_33_ancf.h:115
MBSimFlexibleBody::FlexibleBody1s33ANCF::rc2
double rc2
radius of undeformed shape
Definition: 1s_33_ancf.h:160
MBSim::Element::name
std::string name
MBSim::Body::frame
std::vector< Frame * > frame
MBSimFlexibleBody::FlexibleBody1s33ANCF::A
double A
cross-section area
Definition: 1s_33_ancf.h:130
MBSimFlexibleBody::FlexibleBody1s33ANCF::BuildElements
void BuildElements() override
references finite element coordinates to assembled coordinates
Definition: 1s_33_ancf.cc:217
MBSimFlexibleBody::FlexibleBody1s33ANCF::G
double G
shear modulus
Definition: 1s_33_ancf.h:125
MBSimFlexibleBody::NodeFrame
cartesian frame on nodes of flexible bodies
Definition: node_frame.h:31
MBSimFlexibleBody::FlexibleBody1s33ANCF::E
double E
modulus of linear elasticity
Definition: 1s_33_ancf.h:120