v0.14.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;
15
17 FormsIntegrators<BoundaryEleOp>::Assembly<A>::OpBase;
18
19double cn_contact = 1;
20double scale = 1;
21
22} // namespace ContactOps
23
24#include <ContactOps.hpp>
25
26namespace EshelbianPlasticity {
27
28
30 : public PostProcBrokenMeshInMoabBase<FaceElementForcesAndSourcesCore> {
31
32 using Base = PostProcBrokenMeshInMoabBase<FaceElementForcesAndSourcesCore>;
33 using Base::refElementsMap;
34
36 boost::shared_ptr<moab::Core> core_mesh_ptr, int max_order,
37 std::map<int, Range> &&body_map);
38 MoFEMErrorCode preProcess();
39 MoFEMErrorCode postProcess();
40 inline boost::shared_ptr<OrientedBoxTreeTool> &getTreeSurfPtr() {
41 return treeSurfPtr;
42 }
43 inline auto getRootSetSurf() { return rootSetSurf; }
44 int getMaxLevel() const { return refElementsMap.at(MBTRI)->defMaxLevel; }
45
46 friend struct OpMoveNode;
47 friend struct OpTreeSearch;
49
50 struct FaceData {
51 int gaussPtNb; //< integration points number
52 double gap;
53
54 // std::vector<int> dofsIds;
55 // std::vector<double> dofsCoeffs;
56 // std::vector<double> baseFuncs;
57
58 // std::array<double, 9> closeH1Coords;
59 // std::array<double, 9> farH1Coords;
60 // std::array<double, 9> closeL2Coords;
61 // std::array<double, 9> farL2Coords;
62
63 FaceData() = default;
64 };
65
66 using MapFaceData = std::map<EntityHandle, std::vector<FaceData>>;
67
68 inline auto findFaceFataVecPtr(EntityHandle fe_ent) {
69 auto &map_face_data = shadowDataMap;
70 auto it = map_face_data.find(fe_ent);
71 if (it == map_face_data.end()) {
72 return (std::vector<FaceData> *)nullptr;
73 }
74 return &(it->second);
75 }
76
77 inline auto getFaceDataPtr(std::vector<FaceData>::iterator &it, int gg,
78 std::vector<FaceData> *vec_ptr) {
79 FaceData *face_data_ptr = nullptr;
80 if (it != vec_ptr->end()) {
81 if (it->gaussPtNb == gg) {
82 face_data_ptr = &(*it);
83 ++it;
84 }
85 }
86 return face_data_ptr;
87 }
88
89protected:
90 MoFEMErrorCode buildTree(Range &ents);
91 boost::shared_ptr<OrientedBoxTreeTool> treeSurfPtr;
93
96 Tag thIds;
100
102
103 std::map<int, Range> bodyMap;
104
105 const int maxOrder;
106};
107
108
109using MBSurfaceDistanceFunction = boost::function<double(
110 double t, double x, double y, double z, double tx, double ty, double tz,
111 ContactTree::FaceData *face_data_ptr)>;
112
114 boost::function<FTensor::Tensor1<double, 3>(
115 double t, double x, double y, double z, double tx, double ty, double tz,
116 ContactTree::FaceData *face_data_ptr)>;
117
119 boost::function<FTensor::Tensor2_symmetric<double, 3>(
120 double t, double x, double y, double z, double tx, double ty, double tz,
121 ContactTree::FaceData *face_data_ptr)>;
122
123inline double
124mb_surface_distance_function(double t, double x, double y, double z, double tx,
125 double ty, double tz,
126 ContactTree::FaceData *face_data_ptr) {
127 return ContactOps::surface_distance_function(t, x, y, z, tx, ty, tz);
128}
129
131mb_grad_surface_distance_function(double t, double x, double y, double z,
132 double tx, double ty, double tz,
133 ContactTree::FaceData *face_data_ptr) {
134 return ContactOps::grad_surface_distance_function(t, x, y, z, tx, ty, tz);
135}
136
138mb_hess_surface_distance_function(double t, double x, double y, double z,
139 double tx, double ty, double tz,
140 ContactTree::FaceData *face_data_ptr) {
141 return ContactOps::hess_surface_distance_function(t, x, y, z, tx, ty, tz);
142}
143
145
147 const std::string row_field_name,
148 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
149 boost::shared_ptr<ContactTree> conact_tree_ptr);
150
151 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data);
152
153private:
160
161 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
162 boost::shared_ptr<ContactTree> contactTreePtr;
163};
164
166
168 const std::string row_field_name,
169 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
170 boost::shared_ptr<EntitiesFieldData::EntData> col_data_ptr,
171 boost::shared_ptr<ContactTree> conact_tree_ptr);
172
173 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data);
174 MoFEMErrorCode aSsemble(EntitiesFieldData::EntData &row_data);
175
176private:
183
184 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
185 boost::shared_ptr<EntitiesFieldData::EntData> colDataPtr;
186 boost::shared_ptr<ContactTree> contactTreePtr;
187};
188
191
193 const std::string row_field_name,
194 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
195 boost::shared_ptr<ContactTree> conact_tree_ptr);
196
197 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data,
198 EntitiesFieldData::EntData &col_data);
199
200private:
207
208 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
209 boost::shared_ptr<ContactTree> contactTreePtr;
210};
211
212struct OpLoopSideGetDataForSideEle : ForcesAndSourcesCore::UserDataOperator {
213
214 using UDO = ForcesAndSourcesCore::UserDataOperator;
215
217 const std::string field_name,
218 boost::shared_ptr<EntitiesFieldData::EntData> col_data_ptr);
219
220 MoFEMErrorCode doWork(int side, EntityType type,
221 EntitiesFieldData::EntData &data);
222
223protected:
224 boost::shared_ptr<EntitiesFieldData::EntData> colDataPtr;
225};
226
227struct OpMoveNode : public FaceElementForcesAndSourcesCore::UserDataOperator {
228
229 using UOP = FaceElementForcesAndSourcesCore::UserDataOperator;
230
231 OpMoveNode(boost::shared_ptr<ContactTree> contact_tree_ptr,
232 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
233 boost::shared_ptr<MatrixDouble> u_h1_ptr,
234 boost::shared_ptr<EntitiesFieldData::EntData> col_data_ptr);
235 MoFEMErrorCode doWork(int side, EntityType type,
236 EntitiesFieldData::EntData &data);
237
238protected:
239 boost::shared_ptr<ContactTree> contactTreePtr;
240 boost::shared_ptr<MatrixDouble> uH1Ptr;
241 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
242 boost::shared_ptr<EntitiesFieldData::EntData> colDataPtr;
243};
244
245struct OpTreeSearch : public FaceElementForcesAndSourcesCore::UserDataOperator {
246
247 using UOP = FaceElementForcesAndSourcesCore::UserDataOperator;
248
249 OpTreeSearch(boost::shared_ptr<ContactTree> contact_tree_ptr,
250 boost::shared_ptr<ContactOps::CommonData> common_data_ptr,
251
252 moab::Interface *post_proc_mesh_ptr,
253 std::vector<EntityHandle> *map_gauss_pts_ptr
254
255 );
256 MoFEMErrorCode doWork(int side, EntityType type,
257 EntitiesFieldData::EntData &data);
258
259protected:
260 boost::shared_ptr<ContactTree> contactTreePtr;
261 boost::shared_ptr<ContactOps::CommonData> commonDataPtr;
262 moab::Interface *postProcMeshPtr = nullptr;
263 std::vector<EntityHandle> *mapGaussPtsPtr = nullptr;
264};
265
266} // namespace EshelbianPlasticity
FormsIntegrators< BoundaryEleOp >::Assembly< A >::OpBase AssemblyBoundaryEleOp
double surface_distance_function(double t, double x, double y, double z, double tx, double ty, double tz)
Definition: ContactOps.hpp:214
FTensor::Tensor2_symmetric< double, 3 > hess_surface_distance_function(double t, double x, double y, double z, double tx, double ty, double tz)
Definition: ContactOps.hpp:243
FTensor::Tensor1< double, 3 > grad_surface_distance_function(double t, double x, double y, double z, double tx, double ty, double tz)
Definition: ContactOps.hpp:229
EntitiesFieldData::EntData EntData
boost::function< FTensor::Tensor2_symmetric< double, 3 >(double t, double x, double y, double z, double tx, double ty, double tz, ContactTree::FaceData *face_data_ptr)> MBHessSurfaceDistanceFunction
double mb_surface_distance_function(double t, double x, double y, double z, double tx, double ty, double tz, ContactTree::FaceData *face_data_ptr)
boost::function< double(double t, double x, double y, double z, double tx, double ty, double tz, ContactTree::FaceData *face_data_ptr)> MBSurfaceDistanceFunction
FTensor::Tensor1< double, 3 > mb_grad_surface_distance_function(double t, double x, double y, double z, double tx, double ty, double tz, ContactTree::FaceData *face_data_ptr)
boost::function< FTensor::Tensor1< double, 3 >(double t, double x, double y, double z, double tx, double ty, double tz, ContactTree::FaceData *face_data_ptr)> MBGradSurfaceDistanceFunction
FTensor::Tensor2_symmetric< double, 3 > mb_hess_surface_distance_function(double t, double x, double y, double z, double tx, double ty, double tz, ContactTree::FaceData *face_data_ptr)
constexpr AssemblyType A
constexpr double t
plate stiffness
Definition: plate.cpp:59
constexpr auto field_name
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
PostProcBrokenMeshInMoabBase< FaceElementForcesAndSourcesCore > Base
auto getFaceDataPtr(std::vector< FaceData >::iterator &it, int gg, std::vector< FaceData > *vec_ptr)
auto findFaceFataVecPtr(EntityHandle fe_ent)
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.
MBGradSurfaceDistanceFunction gradSurfaceDistanceFunction
MBHessSurfaceDistanceFunction hessSurfaceDistanceFunction
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< ContactTree > contactTreePtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
MBHessSurfaceDistanceFunction hessSurfaceDistanceFunction
boost::shared_ptr< EntitiesFieldData::EntData > colDataPtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
boost::shared_ptr< ContactTree > contactTreePtr
MBGradSurfaceDistanceFunction gradSurfaceDistanceFunction
MoFEMErrorCode aSsemble(EntitiesFieldData::EntData &row_data)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
MBHessSurfaceDistanceFunction hessSurfaceDistanceFunction
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
MBGradSurfaceDistanceFunction gradSurfaceDistanceFunction
boost::shared_ptr< ContactTree > contactTreePtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
ForcesAndSourcesCore::UserDataOperator UDO
boost::shared_ptr< EntitiesFieldData::EntData > colDataPtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
boost::shared_ptr< ContactTree > contactTreePtr
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
boost::shared_ptr< EntitiesFieldData::EntData > colDataPtr
FaceElementForcesAndSourcesCore::UserDataOperator UOP
boost::shared_ptr< MatrixDouble > uH1Ptr
boost::shared_ptr< ContactTree > contactTreePtr
std::vector< EntityHandle > * mapGaussPtsPtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
FaceElementForcesAndSourcesCore::UserDataOperator UOP
Deprecated interface functions.
std::map< EntityType, PostProcGenerateRefMeshPtr > refElementsMap