|
| 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 305 of file EshelbianContact.cpp.
311 ContactOps::BoundaryEleOp::OPROW),
321 "get alpha contact failed");
325 "get alpha contact failed");
329 "get alpha contact failed");
◆ iNtegrate()
Definition at line 342 of file EshelbianContact.cpp.
350 const size_t nb_gauss_pts = getGaussPts().size2();
355 "Wrong number of integration pts %d != %d",
363 auto t_w = getFTensor0IntegrationWeight();
364 auto t_coords = getFTensor1CoordsAtGaussPts();
365 auto t_disp = getFTensor1FromMat<3>(
commonDataPtr->contactDisp);
366 auto t_traction = getFTensor1FromMat<3>(
commonDataPtr->contactTraction);
371 auto [block_id, m_normals_at_pts, v_sdf, m_grad_sdf, m_hess_sdf] =
376 auto t_grad_sdf_v = getFTensor1FromMat<3>(m_grad_sdf);
377 auto t_normalize_normal = getFTensor1FromMat<3>(m_normals_at_pts);
384 ++t_normalize_normal;
389 auto face_data_vec_ptr =
391 auto face_gauss_pts_it = face_data_vec_ptr->begin();
393 auto nb_base_functions = data.getN().size2();
394 auto t_base = data.getFTensor0N();
395 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
398 auto face_data_ptr =
contactTreePtr->getFaceDataPtr(face_gauss_pts_it, gg,
401 auto check_face_contact = [&]() {
409 auto tn = t_traction(
i) * t_grad_sdf_v(
i);
412 constexpr
double c = 0;
415 if (!
c && check_face_contact()) {
417 t_spatial_coords(
i) = t_coords(
i) + t_disp(
i);
418 auto t_rhs_tmp =
multiPointRhs(face_data_ptr, t_coords, t_spatial_coords,
420 t_rhs(
i) = t_rhs_tmp(
i);
428 t_cP(
i,
j) = (
c * t_grad_sdf_v(
i)) * t_grad_sdf_v(
j);
431 t_cQ(
i,
j) * t_traction(
j) + (
c * inv_cn * t_sdf_v) * t_grad_sdf_v(
i);
433 t_rhs(
i) = t_traction(
i);
437 auto t_nf = getFTensor1FromPtr<3>(&nf[0]);
438 const double alpha = t_w * getMeasure();
441 for (; bb != nbRows / 3; ++bb) {
442 const double beta = alpha * t_base;
443 t_nf(
i) += beta * t_rhs(
i);
447 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)