v0.14.0
Public Member Functions | Private Attributes | List of all members
ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp > Struct Template Reference

#include <users_modules/tutorials/adv-1/src/ContactOps.hpp>

Inheritance diagram for ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >:
[legend]
Collaboration diagram for ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >:
[legend]

Public Member Functions

 OpEvaluateSDFImpl (boost::shared_ptr< CommonData > common_data_ptr)
 
MoFEMErrorCode doWork (int side, EntityType type, EntData &data)
 

Private Attributes

boost::shared_ptr< CommonDatacommonDataPtr
 
SurfaceDistanceFunction surfaceDistanceFunction = surface_distance_function
 
GradSurfaceDistanceFunction gradSurfaceDistanceFunction
 
HessSurfaceDistanceFunction hessSurfaceDistanceFunction
 

Detailed Description

template<int DIM, typename BoundaryEleOp>
struct ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >

Definition at line 451 of file ContactOps.hpp.

Constructor & Destructor Documentation

◆ OpEvaluateSDFImpl()

template<int DIM, typename BoundaryEleOp >
ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::OpEvaluateSDFImpl ( boost::shared_ptr< CommonData common_data_ptr)
Examples
ContactOps.hpp.

Definition at line 622 of file ContactOps.hpp.

625  commonDataPtr(common_data_ptr) {}

Member Function Documentation

◆ doWork()

template<int DIM, typename BoundaryEleOp >
MoFEMErrorCode ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::doWork ( int  side,
EntityType  type,
EntData data 
)
Examples
ContactOps.hpp.

Definition at line 629 of file ContactOps.hpp.

