v0.14.0
Public Types | Public Member Functions | Protected Attributes | List of all members
EshelbianPlasticity::OpTreeSearch Struct Reference

#include <users_modules/eshelbian_plasticit/src/EshelbianContact.hpp>

Inheritance diagram for EshelbianPlasticity::OpTreeSearch:
[legend]
Collaboration diagram for EshelbianPlasticity::OpTreeSearch:
[legend]

Public Types

using UOP = FaceElementForcesAndSourcesCore::UserDataOperator
 

Public Member Functions

 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)
 
MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 

Protected Attributes

boost::shared_ptr< ContactTreecontactTreePtr
 
boost::shared_ptr< ContactOps::CommonDatacommonDataPtr
 
boost::shared_ptr< MatrixDouble > uH1Ptr
 
moab::Interface * postProcMeshPtr = nullptr
 
std::vector< EntityHandle > * mapGaussPtsPtr = nullptr
 
Range contactRange
 

Detailed Description

Definition at line 209 of file EshelbianContact.hpp.

Member Typedef Documentation

◆ UOP

Definition at line 211 of file EshelbianContact.hpp.

Constructor & Destructor Documentation

◆ OpTreeSearch()

EshelbianPlasticity::OpTreeSearch::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 
)

Definition at line 1058 of file EshelbianContact.cpp.

1067  : UOP(NOSPACE, UOP::OPSPACE), contactTreePtr(contact_tree_ptr),
1068  commonDataPtr(common_data_ptr), uH1Ptr(u_h1_ptr),
1069  postProcMeshPtr(post_proc_mesh_ptr), mapGaussPtsPtr(map_gauss_pts_ptr),
1070  contactRange(r) {}

Member Function Documentation

◆ doWork()

MoFEMErrorCode EshelbianPlasticity::OpTreeSearch::doWork ( int  side,
EntityType  type,
EntitiesFieldData::EntData data 
)

Definition at line 1072 of file EshelbianContact.cpp.

1073  {
1075 
1076  auto &m_field = getPtrFE()->mField;
1077  auto fe_ent = getNumeredEntFiniteElementPtr()->getEnt();
1078  auto fe_id = id_from_handle(fe_ent);
1079 
1080  if (contactRange.find(fe_ent) == contactRange.end())
1082 
1085 
1086  const auto nb_gauss_pts = getGaussPts().size2();
1087 
1088  auto t_disp_h1 = getFTensor1FromMat<3>(*uH1Ptr);
1089  auto t_coords = getFTensor1CoordsAtGaussPts();
1090  auto t_traction = getFTensor1FromMat<3>(commonDataPtr->contactTraction);
1091 
1092  auto next = [&]() {
1093  ++t_disp_h1;
1094  ++t_traction;
1095  ++t_coords;
1096  };
1097 
1098  auto get_ele_centre = [i](auto t_ele_coords) {
1099  FTensor::Tensor1<double, 3> t_ele_center;
1100  t_ele_center(i) = 0;
1101  for (int nn = 0; nn != 3; nn++) {
1102  t_ele_center(i) += t_ele_coords(i);
1103  ++t_ele_coords;
1104  }
1105  t_ele_center(i) /= 3;
1106  return t_ele_center;
1107  };
1108 
1109  auto get_ele_radius = [i](auto t_ele_center, auto t_ele_coords) {
1111  t_n0(i) = t_ele_center(i) - t_ele_coords(i);
1112  return t_n0.l2();
1113  };
1114 
1115  auto get_face_conn = [this](auto face) {
1116  const EntityHandle *conn;
1117  int num_nodes;
1118  CHK_MOAB_THROW(contactTreePtr->getPostProcMesh().get_connectivity(
1119  face, conn, num_nodes, true),
1120  "get conn");
1121  if (num_nodes != 3) {
1122  CHK_THROW_MESSAGE(MOFEM_DATA_INCONSISTENCY, "face is not a triangle");
1123  }
1124  return conn;
1125  };
1126 
1127  auto get_face_coords = [this](auto conn) {
1128  std::array<double, 9> coords;
1129  CHKERR contactTreePtr->getPostProcMesh().get_coords(conn, 3, coords.data());
1130  return coords;
1131  };
1132 
1133  auto get_closet_face = [this](auto *point_ptr, auto r) {
1134  FTensor::Tensor1<double, 3> t_point_out;
1135  std::vector<EntityHandle> faces_out;
1137  contactTreePtr->getTreeSurfPtr()->sphere_intersect_triangles(
1138  point_ptr, r / 3, contactTreePtr->getRootSetSurf(), faces_out),
1139  "get closest faces");
1140  return faces_out;
1141  };
1142 
1143  auto get_faces_out = [this](auto *point_ptr, auto *unit_ray_ptr, auto radius,
1144  auto eps) {
1145  std::vector<double> distances_out;
1146  std::vector<EntityHandle> faces_out;
1148 
1149  contactTreePtr->getTreeSurfPtr()->ray_intersect_triangles(
1150  distances_out, faces_out, contactTreePtr->getRootSetSurf(), eps,
1151  point_ptr, unit_ray_ptr, &radius),
1152 
1153  "get closest faces");
1154  return std::make_pair(faces_out, distances_out);
1155  };
1156 
1157  auto get_normal = [](auto &ele_coords) {
1158  FTensor::Tensor1<double, 3> t_normal;
1159  Tools::getTriNormal(ele_coords.data(), &t_normal(0));
1160  return t_normal;
1161  };
1162 
1163  auto make_map = [&](auto &face_out, auto &face_dist, auto &t_ray_point,
1164  auto &t_unit_ray, auto &t_master_coord) {
1167  std::map<double, EntityHandle> m;
1168  for (auto ii = 0; ii != face_out.size(); ++ii) {
1169  auto face_conn = get_face_conn(face_out[ii]);
1170  auto face_coords = get_face_coords(face_conn);
1171  auto t_face_normal = get_normal(face_coords);
1172  t_face_normal.normalize();
1174  t_x(i) = t_ray_point(i) + t_unit_ray(i) * face_dist[ii];
1176  t_chi(i, j) =
1177  t_x(i) * t_face_normal(j) - t_master_coord(i) * t_unit_ray(j);
1178  if (t_unit_ray(i) * t_face_normal(i) > std::cos(M_PI / 3)) {
1179  auto dot = std::sqrt(t_chi(i, j) * t_chi(i, j));
1180  m[dot] = face_out[ii];
1181  }
1182  }
1183  return m;
1184  };
1185 
1186  auto get_tag_data = [this](auto tag, auto face, auto &vec) {
1188  int tag_length;
1189  CHKERR contactTreePtr->getPostProcMesh().tag_get_length(tag, tag_length);
1190  vec.resize(tag_length);
1191  CHKERR contactTreePtr->getPostProcMesh().tag_get_data(tag, &face, 1,
1192  &*vec.begin());
1194  };
1195 
1196  auto create_tag = [this](const std::string tag_name, const int size) {
1197  double def_VAL[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
1198  Tag th;
1199  if (postProcMeshPtr) {
1200  CHKERR postProcMeshPtr->tag_get_handle(
1201  tag_name.c_str(), size, MB_TYPE_DOUBLE, th,
1202  MB_TAG_CREAT | MB_TAG_SPARSE, def_VAL);
1203  CHKERR postProcMeshPtr->tag_clear_data(th, &*mapGaussPtsPtr->begin(),
1204  mapGaussPtsPtr->size(), def_VAL);
1205  }
1206  return th;
1207  };
1208 
1209  auto set_float_precision = [](const double x) {
1210  if (std::abs(x) < std::numeric_limits<float>::epsilon())
1211  return 0.;
1212  else
1213  return x;
1214  };
1215 
1216  // scalars
1217  auto save_scal_tag = [&](auto &th, auto v, const int gg) {
1219  if (postProcMeshPtr) {
1220  v = set_float_precision(v);
1221  CHKERR postProcMeshPtr->tag_set_data(th, &(*mapGaussPtsPtr)[gg], 1, &v);
1222  }
1224  };
1225 
1226  // adjacencies
1227  auto get_fe_adjacencies = [this](auto fe_ent) {
1228  Range adj_faces;
1229  CHK_MOAB_THROW(getFaceFE()->mField.get_moab().get_adjacencies(
1230  &fe_ent, 1, 2, false, adj_faces, moab::Interface::UNION),
1231  "get adj");
1232  std::set<int> adj_ids;
1233  for (auto f : adj_faces) {
1234  adj_ids.insert(id_from_handle(f));
1235  }
1236  return adj_ids;
1237  };
1238 
1239  auto get_face_id = [this](auto face) {
1240  int id;
1241  if (contactTreePtr->getPostProcMesh().tag_get_data(
1242  contactTreePtr->thEleId, &face, 1, &id) == MB_SUCCESS) {
1243  return id;
1244  }
1245  return -1;
1246  };
1247 
1248  auto get_body_id = [this](auto face) {
1249  int id;
1250  if (contactTreePtr->getPostProcMesh().tag_get_data(
1251  contactTreePtr->thBodyId, &face, 1, &id) == MB_SUCCESS) {
1252  return id;
1253  }
1254  return -1;
1255  };
1256 
1257  auto get_face_part = [this](auto face) {
1258  ParallelComm *pcomm_post_proc_mesh = ParallelComm::get_pcomm(
1259  &(contactTreePtr->getPostProcMesh()), MYPCOMM_INDEX);
1260  int part;
1261  if (contactTreePtr->getPostProcMesh().tag_get_data(
1262  pcomm_post_proc_mesh->part_tag(), &face, 1, &part) == MB_SUCCESS) {
1263  return part;
1264  }
1265  return -1;
1266  };
1267 
1268  auto check_face = [&](auto face, auto fe_id, auto part) {
1269  auto face_id = get_face_id(face);
1270  auto face_part = get_face_part(face);
1271  if (face_id == fe_id && face_part == part)
1272  return true;
1273  return false;
1274  };
1275 
1276  // vectors
1277  VectorDouble3 v(3);
1278  FTensor::Tensor1<FTensor::PackPtr<double *, 0>, 3> t_v(&v[0], &v[1], &v[2]);
1279  auto save_vec_tag = [&](auto &th, auto &t_d, const int gg) {
1281  if (postProcMeshPtr) {
1282  t_v(i) = t_d(i);
1283  for (auto &a : v.data())
1284  a = set_float_precision(a);
1285  CHKERR postProcMeshPtr->tag_set_data(th, &(*mapGaussPtsPtr)[gg], 1,
1286  &*v.data().begin());
1287  }
1289  };
1290 
1291  Tag th_mark = create_tag("contact_mark", 1);
1292  Tag th_mark_slave = create_tag("contact_mark_slave", 1);
1293  Tag th_body_id = create_tag("contact_body_id", 1);
1294  Tag th_gap = create_tag("contact_gap", 1);
1295  Tag th_tn_master = create_tag("contact_tn_master", 1);
1296  Tag th_tn_slave = create_tag("contact_tn_slave", 1);
1297  Tag th_contact_traction = create_tag("contact_traction", 3);
1298  Tag th_contact_traction_master = create_tag("contact_traction_master", 3);
1299  Tag th_contact_traction_slave = create_tag("contact_traction_slave", 3);
1300  Tag th_c = create_tag("contact_c", 1);
1301  Tag th_normal = create_tag("contact_normal", 3);
1302  Tag th_dist = create_tag("contact_dip", 3);
1303 
1304  auto t_ele_centre = get_ele_centre(getFTensor1Coords());
1305  auto ele_radius = get_ele_radius(t_ele_centre, getFTensor1Coords());
1306 
1307  contactTreePtr->shadowDataMap.clear();
1308  auto &shadow_vec = contactTreePtr->shadowDataMap[fe_ent];
1309  shadow_vec.clear();
1310 
1311  auto adj_fe_ids = get_fe_adjacencies(fe_ent);
1312 
1313  for (auto gg = 0; gg != nb_gauss_pts; ++gg) {
1314 
1315  FTensor::Tensor1<double, 3> t_spatial_coords;
1316  t_spatial_coords(i) = t_coords(i) + t_disp_h1(i);
1317 
1318  if (postProcMeshPtr) {
1319  CHKERR save_vec_tag(th_contact_traction, t_traction, gg);
1320  }
1321 
1322  auto faces_close = get_closet_face(&t_spatial_coords(0), ele_radius);
1323  for (auto face_close : faces_close) {
1324  if (check_face(face_close, fe_id, m_field.get_comm_rank())) {
1325 
1326  auto body_id = get_body_id(face_close);
1327 
1328  auto master_face_conn = get_face_conn(face_close);
1329  std::array<double, 9> master_coords;
1330  CHKERR contactTreePtr->getPostProcMesh().tag_get_data(
1331  contactTreePtr->thSmallX, master_face_conn, 3,
1332  master_coords.data());
1333  std::array<double, 9> master_traction;
1334  CHKERR contactTreePtr->getPostProcMesh().tag_get_data(
1335  contactTreePtr->thTraction, master_face_conn, 3,
1336  master_traction.data());
1337  auto t_normal_face_close = get_normal(master_coords);
1338  t_normal_face_close.normalize();
1339 
1340  if (postProcMeshPtr) {
1341  double m = 1;
1342  CHKERR save_scal_tag(th_mark, m, gg);
1343  CHKERR save_scal_tag(th_body_id, static_cast<double>(body_id), gg);
1344  CHKERR save_vec_tag(th_normal, t_normal_face_close, gg);
1345  CHKERR save_vec_tag(th_contact_traction, t_traction, gg);
1346  }
1347 
1348  FTensor::Tensor1<double, 3> t_unit_ray;
1349  t_unit_ray(i) = -t_normal_face_close(i);
1350  FTensor::Tensor1<double, 3> t_ray_point;
1351  t_ray_point(i) = t_spatial_coords(i) - t_unit_ray(i) * ele_radius;
1352 
1353  constexpr double eps = 1e-3;
1354  auto [faces_out, faces_dist] = get_faces_out(
1355  &t_ray_point(0), &t_unit_ray(0), 2 * ele_radius, eps * ele_radius);
1356 
1357  auto m = make_map(faces_out, faces_dist, t_ray_point, t_unit_ray,
1358  t_spatial_coords);
1359  for (auto m_it = m.begin(); m_it != m.end(); ++m_it) {
1360  auto face = m_it->second;
1361  if (face != face_close) {
1362 
1363  if (
1364 
1365  body_id != get_body_id(face) &&
1366  (adj_fe_ids.find(get_face_id(face)) == adj_fe_ids.end() ||
1367  get_face_part(face) != m_field.get_comm_rank())
1368 
1369  ) {
1370 
1371  shadow_vec.push_back(ContactTree::FaceData());
1372  shadow_vec.back().gaussPtNb = gg;
1373 
1374  auto slave_face_conn = get_face_conn(face);
1375  std::array<double, 9> slave_coords;
1376  CHKERR contactTreePtr->getPostProcMesh().tag_get_data(
1377  contactTreePtr->thSmallX, slave_face_conn, 3,
1378  slave_coords.data());
1379  auto t_normal_face = get_normal(slave_coords);
1380  std::array<double, 9> slave_tractions;
1381  CHKERR contactTreePtr->getPostProcMesh().tag_get_data(
1382  contactTreePtr->thTraction, slave_face_conn, 3,
1383  slave_tractions.data());
1384 
1385  auto t_master_point =
1386  getFTensor1FromPtr<3>(shadow_vec.back().masterPoint.data());
1387  auto t_slave_point =
1388  getFTensor1FromPtr<3>(shadow_vec.back().slavePoint.data());
1389  auto t_ray_point_data =
1390  getFTensor1FromPtr<3>(shadow_vec.back().rayPoint.data());
1391  auto t_unit_ray_data =
1392  getFTensor1FromPtr<3>(shadow_vec.back().unitRay.data());
1393 
1394  t_slave_point(i) = t_ray_point(i) + m_it->first * t_unit_ray(i);
1395 
1396  auto eval_position = [&](auto &&t_elem_coords, auto &&t_point) {
1397  std::array<double, 2> loc_coords;
1399  Tools::getLocalCoordinatesOnReferenceThreeNodeTri(
1400  &t_elem_coords(0, 0), &t_point(0), 1,
1401  loc_coords.data()),
1402  "get local coords");
1403  FTensor::Tensor1<double, 3> t_shape_fun;
1404  CHK_THROW_MESSAGE(Tools::shapeFunMBTRI<0>(&t_shape_fun(0),
1405  &loc_coords[0],
1406  &loc_coords[1], 1),
1407  "calc shape fun");
1410  FTensor::Tensor1<double, 3> t_point_out;
1411  t_point_out(i) = t_shape_fun(j) * t_elem_coords(j, i);
1412  return t_point_out;
1413  };
1414 
1415  auto t_master_point_updated = eval_position(
1416  getFTensor2FromPtr<3, 3>(master_coords.data()),
1417  getFTensor1FromPtr<3>(shadow_vec.back().masterPoint.data()));
1418  t_master_point(i) = t_master_point_updated(i);
1419 
1420  auto t_slave_point_updated = eval_position(
1421  getFTensor2FromPtr<3, 3>(slave_coords.data()),
1422  getFTensor1FromPtr<3>(shadow_vec.back().slavePoint.data()));
1423  t_slave_point(i) = t_slave_point_updated(i);
1424 
1425  t_ray_point_data(i) = t_ray_point(i);
1426  t_unit_ray_data(i) = t_unit_ray(i);
1427 
1428  std::copy(master_coords.begin(), master_coords.end(),
1429  shadow_vec.back().masterPointNodes.begin());
1430  std::copy(master_traction.begin(), master_traction.end(),
1431  shadow_vec.back().masterTractionNodes.begin());
1432  std::copy(slave_coords.begin(), slave_coords.end(),
1433  shadow_vec.back().slavePointNodes.begin());
1434  std::copy(slave_tractions.begin(), slave_tractions.end(),
1435  shadow_vec.back().slaveTractionNodes.begin());
1436 
1437  shadow_vec.back().eleRadius = ele_radius;
1438 
1439  // CHKERR get_tag_data(contactTreePtr->thIds, face,
1440  // shadow_vec.back().dofsSlaveIds);
1441  // CHKERR get_tag_data(contactTreePtr->thCoeff, face,
1442  // shadow_vec.back().dofsSlaveCoeff);
1443  // CHKERR get_tag_data(contactTreePtr->thBases, face,
1444  // shadow_vec.back().baseSlaveFuncs);
1445 
1446  if (postProcMeshPtr) {
1447  auto [gap, tn_master, tn_slave, c, t_master_traction,
1448  t_slave_traction] =
1449  multiGetGap(&(shadow_vec.back()), t_spatial_coords);
1450  FTensor::Tensor1<double, 3> t_gap_vec;
1451  t_gap_vec(i) = t_slave_point(i) - t_spatial_coords(i);
1452  CHKERR save_scal_tag(th_gap, gap, gg);
1453  CHKERR save_scal_tag(th_tn_master, tn_master, gg);
1454  CHKERR save_scal_tag(th_tn_slave, tn_slave, gg);
1455  CHKERR save_scal_tag(th_c, c, gg);
1456  double m = 1;
1457  CHKERR save_scal_tag(th_mark_slave, m, gg);
1458  CHKERR save_vec_tag(th_dist, t_gap_vec, gg);
1459  CHKERR save_vec_tag(th_contact_traction_master,
1460  t_master_traction, gg);
1461  CHKERR save_vec_tag(th_contact_traction_slave, t_slave_traction,
1462  gg);
1463  }
1464 
1465  break;
1466  }
1467  }
1468  }
1469  break;
1470  }
1471  }
1472  next();
1473  }
1474 
1476 }

