14#include <jem/base/Object.h>
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>
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>
60using jem::numeric::matmul;
61using jem::numeric::MatmulChain;
62using jem::numeric::norm2;
63using jem::numeric::Quaternion;
64using jem::util::Properties;
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;
155 const Properties &conf,
156 const Properties &props,
157 const Properties &globdat);
165 const Properties ¶ms,
166 const Properties &globdat)
override;
174 static Ref<Model>
makeNew(
const String &name,
175 const Properties &conf,
176 const Properties &props,
177 const Properties &globdat);
188 void assemble_(MatrixBuilder &mbld,
191 const String &loadCase =
"")
const;
197 void assemble_(
const Vector &fint,
199 const String &loadCase =
"")
const;
205 void assembleGyro_(
const Vector &fint,
207 const Ref<AbstractMatrix> mass)
const;
212 void assembleM_(MatrixBuilder &mbld,
222 void getStrainTable_(XTable &strain_table,
223 const Vector &weights,
225 const bool mat_vals =
false);
231 void getMaterialTable_(XTable &mat_table,
232 const Vector &weights,
242 void getStressTable_(XTable &stress_table,
243 const Vector &weights,
245 const bool mat_vals =
false);
248 void initRotation_();
258 void getGeomtericStiffness_(
const Cubix &B,
259 const Matrix &stresses,
260 const Matrix &nodePhi_0,
261 const Matrix &nodeU)
const;
271 void getStrains_(
const Matrix &strains,
273 const Matrix &nodePhi_0,
275 const Cubix &nodeLambda,
277 const bool spatial =
true)
const;
288 void getStresses_(
const Matrix &stresses,
290 const Matrix &nodePhi_0,
292 const Cubix &nodeLambda,
294 const bool spatial =
true,
295 const String &loadCase =
"")
const;
303 void getDisplacments_(
const Matrix &nodePhi_0,
305 const Cubix &nodeLambda,
307 const IdxVector &inodes)
const;
312 double getPotentialEnergy_(
const Vector &disp)
const;
318 void getPotentialEnergy_(XTable &energy_table,
319 const Vector &table_weights,
320 const Vector &disp)
const;
325 double getDissipatedEnergy_(
const Vector &disp)
const;
331 void getDissipatedEnergy_(XTable &energy_table,
332 const Vector &table_weights,
333 const Vector &disp)
const;
336 Assignable<ElementGroup> rodElems_;
338 Assignable<ElementSet> allElems_;
339 Assignable<NodeSet> allNodes_;
344 Ref<Material> material_;
347 IdxVector transTypes_;
353 Vector materialYDir_;
355 IdxVector givenNodes_;
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 ¶ms, 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