4554 {
4556
4557#ifndef NDEBUG
4558 auto fe_mi_ptr = getFEMethod()->numeredEntFiniteElementPtr;
4559 auto pstatus = fe_mi_ptr->getPStatus();
4560 if (pstatus) {
4561 auto owner = fe_mi_ptr->getOwnerProc();
4563 << "OpFaceMaterialForce: owner proc is not 0, owner proc: " << owner
4564 << " " << getPtrFE()->mField.get_comm_rank();
4565 }
4566#endif
4567
4569
4572 double face_pressure = 0.;
4573 auto t_T =
dataAtPts->getFTensorFaceMaterialForce(
4574 getGaussPts().size2());
4575 auto t_p =
4577 auto t_w = getFTensor0IntegrationWeight();
4578 for (auto gg = 0; gg != getGaussPts().size2(); ++gg) {
4579 t_face_T(
I) += t_w * t_T(
I);
4580 face_pressure += t_w * t_p;
4581 ++t_w;
4582 ++t_T;
4583 ++t_p;
4584 }
4585 t_face_T(
I) *= getMeasure();
4586 face_pressure *= getMeasure();
4587
4588 auto get_tag = [&](
auto name,
auto dim) {
4589 auto &moab = getPtrFE()->mField.get_moab();
4591 double def_val[] = {0., 0., 0.};
4593 MB_TAG_CREAT | MB_TAG_SPARSE, def_val),
4594 "create tag");
4595 return tag;
4596 };
4597
4598 auto set_tag = [&](auto &&tag, auto ptr) {
4599 auto &moab = getPtrFE()->mField.get_moab();
4600 auto face = getPtrFE()->getFEEntityHandle();
4601 CHK_MOAB_THROW(moab.tag_set_data(tag, &face, 1, ptr),
"set tag");
4602 };
4603
4604 set_tag(get_tag("MaterialForce", 3), &t_face_T(0));
4605 set_tag(get_tag("FacePressure", 1), &face_pressure);
4606
4608}
#define FTENSOR_INDEX(DIM, I)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MOFEM_LOG(channel, severity)
Log.
static auto getFTensor0FromVec(V &data)
Get tensor rank 0 (scalar) form data vector.
constexpr IntegrationType I