Member Data Documentation

◆ commonDataPtr

boost::shared_ptr<ContactOps::CommonData> EshelbianPlasticity::OpTreeSearch::commonDataPtr
protected

Definition at line 226 of file EshelbianContact.hpp.

◆ contactRange

Range EshelbianPlasticity::OpTreeSearch::contactRange
protected

Definition at line 232 of file EshelbianContact.hpp.

◆ contactTreePtr

boost::shared_ptr<ContactTree> EshelbianPlasticity::OpTreeSearch::contactTreePtr
protected

Definition at line 225 of file EshelbianContact.hpp.

◆ mapGaussPtsPtr

std::vector<EntityHandle>* EshelbianPlasticity::OpTreeSearch::mapGaussPtsPtr = nullptr
protected

Definition at line 230 of file EshelbianContact.hpp.

◆ postProcMeshPtr

moab::Interface* EshelbianPlasticity::OpTreeSearch::postProcMeshPtr = nullptr
protected

Definition at line 229 of file EshelbianContact.hpp.

◆ uH1Ptr

boost::shared_ptr<MatrixDouble> EshelbianPlasticity::OpTreeSearch::uH1Ptr
protected

Definition at line 227 of file EshelbianContact.hpp.


The documentation for this struct was generated from the following files:
NOSPACE
@ NOSPACE
Definition: definitions.h:83
MoFEMFunctionReturnHot
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:447
CHK_MOAB_THROW
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
Definition: definitions.h:576
MoFEM::id_from_handle
auto id_from_handle(const EntityHandle h)
Definition: Templates.hpp:1861
MYPCOMM_INDEX
#define MYPCOMM_INDEX
default communicator number PCOMM
Definition: definitions.h:215
EshelbianPlasticity::OpTreeSearch::UOP
FaceElementForcesAndSourcesCore::UserDataOperator UOP
Definition: EshelbianContact.hpp:211
MoFEM::Types::VectorDouble3
VectorBoundedArray< double, 3 > VectorDouble3
Definition: Types.hpp:92
FTensor::Tensor1< double, 3 >
EntityHandle
CHK_THROW_MESSAGE
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
Definition: definitions.h:596
FTensor::Tensor1::l2
T l2() const
Definition: Tensor1_value.hpp:84
MoFEM::th
Tag th
Definition: Projection10NodeCoordsOnField.cpp:122
EshelbianPlasticity::OpTreeSearch::contactTreePtr
boost::shared_ptr< ContactTree > contactTreePtr
Definition: EshelbianContact.hpp:225
EshelbianPlasticity::OpTreeSearch::contactRange
Range contactRange
Definition: EshelbianContact.hpp:232
sdf.r
int r
Definition: sdf.py:8
FTensor::Tensor2< double, 3, 3 >
c
const double c
speed of light (cm/ns)
Definition: initial_diffusion.cpp:39
CHKERR
#define CHKERR
Inline error check.
Definition: definitions.h:535
EshelbianPlasticity::OpTreeSearch::postProcMeshPtr
moab::Interface * postProcMeshPtr
Definition: EshelbianContact.hpp:229
a
constexpr double a
Definition: approx_sphere.cpp:30
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Index< 'i', 3 >
v
const double v
phase velocity of light in medium (cm/ns)
Definition: initial_diffusion.cpp:40
Range
face_coords
static const double face_coords[4][9]
Definition: forces_and_sources_h1_continuity_check.cpp:13
EshelbianPlasticity::OpTreeSearch::uH1Ptr
boost::shared_ptr< MatrixDouble > uH1Ptr
Definition: EshelbianContact.hpp:227
HenckyOps::f
auto f
Definition: HenckyOps.hpp:15
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
eps
static const double eps
Definition: check_base_functions_derivatives_on_tet.cpp:11
MOFEM_DATA_INCONSISTENCY
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
EshelbianPlasticity::multiGetGap
auto multiGetGap(ContactTree::FaceData *face_data_ptr, FTensor::Tensor1< T1, 3 > &t_spatial_coords)
Definition: EshelbianContact.cpp:169
EshelbianPlasticity::OpTreeSearch::mapGaussPtsPtr
std::vector< EntityHandle > * mapGaussPtsPtr
Definition: EshelbianContact.hpp:230
m
FTensor::Index< 'm', 3 > m
Definition: shallow_wave.cpp:80
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
EshelbianPlasticity::OpTreeSearch::commonDataPtr
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
Definition: EshelbianContact.hpp:226
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346