dynLattice
Loading...
Searching...
No Matches
RodContactModel.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <jem/base/Object.h>
14
15#include "misc/Line3D.h"
16#include "models/LatticeModel.h"
18#include <jem/base/Array.h>
19#include <jem/base/Error.h>
20#include <jem/base/System.h>
21#include <jem/util/Event.h>
22#include <jem/util/Properties.h>
23#include <jive/Array.h>
24#include <jive/algebra/MatrixBuilder.h>
25#include <jive/algebra/NullMatrixBuilder.h>
26#include <jive/app/Names.h>
27#include <jive/fem/ElementSet.h>
28#include <jive/implict/Names.h>
29#include <jive/model/Actions.h>
30#include <jive/model/Model.h>
31#include <jive/model/ModelFactory.h>
32#include <jive/model/StateVector.h>
33#include <jive/util/Assignable.h>
34#include <jive/util/DofSpace.h>
35#include <jive/util/FuncUtils.h>
36#include <jive/util/XTable.h>
37
38using jem::ALL;
39using jem::newInstance;
40using jem::Ref;
41using jive::idx_t;
42using jive::IdxMatrix;
43using jive::IdxVector;
44using jive::Matrix;
45using jive::Properties;
46using jive::String;
47using jive::Vector;
48using jive::algebra::MatrixBuilder;
49using jive::algebra::NullMatrixBuilder;
50using jive::fem::ElementSet;
51using jive::fem::NodeSet;
52using jive::model::ActionParams;
53using jive::model::Actions;
54using jive::model::Model;
55using jive::model::StateVector;
56using jive::util::Assignable;
57using jive::util::DofSpace;
58using jive::util::FuncUtils;
59using jive::util::XTable;
60
61//-----------------------------------------------------------------------
62// class RodContactModel
63//-----------------------------------------------------------------------
64
80class RodContactModel : public Model
81{
82
83 public:
84 JEM_DECLARE_CLASS(RodContactModel, Model);
85
88 static const char *TYPE_NAME;
89 static const char *PENALTY_PROP;
90 static const char *PENALTY_STS_PROP;
91 static const char *PENALTY_NTS_PROP;
92 static const char *RADIUS_PROP;
93 static const char *VERBOSE_PROP;
95
101 explicit RodContactModel(const String &name,
102 const Properties &conf,
103 const Properties &props,
104 const Properties &globdat);
105
111 virtual bool takeAction(const String &action,
112 const Properties &params,
113 const Properties &globdat) override;
114
121 static Ref<Model> makeNew(const String &name,
122 const Properties &conf,
123 const Properties &props,
124 const Properties &globdat);
125
127 static void declare();
128
129 protected:
134 virtual void findContacts_(IdxVector &elementsA,
135 IdxVector &elementsB,
136 const Vector &disp) const;
137
145 void getElementBoxes_(Matrix &elemBoxMin,
146 Matrix &elemBoxMax,
147 const Vector &disp) const;
148
155 virtual void findPossibleBeams_(IdxVector &beamsA,
156 IdxVector &beamsB,
157 const Matrix &elemBoxMin,
158 const Matrix &elemBoxMax) const;
159
167 virtual void findPossibleElements_(IdxVector &elemsA,
168 IdxVector &elemsB,
169 const idx_t &beamA,
170 const idx_t &beamB,
171 const Matrix &elemBoxMin,
172 const Matrix &elemBoxMax) const;
173
180 virtual void computeContacts_(MatrixBuilder &mbld,
181 const Vector &fint,
182 const IdxVector &elementsA,
183 const IdxVector &elementsB,
184 const Vector &disp);
185
190 virtual void computeBlacklist_(const IdxVector &elementsA,
191 const IdxVector &elementsB,
192 const Vector &disp);
193
198 virtual bool filterBlacklist_(const idx_t elementsA,
199 const idx_t elementsB) const;
200
206 virtual void findClosestPoints_(double &uA,
207 double &uB,
208 const Matrix &possA,
209 const Matrix &possB) const;
210
215 virtual double getClosestPoint_(const Vector &posS,
216 const Matrix &possM) const;
217
227 virtual bool computeSTS_(Vector &f_contrib,
228 Matrix &k_contrib,
229 const Matrix &possA,
230 const Matrix &possB,
231 const double uA,
232 const double uB) const;
233
242 virtual bool computeNTS_(Vector &f_contrib,
243 Matrix &k_contrib,
244 const Vector &possS,
245 const Matrix &possM,
246 const double uM) const;
247
251 bool nodeInRod_(const idx_t inode, const idx_t iRod) const;
252
254 void updNodeDofs_() const;
255
257 void invalidateNodeDofs_();
258
259 private:
260 Assignable<NodeSet> allNodes_;
261 Assignable<ElementSet> allElems_;
262 Array<Assignable<ElementGroup>> rodList_;
263 Array<IdxVector> rodNodes_;
264 IdxMatrix nodeRods_;
265 mutable IdxMatrix nodeDofs_;
266 mutable bool nodeDofsValid_;
267 Ref<DofSpace> dofs_;
268 Ref<Line3D> shape_;
269
270 IdxVector blacklistA_;
271 IdxVector blacklistB_;
272
273 ArrayBuffer<idx_t> contactsA_;
274 ArrayBuffer<idx_t> contactsB_;
275
276 Ref<Function> updCond_;
277
278 double penaltySTS_;
279 double penaltyNTS_;
280 double radius_;
281 bool verbose_;
282};
Lattice model for managing collections of rod elements.
Shape function for 1D line elements in 3D space.
Special Cosserat rod model implementation.
Model for rod-to-rod contact interactions using penalty methods.
Definition RodContactModel.h:81
virtual void computeBlacklist_(const IdxVector &elementsA, const IdxVector &elementsB, const Vector &disp)
Build the list of nodes initially in contact.
Definition RodContactModel.cpp:779
static const char * PENALTY_STS_PROP
Segment-to-segment penalty property.
Definition RodContactModel.h:90
static const char * TYPE_NAME
Model type name.
Definition RodContactModel.h:88
virtual void computeContacts_(MatrixBuilder &mbld, const Vector &fint, const IdxVector &elementsA, const IdxVector &elementsB, const Vector &disp)
Compute the effects of the contact.
Definition RodContactModel.cpp:484
static const char * PENALTY_PROP
General penalty property.
Definition RodContactModel.h:89
virtual bool computeNTS_(Vector &f_contrib, Matrix &k_contrib, const Vector &possS, const Matrix &possM, const double uM) const
Compute the force and stiffness contributions of a node-to-segment contact.
Definition RodContactModel.cpp:1193
virtual double getClosestPoint_(const Vector &posS, const Matrix &possM) const
Get the closest coordinate on the main element to the secondary point.
Definition RodContactModel.cpp:1032
static Ref< Model > makeNew(const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
Create new RodContactModel instance.
Definition RodContactModel.cpp:1289
virtual bool filterBlacklist_(const idx_t elementsA, const idx_t elementsB) const
Check whether a contact is on the blacklist.
Definition RodContactModel.cpp:977
virtual void findPossibleElements_(IdxVector &elemsA, IdxVector &elemsB, const idx_t &beamA, const idx_t &beamB, const Matrix &elemBoxMin, const Matrix &elemBoxMax) const
Get the contacting point between two beams in possible contact.
Definition RodContactModel.cpp:414
static const char * RADIUS_PROP
Rod radius property.
Definition RodContactModel.h:92
static const char * PENALTY_NTS_PROP
Node-to-segment penalty property.
Definition RodContactModel.h:91
void getElementBoxes_(Matrix &elemBoxMin, Matrix &elemBoxMax, const Vector &disp) const
Compute the bounding box of every rod element in the current configuration.
Definition RodContactModel.cpp:310
virtual void findClosestPoints_(double &uA, double &uB, const Matrix &possA, const Matrix &possB) const
Find the local coordinates of the closest points on two beams.
Definition RodContactModel.cpp:989
virtual void findContacts_(IdxVector &elementsA, IdxVector &elementsB, const Vector &disp) const
Find pairs of contacts.
Definition RodContactModel.cpp:271
void invalidateNodeDofs_()
Mark the cached dof indices as outdated (connected to the DofSpace events)
Definition RodContactModel.cpp:1279
static void declare()
Declare model type to factory.
Definition RodContactModel.cpp:1300
virtual void findPossibleBeams_(IdxVector &beamsA, IdxVector &beamsB, const Matrix &elemBoxMin, const Matrix &elemBoxMax) const
Find beams of possible contact pairs.
Definition RodContactModel.cpp:352
virtual bool computeSTS_(Vector &f_contrib, Matrix &k_contrib, const Matrix &possA, const Matrix &possB, const double uA, const double uB) const
Compute the force and stiffness contributions of a segment-to-segment contact.
Definition RodContactModel.cpp:1067
void updNodeDofs_() const
Fill the cache of translational dof indices of the rod nodes (see nodeDofs_)
Definition RodContactModel.cpp:1259
virtual bool takeAction(const String &action, const Properties &params, const Properties &globdat) override
Handle model actions.
Definition RodContactModel.cpp:129
bool nodeInRod_(const idx_t inode, const idx_t iRod) const
Whether a node belongs to a rod (see nodeRods_)
Definition RodContactModel.cpp:1247
static const char * VERBOSE_PROP
Verbose output property.
Definition RodContactModel.h:93