v0.15.0
Loading...
Searching...
No Matches
EshelbianContact.hpp
Go to the documentation of this file.
1/**
2 * @file EshelbianContact.hpp
3 * @brief
4 * @date 2023-05-13
5 *
6 * @copyright Copyright (c) 2023
7 *
8 */
9
10namespace ContactOps {
11
12using EntData = EntitiesFieldData::EntData;
14using BoundaryEleOp = BoundaryEle::UserDataOperator;
15using SideEle = FaceElementForcesAndSourcesCoreOnSide;
16
18 FormsIntegrators<BoundaryEleOp>::Assembly<A>::OpBase;
19
20double cn_contact = 1;
23double scale = 1;
24
25double airplane_ray_distance = 1; // thi is point from which plane send ray.
26 // This is multiple of elem radius.
27
28} // namespace ContactOps
29
30#include <ContactOps.hpp>
31
32namespace EshelbianPlasticity {
33
35 : public PostProcBrokenMeshInMoabBase<FaceElementForcesAndSourcesCore> {
36
38 using Base::refElementsMap;
39
41 boost::shared_ptr<moab::Core> core_mesh_ptr, int max_order,
42 std::map<int, Range> &&body_map);
43 MoFEMErrorCode preProcess();
44 MoFEMErrorCode postProcess();
45 inline boost::shared_ptr<OrientedBoxTreeTool> &getTreeSurfPtr() {
46 return treeSurfPtr;
47 }
48 inline auto getRootSetSurf() { return rootSetSurf; }
49 int getMaxLevel() const { return refElementsMap.at(MBTRI)->defMaxLevel; }
50
51 friend struct OpMoveNode;
52 friend struct OpTreeSearch;
53
54 struct FaceData {
55 int gaussPtNb; //< integration points number
56 std::array<double, 3> slavePoint;
57 std::array<double, 3> masterPoint;
58 std::array<double, 3> rayPoint;
59 std::array<double, 3> unitRay;
60 double eleRadius;
61
62 // std::vector<int> dofsSlaveIds;
63 // std::vector<double> dofsSlaveCoeff;
64 // std::vector<double> baseSlaveFuncs;
65
66 std::array<double, 9> masterPointNodes;
67 std::array<double, 9> masterTractionNodes;
68 std::array<double, 9> slavePointNodes;
69 std::array<double, 9> slaveTractionNodes;
70
71 FaceData() = default;
72 };
73
74 using MapFaceData = std::map<EntityHandle, std::vector<FaceData>>;
75
76 inline auto findFaceDataVecPtr(EntityHandle fe_ent) {
77 auto &map_face_data = shadowDataMap;
78 auto it = map_face_data.find(fe_ent);
79 if (it == map_face_data.end()) {
80 return (std::vector<FaceData> *)nullptr;
81 }
82 return &(it->second);
83 }
84
85 inline auto getFaceDataPtr(std::vector<FaceData>::iterator &it, int gg,
86 std::vector<FaceData> *vec_ptr) {
87 FaceData *face_data_ptr = nullptr;
88 if (it != vec_ptr->end()) {
89 if (it->gaussPtNb == gg) {
90 face_data_ptr = &(*it);
91 ++it;
92 }
93 }
94 return face_data_ptr;
95 }
96
97protected:
98 MoFEMErrorCode buildTree(Range &ents);
99 boost::shared_ptr<OrientedBoxTreeTool> treeSurfPtr;
101
103 // Tag thCoeff;
104 // Tag thIds;
105 // Tag thBases;
110
112
113 std::map<int, Range> bodyMap;
114
115 const int maxOrder;
116};
117
120 const std::string row_field_name,
121 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
122 boost::shared_ptr<ContactTree> contact_tree_ptr,
123 boost::shared_ptr<std::map<int, Range>> sdf_map_range_ptr = nullptr);
124
125 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data);
126
127private:
128 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
129 boost::shared_ptr<ContactTree> contactTreePtr;
130 boost::shared_ptr<std::map<int, Range>> sdfMapRangePtr;
131};
132
133template <AssemblyType A, IntegrationType I>
135
136template <AssemblyType A>
137struct OpConstrainBoundaryHDivRhs<A, IntegrationType::GAUSS>
138 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
139
140 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
142
144 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
145 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
146 boost::shared_ptr<ContactTree> contact_tree_ptr);
147
148 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data);
149
150private:
151 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
152 boost::shared_ptr<ContactTree> contactTreePtr;
153};
154
156
158 const std::string row_field_name, const std::string col_field_name,
159 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
160 boost::shared_ptr<ContactTree> contact_tree_ptr,
161 boost::shared_ptr<std::map<int, Range>> sdf_map_range_ptr = nullptr);
162
163 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data,
164 EntitiesFieldData::EntData &col_data);
165
166private:
167 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
168 boost::shared_ptr<ContactTree> contactTreePtr;
169 boost::shared_ptr<std::map<int, Range>> sdfMapRangePtr;
170};
171
172template <AssemblyType A, IntegrationType I> struct OpConstrainBoundaryL2Lhs_dP;
173
174template <AssemblyType A>
175struct OpConstrainBoundaryL2Lhs_dP<A, IntegrationType::GAUSS>
176 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
177
178 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
180
182 std::string row_field_name,
183 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
184 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
185 boost::shared_ptr<ContactTree> contact_tree_ptr,
186 boost::shared_ptr<std::map<int, Range>> sdf_map_range_ptr = nullptr);
187
188 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data,
189 EntitiesFieldData::EntData &col_data);
190
191private:
192 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
193 boost::shared_ptr<ContactTree> contactTreePtr;
194 boost::shared_ptr<std::map<int, Range>> sdfMapRangePtr;
195};
196
197template <AssemblyType A, IntegrationType I>
199
200template <AssemblyType A>
201struct OpConstrainBoundaryHDivLhs_dU<A, IntegrationType::GAUSS>
202 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
203
204 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
206
208 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
209 std::string col_field_name,
210 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
211 boost::shared_ptr<ContactTree> contact_tree_ptr);
212
213 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data,
214 EntitiesFieldData::EntData &col_data);
215
216private:
217 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
218 boost::shared_ptr<ContactTree> contactTreePtr;
219};
220
221struct OpMoveNode : public FaceElementForcesAndSourcesCore::UserDataOperator {
222
223 using UOP = FaceElementForcesAndSourcesCore::UserDataOperator;
224
225 OpMoveNode(boost::shared_ptr<ContactTree> contact_tree_ptr,
226 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
227 boost::shared_ptr<MatrixDouble> u_h1_ptr);
228 MoFEMErrorCode doWork(int side, EntityType type,
229 EntitiesFieldData::EntData &data);
230
231protected:
232 boost::shared_ptr<ContactTree> contactTreePtr;
233 boost::shared_ptr<MatrixDouble> uH1Ptr;
234 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
235};
236
237struct OpTreeSearch : public FaceElementForcesAndSourcesCore::UserDataOperator {
238
239 using UOP = FaceElementForcesAndSourcesCore::UserDataOperator;
240
241 OpTreeSearch(boost::shared_ptr<ContactTree> contact_tree_ptr,
242 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
243 boost::shared_ptr<MatrixDouble> u_h1_ptr, Range r,
244
245 moab::Interface *post_proc_mesh_ptr,
246 std::vector<EntityHandle> *map_gauss_pts_ptr
247
248 );
249 MoFEMErrorCode doWork(int side, EntityType type,
250 EntitiesFieldData::EntData &data);
251
252protected:
253 boost::shared_ptr<ContactTree> contactTreePtr;
254 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
255 boost::shared_ptr<MatrixDouble> uH1Ptr;
256
257 moab::Interface *postProcMeshPtr = nullptr;
258 std::vector<EntityHandle> *mapGaussPtsPtr = nullptr;
259
261};
262
263} // namespace EshelbianPlasticity
ElementsAndOps< SPACE_DIM >::BoundaryEle BoundaryEle
double cn_contact
Definition contact.cpp:99
double alpha_contact_quadratic
double alpha_contact_const
double airplane_ray_distance
FormsIntegrators< BoundaryEleOp >::Assembly< A >::OpBase AssemblyBoundaryEleOp
ElementsAndOps< SPACE_DIM >::SideEle SideEle
Definition plastic.cpp:61
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition radiation.cpp:29
boost::shared_ptr< OrientedBoxTreeTool > & getTreeSurfPtr()
std::map< EntityHandle, std::vector< FaceData > > MapFaceData
boost::shared_ptr< OrientedBoxTreeTool > treeSurfPtr
auto findFaceDataVecPtr(EntityHandle fe_ent)
PostProcBrokenMeshInMoabBase< FaceElementForcesAndSourcesCore > Base
auto getFaceDataPtr(std::vector< FaceData >::iterator &it, int gg, std::vector< FaceData > *vec_ptr)
MoFEMErrorCode buildTree(Range &ents)
ContactTree(MoFEM::Interface &m_field, boost::shared_ptr< moab::Core > core_mesh_ptr, int max_order, std::map< int, Range > &&body_map)
boost::shared_ptr< std::map< int, Range > > sdfMapRangePtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpConstrainBoundaryL2Lhs_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< ContactOps::CommonData > common_data_ptr, boost::shared_ptr< ContactTree > contact_tree_ptr, boost::shared_ptr< std::map< int, Range > > sdf_map_range_ptr=nullptr)
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
boost::shared_ptr< std::map< int, Range > > sdfMapRangePtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
boost::shared_ptr< ContactTree > contactTreePtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
OpConstrainBoundaryL2Rhs(const std::string row_field_name, boost::shared_ptr< ContactOps::CommonData > common_data_ptr, boost::shared_ptr< ContactTree > contact_tree_ptr, boost::shared_ptr< std::map< int, Range > > sdf_map_range_ptr=nullptr)
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
boost::shared_ptr< ContactTree > contactTreePtr
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
FaceElementForcesAndSourcesCore::UserDataOperator UOP
boost::shared_ptr< MatrixDouble > uH1Ptr
OpMoveNode(boost::shared_ptr< ContactTree > contact_tree_ptr, boost::shared_ptr< ContactOps::CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > u_h1_ptr)
boost::shared_ptr< ContactTree > contactTreePtr
std::vector< EntityHandle > * mapGaussPtsPtr
boost::shared_ptr< MatrixDouble > uH1Ptr
OpTreeSearch(boost::shared_ptr< ContactTree > contact_tree_ptr, boost::shared_ptr< ContactOps::CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > u_h1_ptr, Range r, moab::Interface *post_proc_mesh_ptr, std::vector< EntityHandle > *map_gauss_pts_ptr)
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
FaceElementForcesAndSourcesCore::UserDataOperator UOP
Deprecated interface functions.
Data on single entity (This is passed as argument to DataOperator::doWork)