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
37 using Base = PostProcBrokenMeshInMoabBase<FaceElementForcesAndSourcesCore>;
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
double cn_contact
Definition contact.cpp:99
double alpha_contact_quadratic
FormsIntegrators< BoundaryEleOp >::Assembly< A >::OpBase AssemblyBoundaryEleOp
double alpha_contact_const
double airplane_ray_distance
EntitiesFieldData::EntData EntData
PostProcEleByDim< SPACE_DIM >::SideEle SideEle
constexpr AssemblyType A
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)
MoFEMErrorCode preProcess()
function is run at the beginning of loop
MoFEMErrorCode postProcess()
function is run at the end of loop
int getMaxLevel() const
Determine refinement level based on fields approx ordre.
boost::shared_ptr< std::map< int, Range > > sdfMapRangePtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
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)
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
boost::shared_ptr< ContactTree > contactTreePtr
std::vector< EntityHandle > * mapGaussPtsPtr
boost::shared_ptr< MatrixDouble > uH1Ptr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
FaceElementForcesAndSourcesCore::UserDataOperator UOP
Deprecated interface functions.