dynLattice
Loading...
Searching...
No Matches
SpecialCosseratRodModel.h
Go to the documentation of this file.
1
12#pragma once
13
14#include <jem/base/Object.h>
15
16#include <materials/Material.h>
18
19#include <jem/base/Array.h>
20#include <jem/base/IllegalInputException.h>
21#include <jem/base/System.h>
22#include <jem/base/Float.h>
23#include <jem/numeric/Quaternion.h>
24#include <jem/numeric/algebra.h>
25#include <jem/numeric/algebra/matmul.h>
26#include <jem/util/Properties.h>
27#include <jem/util/StringUtils.h>
28
29#include <jive/Array.h>
30#include <jive/algebra/AbstractMatrix.h>
31#include <jive/algebra/FlexMatrixBuilder.h>
32#include <jive/algebra/MatrixBuilder.h>
33#include <jive/app/Names.h>
34#include <jive/fem/ElementGroup.h>
35#include <jive/fem/ElementSet.h>
36#include <jive/fem/NodeGroup.h>
37#include <jive/fem/NodeSet.h>
38#include <jive/geom/ShapeFactory.h>
39#include <jive/geom/StdShape.h>
40#include <jive/implict/SolverInfo.h>
41#include <jive/model/Actions.h>
42#include <jive/model/Model.h>
43#include <jive/model/ModelFactory.h>
44#include <jive/model/StateVector.h>
45#include <jive/util/Assignable.h>
46#include <jive/util/Globdat.h>
47#include <jive/util/Printer.h>
48#include <jive/util/XDofSpace.h>
49#include <jive/util/XTable.h>
50#include <jive/util/utilities.h>
51
52#include <math.h>
53
54#include "misc/Line3D.h"
55#include "utils/helpers.h"
56#include "utils/testing.h"
57
58using jem::Slice;
59using jem::SliceFrom;
60using jem::numeric::matmul;
61using jem::numeric::MatmulChain;
62using jem::numeric::norm2;
63using jem::numeric::Quaternion;
64using jem::util::Properties;
65
66using jive::BoolVector;
67using jive::algebra::AbstractMatrix;
68using jive::algebra::FlexMBuilder;
69using jive::algebra::MatrixBuilder;
70using jive::fem::ElementGroup;
71using jive::fem::ElementSet;
72using jive::fem::newNodeGroup;
73using jive::fem::NodeGroup;
74using jive::fem::NodeSet;
75using jive::geom::IShape;
76using jive::geom::ShapeFactory;
77using jive::model::Model;
78using jive::util::Assignable;
79using jive::util::DofSpace;
80using jive::util::Globdat;
81using jive::util::joinNames;
82using jive::util::XDofSpace;
83using jive::util::XTable;
84
91
92//-----------------------------------------------------------------------
93// class SpecialCosseratRodModel
94//-----------------------------------------------------------------------
95
121class SpecialCosseratRodModel : public Model
122{
123public:
126 static const char *TYPE_NAME;
127 static const char *TRANS_DOF_DEFAULT;
128 static const char *ROT_DOF_DEFAULT;
129 static const char *TRANS_DOF_NAMES;
130 static const char *ROT_DOF_NAMES;
131 static const char *SYMMETRIC_ONLY;
132 static const char *MATERIAL_Y_DIR;
133 static const char *GIVEN_NODES;
134 static const char *GIVEN_DIRS;
135 static const char *LUMPED_MASS;
136 static const char *HINGES;
138
141 static const idx_t TRANS_DOF_COUNT;
142 static const idx_t ROT_DOF_COUNT;
143 static const Slice TRANS_PART;
144 static const Slice ROT_PART;
146
147 JEM_DECLARE_CLASS(SpecialCosseratRodModel, Model);
148
154 explicit SpecialCosseratRodModel(const String &name,
155 const Properties &conf,
156 const Properties &props,
157 const Properties &globdat);
158
164 virtual bool takeAction(const String &action,
165 const Properties &params,
166 const Properties &globdat) override;
167
174 static Ref<Model> makeNew(const String &name,
175 const Properties &conf,
176 const Properties &props,
177 const Properties &globdat);
178
180 static void declare();
181
182private:
188 void assemble_(MatrixBuilder &mbld,
189 const Vector &fint,
190 const Vector &disp,
191 const String &loadCase = "") const;
192
197 void assemble_(const Vector &fint,
198 const Vector &disp,
199 const String &loadCase = "") const;
200
205 void assembleGyro_(const Vector &fint,
206 const Vector &velo,
207 const Ref<AbstractMatrix> mass) const;
208
212 void assembleM_(MatrixBuilder &mbld,
213 Vector &disp) const;
214
222 void getStrainTable_(XTable &strain_table,
223 const Vector &weights,
224 const Vector &disp,
225 const bool mat_vals = false);
226
231 void getMaterialTable_(XTable &mat_table,
232 const Vector &weights,
233 const String &name);
234
242 void getStressTable_(XTable &stress_table,
243 const Vector &weights,
244 const Vector &disp,
245 const bool mat_vals = false);
246
248 void initRotation_();
249
251 void initStrain_();
252
258 void getGeomtericStiffness_(const Cubix &B,
259 const Matrix &stresses,
260 const Matrix &nodePhi_0,
261 const Matrix &nodeU) const;
262
271 void getStrains_(const Matrix &strains,
272 const Vector &w,
273 const Matrix &nodePhi_0,
274 const Matrix &nodeU,
275 const Cubix &nodeLambda,
276 const idx_t ie,
277 const bool spatial = true) const;
278
288 void getStresses_(const Matrix &stresses,
289 const Vector &w,
290 const Matrix &nodePhi_0,
291 const Matrix &nodeU,
292 const Cubix &nodeLambda,
293 const idx_t ie,
294 const bool spatial = true,
295 const String &loadCase = "") const;
296
303 void getDisplacments_(const Matrix &nodePhi_0,
304 const Matrix &nodeU,
305 const Cubix &nodeLambda,
306 const Vector &disp,
307 const IdxVector &inodes) const;
308
312 double getPotentialEnergy_(const Vector &disp) const;
313
318 void getPotentialEnergy_(XTable &energy_table,
319 const Vector &table_weights,
320 const Vector &disp) const;
321
325 double getDissipatedEnergy_(const Vector &disp) const;
326
331 void getDissipatedEnergy_(XTable &energy_table,
332 const Vector &table_weights,
333 const Vector &disp) const;
334
335private:
336 Assignable<ElementGroup> rodElems_;
337 IdxVector rodNodes_;
338 Assignable<ElementSet> allElems_;
339 Assignable<NodeSet> allNodes_;
340
341 Ref<DofSpace> dofs_;
342 Ref<Line3D> shapeK_;
343 Ref<Line3D> shapeM_;
344 Ref<Material> material_;
345 Ref<Model> hinges_;
346
347 IdxVector transTypes_;
348 IdxVector rotTypes_;
349 IdxVector jtypes_;
350
351 bool symOnly_;
352 Vector thickFact_;
353 Vector materialYDir_;
354
355 IdxVector givenNodes_;
356 Matrix givenDirs_;
357
358 Cubix LambdaN_;
359 Cubix matStrain0_;
360};
Shape function for 1D line elements in 3D space.
Factory to register all the materials with.
Material class for representing different materials in the simulation.
Special Cosserat rod finite element model with geometrically exact kinematics.
Definition SpecialCosseratRodModel.h:122
virtual bool takeAction(const String &action, const Properties &params, const Properties &globdat) override
Handle model actions.
Definition SpecialCosseratRodModel.cpp:198
static const char * GIVEN_NODES
Given direction nodes property.
Definition SpecialCosseratRodModel.h:133
static const idx_t ROT_DOF_COUNT
Number of rotational DOFs.
Definition SpecialCosseratRodModel.h:142
static Ref< Model > makeNew(const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
Create new SpecialCosseratRodModel instance.
Definition SpecialCosseratRodModel.cpp:1205
static const idx_t TRANS_DOF_COUNT
Number of translational DOFs.
Definition SpecialCosseratRodModel.h:141
static const char * SYMMETRIC_ONLY
Symmetric tangent stiffness property.
Definition SpecialCosseratRodModel.h:131
static void declare()
Declare model type to factory.
Definition SpecialCosseratRodModel.cpp:1218
static const char * GIVEN_DIRS
Given directions property.
Definition SpecialCosseratRodModel.h:134
static const char * MATERIAL_Y_DIR
Material y-direction property.
Definition SpecialCosseratRodModel.h:132
static const Slice ROT_PART
Rotational DOF slice.
Definition SpecialCosseratRodModel.h:144
static const Slice TRANS_PART
Translational DOF slice.
Definition SpecialCosseratRodModel.h:143
static const char * TRANS_DOF_NAMES
Translational DOF names property.
Definition SpecialCosseratRodModel.h:129
static const char * TRANS_DOF_DEFAULT
Default translational DOF prefix.
Definition SpecialCosseratRodModel.h:127
static const char * TYPE_NAME
Model type name.
Definition SpecialCosseratRodModel.h:126
static const char * ROT_DOF_NAMES
Rotational DOF names property.
Definition SpecialCosseratRodModel.h:130
static const char * ROT_DOF_DEFAULT
Default rotational DOF prefix.
Definition SpecialCosseratRodModel.h:128
static const char * LUMPED_MASS
Lumped mass property.
Definition SpecialCosseratRodModel.h:135
static const char * HINGES
Hinges property.
Definition SpecialCosseratRodModel.h:136
file containing some basic helper functions
Vector unskew(const Matrix &mat)
construct a axial vector from a given skew-symmetric matrix
Definition helpers.cpp:257
void expVec(const Matrix &Exp, const Vector &psi)
compute the exponential of a axial vector.
Definition helpers.cpp:139
void vec2mat(const Matrix &mat, const Vector &vec)
rearrange a vector into a matrix.
Definition helpers.cpp:113
Matrix eye(const idx_t dim)
generates an identity matrix of the given dimension.
Definition helpers.cpp:88
const Vector e3
Definition helpers.h:53
Matrix skew(const Vector &vec)
construct a skew symetric matrix from a given vector.
Definition helpers.cpp:242
several compiler macros for faster testing of variables