1088                                                  {
 1090 
 1094 
 1095  const size_t nb_gauss_pts = AssemblyBoundaryEleOp::getGaussPts().size2();
 1096  auto &locMat = AssemblyBoundaryEleOp::locMat;
 1097 
 1098  auto t_normal_at_pts = AssemblyBoundaryEleOp::getFTensor1NormalsAtGaussPts();
 1099  auto t_traction = getFTensor1FromMat<DIM>(
commonDataPtr->contactTraction);
 
 1100  auto t_coords = AssemblyBoundaryEleOp::getFTensor1CoordsAtGaussPts();
 1101 
 1102  auto t_w = AssemblyBoundaryEleOp::getFTensor0IntegrationWeight();
 1103  auto t_row_base = row_data.getFTensor1N<3>();
 1104  size_t nb_face_functions = row_data.getN().size2() / 3;
 1105 
 1107      BoundaryEleOp::getFTensor1CoordsAtGaussPts(),
 1108      getFTensor1FromMat<DIM>(
commonDataPtr->contactDisp), nb_gauss_pts);
 
 1110      BoundaryEleOp::getFTensor1NormalsAtGaussPts(), nb_gauss_pts);
 1111 
 1112  auto t_normal = getFTensor1FromMat<3>(m_normals_at_pts);
 1113 
 1114  auto ts_time = AssemblyBoundaryEleOp::getTStime();
 1115  auto ts_time_step = AssemblyBoundaryEleOp::getTStimeStep();
 1116 
 1117  
 1118  int block_id = 0;
 1119 
 1120  auto v_sdf =
 1122                              m_spatial_coords, m_normals_at_pts, block_id);
 1123 
 1124  auto m_grad_sdf =
 1126                                  m_spatial_coords, m_normals_at_pts, block_id);
 1127 
 1128  auto t_sdf = getFTensor0FromVec(v_sdf);
 1129  auto t_grad_sdf = getFTensor1FromMat<3>(m_grad_sdf);
 1130 
 1131  for (size_t gg = 0; gg != nb_gauss_pts; ++gg) {
 1132 
 1133    double jacobian = 1.;
 1135      jacobian = 2. * M_PI * t_coords(0);
 1136    }
 1137    const double alpha = t_w * jacobian * AssemblyBoundaryEleOp::getMeasure();
 1138 
 1139    auto tn = -t_traction(
i) * t_grad_sdf(
i);
 
 1141 
 1143    t_cP(
i, 
j) = (
c * t_grad_sdf(
i)) * t_grad_sdf(
j);
 
 1146 
 1149 
 1150    size_t rr = 0;
 1151    for (; rr != AssemblyBoundaryEleOp::nbRows / DIM; ++rr) {
 1152 
 1153      auto t_mat = getFTensor2FromArray<DIM, DIM, DIM>(locMat, DIM * rr);
 1154      const double row_base = t_row_base(
i) * t_normal(
i);
 
 1155 
 1156      auto t_col_base = col_data.getFTensor1N<3>(gg, 0);
 1157      for (size_t cc = 0; cc != AssemblyBoundaryEleOp::nbCols / DIM; ++cc) {
 1158        const double col_base = t_col_base(
i) * t_normal(
i);
 
 1159        const double beta = alpha * row_base * col_base;
 1160 
 1161        t_mat(
i, 
j) -= beta * t_res_dt(
i, 
j);
 
 1162 
 1163        ++t_col_base;
 1164        ++t_mat;
 1165      }
 1166 
 1167      ++t_row_base;
 1168    }
 1169    for (; rr < nb_face_functions; ++rr)
 1170      ++t_row_base;
 1171 
 1172    ++t_traction;
 1173    ++t_coords;
 1174    ++t_w;
 1175    ++t_normal;
 1176    ++t_sdf;
 1177    ++t_grad_sdf;
 1178  }
 1179 
 1181}
#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()
FTensor::Index< 'i', SPACE_DIM > i
const double c
speed of light (cm/ns)
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
Tensor2_Expr< Kronecker_Delta< T >, T, Dim0, Dim1, i, j > kronecker_delta(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
Rank 2.