|
| v0.14.0
|
#include <users_modules/eshelbian_plasticit/src/EshelbianContact.hpp>
◆ OpConstrainBoundaryL2Rhs()
EshelbianPlasticity::OpConstrainBoundaryL2Rhs::OpConstrainBoundaryL2Rhs |
( |
const std::string |
row_field_name, |
|
|
boost::shared_ptr< ContactOps::CommonData > |
common_data_ptr, |
|
|
boost::shared_ptr< ContactTree > |
contact_tree_ptr, |
|
|
boost::shared_ptr< std::map< int, Range >> |
sdf_map_range_ptr = nullptr |
|
) |
| |
Definition at line 293 of file EshelbianContact.cpp.
309 "get alpha contact failed");
313 "get alpha contact failed");
◆ iNtegrate()
Definition at line 323 of file EshelbianContact.cpp.
331 const size_t nb_gauss_pts = getGaussPts().size2();
336 "Wrong number of integration pts %d != %d",
344 auto t_w = getFTensor0IntegrationWeight();
345 auto t_coords = getFTensor1CoordsAtGaussPts();
346 auto t_disp = getFTensor1FromMat<3>(
commonDataPtr->contactDisp);
347 auto t_traction = getFTensor1FromMat<3>(
commonDataPtr->contactTraction);
350 auto [block_id, m_normals_at_pts, v_sdf, m_grad_sdf, m_hess_sdf] =
355 auto t_grad_sdf_v = getFTensor1FromMat<3>(m_grad_sdf);
356 auto t_normalize_normal = getFTensor1FromMat<3>(m_normals_at_pts);
363 ++t_normalize_normal;
368 auto face_data_vec_ptr =
370 auto face_gauss_pts_it = face_data_vec_ptr->begin();
372 auto nb_base_functions = data.getN().size2();
373 auto t_base = data.getFTensor0N();
374 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
377 auto face_data_ptr =
contactTreePtr->getFaceDataPtr(face_gauss_pts_it, gg,
380 auto check_face_contact = [&]() {
387 auto tn = t_traction(
i) * t_grad_sdf_v(
i);
389 if (!
c && check_face_contact()) {
391 t_spatial_coords(
i) = t_coords(
i) + t_disp(
i);
392 auto t_rhs_tmp =
multiPointRhs(face_data_ptr, t_coords, t_spatial_coords,
394 t_rhs(
i) = t_rhs_tmp(
i);
401 t_cP(
i,
j) = (
c * t_grad_sdf_v(
i)) * t_grad_sdf_v(
j);
404 t_cQ(
i,
j) * t_traction(
j) + (
c * inv_cn * t_sdf_v) * t_grad_sdf_v(
i);
407 auto t_nf = getFTensor1FromPtr<3>(&nf[0]);
408 const double alpha = t_w * getMeasure();
411 for (; bb != nbRows / 3; ++bb) {
412 const double beta = alpha * t_base;
413 t_nf(
i) += beta * t_rhs(
i);
417 for (; bb < nb_base_functions; ++bb)
◆ commonDataPtr
◆ contactTreePtr
boost::shared_ptr<ContactTree> EshelbianPlasticity::OpConstrainBoundaryL2Rhs::contactTreePtr |
|
private |
◆ sdfMapRangePtr
boost::shared_ptr<std::map<int, Range> > EshelbianPlasticity::OpConstrainBoundaryL2Rhs::sdfMapRangePtr |
|
private |
The documentation for this struct was generated from the following files:
boost::shared_ptr< std::map< int, Range > > sdfMapRangePtr
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
auto checkSdf(EntityHandle fe_ent, std::map< int, Range > &sdf_map_range)
const double c
speed of light (cm/ns)
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
FTensor::Index< 'i', SPACE_DIM > i
#define MOFEM_LOG(channel, severity)
Log.
Tensor2_Expr< Kronecker_Delta< T >, T, Dim0, Dim1, i, j > kronecker_delta(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
Rank 2.
auto multiPointRhs(ContactTree::FaceData *face_data_ptr, FTensor::Tensor1< T1, 3 > &t_coords, FTensor::Tensor1< T2, 3 > &t_spatial_coords, FTensor::Tensor1< T3, 3 > &t_master_traction, MultiPointRhsType type, bool debug=false)
FTensor::Index< 'j', 3 > j
@ MOFEM_DATA_INCONSISTENCY
boost::shared_ptr< ContactTree > contactTreePtr
PetscErrorCode PetscOptionsGetScalar(PetscOptions *, const char pre[], const char name[], PetscScalar *dval, PetscBool *set)
FTensor::Index< 'k', 3 > k
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
boost::shared_ptr< ContactOps::CommonData > commonDataPtr
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
FTensor::Index< 'l', 3 > l
auto getSdf(OP_PTR op_ptr, MatrixDouble &contact_disp, int block_id, bool eval_hessian)
@ OPROW
operator doWork function is executed on FE rows