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/Event.h>
27#include <jem/util/Properties.h>
28#include <jem/util/StringUtils.h>
30#include <jive/Array.h>
31#include <jive/algebra/AbstractMatrix.h>
32#include <jive/algebra/FlexMatrixBuilder.h>
33#include <jive/algebra/MatrixBuilder.h>
34#include <jive/app/Names.h>
35#include <jive/fem/ElementGroup.h>
36#include <jive/fem/ElementSet.h>
37#include <jive/fem/NodeGroup.h>
38#include <jive/fem/NodeSet.h>
39#include <jive/geom/ShapeFactory.h>
40#include <jive/geom/StdShape.h>
41#include <jive/implict/SolverInfo.h>
42#include <jive/model/Actions.h>
43#include <jive/model/Model.h>
44#include <jive/model/ModelFactory.h>
45#include <jive/model/StateVector.h>
46#include <jive/util/Assignable.h>
47#include <jive/util/Globdat.h>
48#include <jive/util/Printer.h>
49#include <jive/util/XDofSpace.h>
50#include <jive/util/XTable.h>
51#include <jive/util/utilities.h>
61using jem::numeric::matmul;
62using jem::numeric::MatmulChain;
63using jem::numeric::norm2;
64using jem::numeric::Quaternion;
65using jem::util::Properties;
67using jive::BoolVector;
69using jive::algebra::AbstractMatrix;
70using jive::algebra::FlexMBuilder;
71using jive::algebra::MatrixBuilder;
72using jive::fem::ElementGroup;
73using jive::fem::ElementSet;
74using jive::fem::newNodeGroup;
75using jive::fem::NodeGroup;
76using jive::fem::NodeSet;
77using jive::geom::IShape;
78using jive::geom::ShapeFactory;
79using jive::model::Model;
80using jive::util::Assignable;
81using jive::util::DofSpace;
82using jive::util::Globdat;
83using jive::util::joinNames;
84using jive::util::XDofSpace;
85using 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_();
266 void getTangents_(
const Matrix &phiP,
267 const Matrix &nodePhi_0,
269 const idx_t ie)
const;
276 void getGeomtericStiffness_(
const Cubix &B,
277 const Matrix &stresses,
278 const Matrix &nodePhi_0,
279 const Matrix &nodeU)
const;
289 void getStrains_(
const Matrix &strains,
291 const Matrix &nodePhi_0,
293 const Cubix &nodeLambda,
295 const bool spatial =
true)
const;
306 void getStresses_(
const Matrix &stresses,
308 const Matrix &nodePhi_0,
310 const Cubix &nodeLambda,
312 const bool spatial =
true,
313 const String &loadCase =
"")
const;
316 void updNodeDofs_()
const;
319 void invalidateNodeDofs_();
327 void getDisplacments_(
const Matrix &nodePhi_0,
329 const Cubix &nodeLambda,
331 const IdxVector &inodes)
const;
337 void getEnergies_(
double &E_pot,
339 const Vector &disp)
const;
345 void getPotentialEnergy_(XTable &energy_table,
346 const Vector &table_weights,
347 const Vector &disp)
const;
353 void getDissipatedEnergy_(XTable &energy_table,
354 const Vector &table_weights,
355 const Vector &disp)
const;
358 Assignable<ElementGroup> rodElems_;
360 IdxVector rodNodeIdx_;
361 Assignable<ElementSet> allElems_;
362 Assignable<NodeSet> allNodes_;
367 Ref<Material> material_;
370 IdxVector transTypes_;
374 mutable IdxMatrix nodeDofs_;
375 mutable bool nodeDofsValid_;
378 mutable bool energiesStored_ =
false;
383 Vector materialYDir_;
385 IdxVector givenNodes_;
398 mutable Matrix curPhi_;
399 mutable Matrix ipPhiP_;
400 mutable Cubix ipLambda_;
401 mutable Cubix ipLambdaP_;
402 mutable Matrix lambdaTP_;
403 mutable Matrix strainWork_;
404 mutable MatmulChain<double, 2> matmul_;
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:205
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:1323
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:1336
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:332
void expVec(const Matrix &Exp, const Vector &psi)
compute the exponential of a axial vector.
Definition helpers.cpp:185
void vec2mat(const Matrix &mat, const Vector &vec)
rearrange a vector into a matrix.
Definition helpers.cpp:136
Matrix eye(const idx_t dim)
generates an identity matrix of the given dimension.
Definition helpers.cpp:106
const Vector e3
Definition helpers.h:52
Matrix skew(const Vector &vec)
construct a skew symetric matrix from a given vector.
Definition helpers.cpp:312
several compiler macros for faster testing of variables