630  {
632 
633  const auto nb_gauss_pts = BoundaryEleOp::getGaussPts().size2();
634  auto &sdf_vec = commonDataPtr->sdfVals;
635  auto &grad_mat = commonDataPtr->gradsSdf;
636  auto &hess_mat = commonDataPtr->hessSdf;
637  auto &constraint_vec = commonDataPtr->constraintVals;
638  auto &contactTraction_mat = commonDataPtr->contactTraction;
639 
640  sdf_vec.resize(nb_gauss_pts, false);
641  grad_mat.resize(DIM, nb_gauss_pts, false);
642  hess_mat.resize((DIM * (DIM + 1)) / 2, nb_gauss_pts, false);
643  constraint_vec.resize(nb_gauss_pts, false);
644 
645  auto t_traction = getFTensor1FromMat<DIM>(contactTraction_mat);
646 
647  auto t_sdf = getFTensor0FromVec(sdf_vec);
648  auto t_grad_sdf = getFTensor1FromMat<DIM>(grad_mat);
649  auto t_hess_sdf = getFTensor2SymmetricFromMat<DIM>(hess_mat);
650  auto t_constraint = getFTensor0FromVec(constraint_vec);
651 
652  auto t_disp = getFTensor1FromMat<DIM>(commonDataPtr->contactDisp);
654  auto t_normal_at_pts = BoundaryEleOp::getFTensor1NormalsAtGaussPts();
655 
658 
659  auto ts_time = BoundaryEleOp::getTStime();
660  auto ts_time_step = BoundaryEleOp::getTStimeStep();
661 
662  auto m_spatial_coords = get_spatial_coords(
664  getFTensor1FromMat<DIM>(commonDataPtr->contactDisp), nb_gauss_pts);
665  auto m_normals_at_pts = get_normalize_normals(
667 
668  // placeholder to pass boundary block id to python
669  int block_id = 0;
670 
671  auto v_sdf =
672  surfaceDistanceFunction(ts_time_step, ts_time, nb_gauss_pts,
673  m_spatial_coords, m_normals_at_pts, block_id);
674 
675  auto m_grad_sdf =
676  gradSurfaceDistanceFunction(ts_time_step, ts_time, nb_gauss_pts,
677  m_spatial_coords, m_normals_at_pts, block_id);
678 
679  auto m_hess_sdf =
680  hessSurfaceDistanceFunction(ts_time_step, ts_time, nb_gauss_pts,
681  m_spatial_coords, m_normals_at_pts, block_id);
682 
683  auto t_sdf_v = getFTensor0FromVec(v_sdf);
684  auto t_grad_sdf_v = getFTensor1FromMat<3>(m_grad_sdf);
685  auto t_hess_sdf_v = getFTensor2SymmetricFromMat<3>(m_hess_sdf);
686 
687  auto next = [&]() {
688  ++t_sdf;
689  ++t_sdf_v;
690  ++t_grad_sdf;
691  ++t_grad_sdf_v;
692  ++t_hess_sdf;
693  ++t_hess_sdf_v;
694  ++t_disp;
695  ++t_traction;
696  ++t_constraint;
697  };
698 
699  for (auto gg = 0; gg != nb_gauss_pts; ++gg) {
700 
701  auto tn = -t_traction(i) * t_grad_sdf_v(i);
702  auto c = constrain(t_sdf_v, tn);
703 
704  t_sdf = t_sdf_v;
705  t_grad_sdf(i) = t_grad_sdf_v(i);
706  t_hess_sdf(i, j) = t_hess_sdf_v(i, j);
707  t_constraint = c;
708 
709  next();
710  }
711 
713 }

Member Data Documentation

◆ commonDataPtr

template<int DIM, typename BoundaryEleOp >
boost::shared_ptr<CommonData> ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::commonDataPtr
private

Definition at line 456 of file ContactOps.hpp.

◆ gradSurfaceDistanceFunction

template<int DIM, typename BoundaryEleOp >
GradSurfaceDistanceFunction ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::gradSurfaceDistanceFunction
private
Initial value:

Definition at line 459 of file ContactOps.hpp.

◆ hessSurfaceDistanceFunction

template<int DIM, typename BoundaryEleOp >
HessSurfaceDistanceFunction ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::hessSurfaceDistanceFunction
private
Initial value:

Definition at line 461 of file ContactOps.hpp.

◆ surfaceDistanceFunction

template<int DIM, typename BoundaryEleOp >
SurfaceDistanceFunction ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::surfaceDistanceFunction = surface_distance_function
private

Definition at line 458 of file ContactOps.hpp.


The documentation for this struct was generated from the following file:
ContactOps::get_spatial_coords
auto get_spatial_coords(FTensor::Tensor1< T1, DIM1 > &&t_coords, FTensor::Tensor1< T2, DIM2 > &&t_disp, size_t nb_gauss_pts)
Definition: ContactOps.hpp:405
NOSPACE
@ NOSPACE
Definition: definitions.h:83
ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::gradSurfaceDistanceFunction
GradSurfaceDistanceFunction gradSurfaceDistanceFunction
Definition: ContactOps.hpp:459
ContactOps::hess_surface_distance_function
MatrixDouble hess_surface_distance_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_spatial_coords, MatrixDouble &m_normals_at_pts, int block_id)
Definition: ContactOps.hpp:330
MoFEM::ForcesAndSourcesCore::UserDataOperator::OPSPACE
@ OPSPACE
operator do Work is execute on space data
Definition: ForcesAndSourcesCore.hpp:570
ContactOps::constrain
double constrain(double sdf, double tn)
constrain function
Definition: ContactOps.hpp:572
ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::commonDataPtr
boost::shared_ptr< CommonData > commonDataPtr
Definition: ContactOps.hpp:456
MoFEM::ForcesAndSourcesCore::UserDataOperator::getTStimeStep
double getTStimeStep() const
Definition: ForcesAndSourcesCore.hpp:1207
MoFEM::ForcesAndSourcesCore::UserDataOperator::getGaussPts
MatrixDouble & getGaussPts()
matrix of integration (Gauss) points for Volume Element
Definition: ForcesAndSourcesCore.hpp:1235
c
const double c
speed of light (cm/ns)
Definition: initial_diffusion.cpp:39
ContactOps::get_normalize_normals
auto get_normalize_normals(FTensor::Tensor1< T1, DIM1 > &&t_normal_at_pts, size_t nb_gauss_pts)
Definition: ContactOps.hpp:422
MoFEM::getFTensor0FromVec
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
Definition: Templates.hpp:135
ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::surfaceDistanceFunction
SurfaceDistanceFunction surfaceDistanceFunction
Definition: ContactOps.hpp:458
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
FTensor::Index< 'i', DIM >
ContactOps::BoundaryEleOp
BoundaryEle::UserDataOperator BoundaryEleOp
Definition: EshelbianContact.hpp:14
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
ContactOps::OpEvaluateSDFImpl< DIM, GAUSS, BoundaryEleOp >::hessSurfaceDistanceFunction
HessSurfaceDistanceFunction hessSurfaceDistanceFunction
Definition: ContactOps.hpp:461
MoFEM::FaceElementForcesAndSourcesCore::UserDataOperator::getFTensor1NormalsAtGaussPts
auto getFTensor1NormalsAtGaussPts()
get normal at integration points
Definition: FaceElementForcesAndSourcesCore.hpp:316
ContactOps::grad_surface_distance_function
MatrixDouble grad_surface_distance_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_spatial_coords, MatrixDouble &m_normals_at_pts, int block_id)
Definition: ContactOps.hpp:273
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
MoFEM::ForcesAndSourcesCore::UserDataOperator::getFTensor1CoordsAtGaussPts
auto getFTensor1CoordsAtGaussPts()
Get coordinates at integration points assuming linear geometry.
Definition: ForcesAndSourcesCore.hpp:1268
MoFEM::ForcesAndSourcesCore::UserDataOperator::getTStime
double getTStime() const
Definition: ForcesAndSourcesCore.hpp:1199