223                                        {
  225 
  230 
  231  auto &locMat = AssemblyDomainEleOp::locMat;
  232 
  233  const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
  234  const auto nb_row_base_functions = row_data.getN().size2();
  235 
  236  auto t_c_dstrain =
  237      getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->resCdStrain);
 
  239 
  240  auto next = [&]() { ++t_c_dstrain; };
  241 
  242  auto get_mat_scalar_dvector = [&]() {
  243    if constexpr (DIM == 2)
  245                                                                &locMat(0, 1)};
  246    else
  248          &locMat(0, 0), &locMat(0, 1), &locMat(0, 2)};
  249  };
  250 
  251  auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
  252  auto t_row_base = row_data.getFTensor0N();
  253  for (auto gg = 0; gg != nb_integration_pts; ++gg) {
  254    double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
  255    ++t_w;
  256 
  259        ((t_c_dstrain(
k, 
l)) * t_diff_grad_symmetrise(
k, 
l, 
i, 
j));
 
  260    next();
  261 
  262    auto t_mat = get_mat_scalar_dvector();
  263    size_t rr = 0;
  264    for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
  265      const double row_base = alpha * t_row_base;
  266      auto t_col_diff_base = col_data.getFTensor1DiffN<DIM>(gg, 0);
  267      for (size_t cc = 0; cc != AssemblyDomainEleOp::nbCols / DIM; cc++) {
  268        t_mat(
i) += row_base * (t_res_mat(
i, 
j) * t_col_diff_base(
j));
 
  269        ++t_mat;
  270        ++t_col_diff_base;
  271      }
  272      ++t_row_base;
  273    }
  274    for (; rr != nb_row_base_functions; ++rr)
  275      ++t_row_base;
  276  }
  277 
  279}
#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
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto diff_symmetrize(FTensor::Number< DIM >)