v0.16.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Attributes | List of all members
EshelbianPlasticity::OpMoveNode Struct Reference
Inheritance diagram for EshelbianPlasticity::OpMoveNode:
[legend]
Collaboration diagram for EshelbianPlasticity::OpMoveNode:
[legend]

Public Types

using UOP = FaceElementForcesAndSourcesCore::UserDataOperator
 

Public Member Functions

 OpMoveNode (boost::shared_ptr< ContactTree > contact_tree_ptr, boost::shared_ptr< ContactOps::CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > u_h1_ptr)
 
MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 

Protected Attributes

boost::weak_ptr< ContactTreecontactTreePtr
 
boost::shared_ptr< MatrixDouble > uH1Ptr
 
boost::shared_ptr< ContactOps::CommonDatacommonDataPtr
 

Detailed Description

Definition at line 1361 of file EshelbianContact.cpp.

Member Typedef Documentation

◆ UOP

using EshelbianPlasticity::OpMoveNode::UOP = FaceElementForcesAndSourcesCore::UserDataOperator

Definition at line 1363 of file EshelbianContact.cpp.

Constructor & Destructor Documentation

◆ OpMoveNode()

EshelbianPlasticity::OpMoveNode::OpMoveNode ( boost::shared_ptr< ContactTree contact_tree_ptr,
boost::shared_ptr< ContactOps::CommonData common_data_ptr,
boost::shared_ptr< MatrixDouble >  u_h1_ptr 
)

Definition at line 1377 of file EshelbianContact.cpp.

1381 : UOP(NOSPACE, UOP::OPSPACE), contactTreePtr(contact_tree_ptr),
1382 uH1Ptr(u_h1_ptr), commonDataPtr(common_data_ptr) {}
@ NOSPACE
Definition definitions.h:83
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
boost::weak_ptr< ContactTree > contactTreePtr
FaceElementForcesAndSourcesCore::UserDataOperator UOP
boost::shared_ptr< MatrixDouble > uH1Ptr

Member Function Documentation

◆ doWork()

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

Definition at line 1384 of file EshelbianContact.cpp.

1385 {
1387
1388 if (auto contact_tree_ptr = contactTreePtr.lock()) {
1389
1390 auto get_body_id = [&](auto fe_ent) {
1391 for (auto &m : contact_tree_ptr->bodyMap) {
1392 if (m.second.find(fe_ent) != m.second.end()) {
1393 return m.first;
1394 }
1395 }
1396 return -1;
1397 };
1398
1399 auto &moab_post_proc_mesh = contact_tree_ptr->getPostProcMesh();
1400 auto &post_proc_ents = contact_tree_ptr->getPostProcElements();
1401
1402 auto fe_ent = getNumeredEntFiniteElementPtr()->getEnt();
1403 auto fe_id = id_from_handle(fe_ent);
1404 auto body_id = get_body_id(fe_ent);
1405 auto &map_gauss_pts = contact_tree_ptr->getMapGaussPts();
1406
1407 CHKERR moab_post_proc_mesh.tag_clear_data(contact_tree_ptr->thEleId,
1408 post_proc_ents, &fe_id);
1409 CHKERR moab_post_proc_mesh.tag_clear_data(contact_tree_ptr->thBodyId,
1410 post_proc_ents, &body_id);
1411
1412 auto nb_gauss_pts = getGaussPts().size2();
1413 auto t_u_h1 = getFTensor1FromMat<3>(*uH1Ptr);
1414 auto t_u_l2 = getFTensor1FromMat<3>(commonDataPtr->contactDisp);
1415 auto t_coords = getFTensor1CoordsAtGaussPts();
1416
1417 MatrixDouble x_h1(nb_gauss_pts, 3);
1418 auto t_x_h1 = getFTensor1FromPtr<3>(&x_h1(0, 0));
1419 MatrixDouble x_l2(nb_gauss_pts, 3);
1420 auto t_x_l2 = getFTensor1FromPtr<3>(&x_l2(0, 0));
1421 MatrixDouble tractions = trans(commonDataPtr->contactTraction);
1422 MatrixDouble coords = getCoordsAtGaussPts();
1423
1424 FTensor::Index<'i', 3> i;
1425
1426 // VectorDouble bases(nb_bases, 0);
1427 for (auto gg = 0; gg != nb_gauss_pts; ++gg) {
1428 t_x_h1(i) = t_coords(i) + t_u_h1(i);
1429 t_x_l2(i) = t_coords(i) + t_u_l2(i);
1430
1431 ++t_coords;
1432 ++t_u_h1;
1433 ++t_u_l2;
1434 ++t_x_h1;
1435 ++t_x_l2;
1436 }
1437
1438 CHKERR moab_post_proc_mesh.set_coords(
1439 &*map_gauss_pts.begin(), map_gauss_pts.size(), &*x_h1.data().begin());
1440 CHKERR moab_post_proc_mesh.tag_set_data(
1441 contact_tree_ptr->thSmallX, &*map_gauss_pts.begin(),
1442 map_gauss_pts.size(), &*x_h1.data().begin());
1443 CHKERR moab_post_proc_mesh.tag_set_data(
1444 contact_tree_ptr->thLargeX, &*map_gauss_pts.begin(),
1445 map_gauss_pts.size(), &*coords.data().begin());
1446 CHKERR moab_post_proc_mesh.tag_set_data(
1447 contact_tree_ptr->thTraction, &*map_gauss_pts.begin(),
1448 map_gauss_pts.size(), &*tractions.data().begin());
1449
1450 } else {
1451 SETERRQ(PETSC_COMM_WORLD, MOFEM_DATA_INCONSISTENCY,
1452 "ContactTree pointer expired in OpMoveNode");
1453 }
1454
1456}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
FTensor::Index< 'i', SPACE_DIM > i
auto id_from_handle(const EntityHandle h)
FTensor::Index< 'm', 3 > m

Member Data Documentation

◆ commonDataPtr

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

Definition at line 1374 of file EshelbianContact.cpp.

◆ contactTreePtr

boost::weak_ptr<ContactTree> EshelbianPlasticity::OpMoveNode::contactTreePtr
protected

Definition at line 1372 of file EshelbianContact.cpp.

◆ uH1Ptr

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

Definition at line 1373 of file EshelbianContact.cpp.


The documentation for this struct was generated from the following file: