663                                              {
  665 
  666  auto fe_type = BoundaryEleOp::getFEType();
  667 
  668  const auto fe_ent = BoundaryEleOp::getFEEntityHandle();
  669 
  674 
  675    auto t_w = BoundaryEleOp::getFTensor0IntegrationWeight();
  676    auto t_traction = getFTensor1FromMat<DIM>(
commonDataPtr->contactTraction);
 
  677    auto t_coords = BoundaryEleOp::getFTensor1CoordsAtGaussPts();
  678 
  679    auto t_grad = getFTensor2FromMat<DIM, DIM>(
commonDataPtr->contactDispGrad);
 
  680    auto t_normal_at_pts = BoundaryEleOp::getFTensor1NormalsAtGaussPts();
  681 
  682    const auto nb_gauss_pts = BoundaryEleOp::getGaussPts().size2();
  684        BoundaryEleOp::getFTensor1CoordsAtGaussPts(),
  685        getFTensor1FromMat<DIM>(
commonDataPtr->contactDisp), nb_gauss_pts);
 
  687        BoundaryEleOp::getFTensor1NormalsAtGaussPts(), nb_gauss_pts);
  688 
  689    auto t_normal = getFTensor1FromMat<3>(m_normals_at_pts);
  690    auto ts_time = BoundaryEleOp::getTStime();
  691    auto ts_time_step = BoundaryEleOp::getTStimeStep();
  692    int block_id = 0;
  693    auto v_sdf =
  695                                m_spatial_coords, m_normals_at_pts, block_id);
  697        ts_time_step, ts_time, nb_gauss_pts, m_spatial_coords, m_normals_at_pts,
  698        block_id);
  699    auto t_sdf = getFTensor0FromVec(v_sdf);
  700    auto t_grad_sdf = getFTensor1FromMat<3>(m_grad_sdf);
  701    for (auto gg = 0; gg != nb_gauss_pts; ++gg) {
  702      double jacobian = 1.;
  704        jacobian = 2. * M_PI * t_coords(0); 
  705      }
  706      auto tn = -t_traction(
i) * t_grad_sdf(
i);
 
  708      double alpha = t_w * jacobian;
  709 
  713 
  715      auto det = determinantTensor(
F);
 
  716      CHKERR invertTensor(
F, det, invF);
 
  717      t_normal_current(
i) = det * (invF(
j, 
i) * t_normal_at_pts(
j));
 
  718 
  719      alpha *= sqrt(t_normal_current(
i) * t_normal_current(
i));
 
  720 
  721      if (fe_type == MBTRI) {
  722        alpha /= 2;
  723      }
  725        t_sum_a(0) += alpha; 
  726      }
  727      t_sum_a(1) += alpha; 
  728      ++t_w;
  729      ++t_traction;
  730      ++t_coords;
  731      ++t_sdf;
  732      ++t_grad_sdf;
  733 
  734      ++t_grad;
  735      ++t_normal_at_pts;
  736    }
  737    constexpr int ind[] = {3, 4};
 
  739                        ADD_VALUES);
  740  }
  742}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#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
const double c
speed of light (cm/ns)
FTensor::Index< 'j', 3 > j
Tensor2_Expr< Kronecker_Delta< T >, T, Dim0, Dim1, i, j > kronecker_delta(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
Rank 2.
MoFEMErrorCode VecSetValues(Vec V, const EntitiesFieldData::EntData &data, const double *ptr, InsertMode iora)
Assemble PETSc vector.