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/Properties.h>
22#include <jive/Array.h>
23#include <jive/algebra/MatrixBuilder.h>
24#include <jive/algebra/NullMatrixBuilder.h>
25#include <jive/app/Names.h>
26#include <jive/fem/ElementSet.h>
27#include <jive/implict/Names.h>
28#include <jive/model/Actions.h>
29#include <jive/model/Model.h>
30#include <jive/model/ModelFactory.h>
31#include <jive/model/StateVector.h>
32#include <jive/util/Assignable.h>
33#include <jive/util/DofSpace.h>
34#include <jive/util/FuncUtils.h>
35#include <jive/util/XTable.h>
36
37using jem::ALL;
38using jem::newInstance;
39using jem::Ref;
40using jive::idx_t;
41using jive::IdxMatrix;
42using jive::IdxVector;
43using jive::Matrix;
44using jive::Properties;
45using jive::String;
46using jive::Vector;
47using jive::algebra::MatrixBuilder;
48using jive::algebra::NullMatrixBuilder;
49using jive::fem::ElementSet;
50using jive::fem::NodeSet;
51using jive::model::ActionParams;
52using jive::model::Actions;
53using jive::model::Model;
54using jive::model::StateVector;
55using jive::util::Assignable;
56using jive::util::DofSpace;
57using jive::util::FuncUtils;
58using jive::util::XTable;
59
60//-----------------------------------------------------------------------
61// class RodContactModel
62//-----------------------------------------------------------------------
63
81class RodContactModel : public Model
82{
83
84public:
85 JEM_DECLARE_CLASS(RodContactModel, Model);
86
89 static const char *TYPE_NAME;
90 static const char *PENALTY_PROP;
91 static const char *PENALTY_STS_PROP;
92 static const char *PENALTY_NTS_PROP;
93 static const char *RADIUS_PROP;
94 static const char *VERBOSE_PROP;
96
102 explicit RodContactModel(const String &name,
103 const Properties &conf,
104 const Properties &props,
105 const Properties &globdat);
106
112 virtual bool takeAction(const String &action,
113 const Properties &params,
114 const Properties &globdat) override;
115
122 static Ref<Model> makeNew(const String &name,
123 const Properties &conf,
124 const Properties &props,
125 const Properties &globdat);
126
128 static void declare();
129
130protected:
135 virtual void findContacts_(IdxVector &elementsA,
136 IdxVector &elementsB,
137 const Vector &disp) const;
138
143 virtual void findPossibleBeams_(IdxVector &beamsA,
144 IdxVector &beamsB,
145 const Vector &disp) const;
146
153 virtual void findPossibleElements_(IdxVector &elemsA,
154 IdxVector &elemsB,
155 const idx_t &beamA,
156 const idx_t &beamB,
157 const Vector &disp) const;
158
165 virtual void computeContacts_(MatrixBuilder &mbld,
166 const Vector &fint,
167 const IdxVector &elementsA,
168 const IdxVector &elementsB,
169 const Vector &disp);
170
175 virtual void computeBlacklist_(const IdxVector &elementsA,
176 const IdxVector &elementsB,
177 const Vector &disp);
178
183 virtual bool filterBlacklist_(const idx_t elementsA,
184 const idx_t elementsB) const;
185
191 virtual void findClosestPoints_(double &uA,
192 double &uB,
193 const Matrix &possA,
194 const Matrix &possB) const;
195
200 virtual double getClosestPoint_(const Vector &posS,
201 const Matrix &possM) const;
202
212 virtual bool computeSTS_(Vector &f_contrib,
213 Matrix &k_contrib,
214 const Matrix &possA,
215 const Matrix &possB,
216 const double uA,
217 const double uB) const;
218
227 virtual bool computeNTS_(Vector &f_contrib,
228 Matrix &k_contrib,
229 const Vector &possS,
230 const Matrix &possM,
231 const double uM) const;
232
233private:
234 Assignable<NodeSet> allNodes_;
235 Assignable<ElementSet> allElems_;
236 Array<Assignable<ElementGroup>> rodList_;
237 Ref<DofSpace> dofs_;
238 Ref<Line3D> shape_;
239
240 IdxVector blacklistA_;
241 IdxVector blacklistB_;
242
243 ArrayBuffer<idx_t> contactsA_;
244 ArrayBuffer<idx_t> contactsB_;
245
246 Ref<Function> updCond_;
247
248 double penaltySTS_;
249 double penaltyNTS_;
250 double radius_;
251 bool verbose_;
252};
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:82
virtual void computeBlacklist_(const IdxVector &elementsA, const IdxVector &elementsB, const Vector &disp)
Build the list of nodes initially in contact.
Definition RodContactModel.cpp:745
static const char * PENALTY_STS_PROP
Segment-to-segment penalty property.
Definition RodContactModel.h:91
static const char * TYPE_NAME
Model type name.
Definition RodContactModel.h:89
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:453
static const char * PENALTY_PROP
General penalty property.
Definition RodContactModel.h:90
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:1159
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:998
static Ref< Model > makeNew(const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
Create new RodContactModel instance.
Definition RodContactModel.cpp:1215
virtual bool filterBlacklist_(const idx_t elementsA, const idx_t elementsB) const
Check whether a contact is on the blacklist.
Definition RodContactModel.cpp:943
static const char * RADIUS_PROP
Rod radius property.
Definition RodContactModel.h:93
static const char * PENALTY_NTS_PROP
Node-to-segment penalty property.
Definition RodContactModel.h:92
virtual void findPossibleBeams_(IdxVector &beamsA, IdxVector &beamsB, const Vector &disp) const
Find beams of possible contact pairs.
Definition RodContactModel.cpp:280
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:955
virtual void findContacts_(IdxVector &elementsA, IdxVector &elementsB, const Vector &disp) const
Find pairs of contacts.
Definition RodContactModel.cpp:247
static void declare()
Declare model type to factory.
Definition RodContactModel.cpp:1226
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:1033
virtual bool takeAction(const String &action, const Properties &params, const Properties &globdat) override
Handle model actions.
Definition RodContactModel.cpp:105
static const char * VERBOSE_PROP
Verbose output property.
Definition RodContactModel.h:94
virtual void findPossibleElements_(IdxVector &elemsA, IdxVector &elemsB, const idx_t &beamA, const idx_t &beamB, const Vector &disp) const
Get the contacting point between two beams in possible contact.
Definition RodContactModel.cpp:363