61                                                  {
   63 
   68  constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
 
   70 
   71  auto &locMat = AssemblyDomainEleOp::locMat;
   72 
   73  const size_t nb_integration_pts = row_data.getN().size1();
   74  const size_t nb_row_base_functions = row_data.getN().size2();
   75 
   76  auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*
mDPtr);
 
   78 
   80  t_DL(
i, 
j, L) = t_D(
i, 
j, 
k, 
l) * t_L(
k, 
l, L);
 
   81 
   82  auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
   83  auto t_row_diff_base = row_data.getFTensor1DiffN<DIM>();
   84  for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
   85    double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
   86    ++t_w;
   87 
   88    size_t rr = 0;
   89    for (; rr != AssemblyDomainEleOp::nbRows / DIM; ++rr) {
   90 
   91      auto t_mat =
   93 
   95      t_tmp(
i, L) = (t_DL(
i, 
j, L)) * (alpha * t_row_diff_base(
j));
 
   96 
   97      auto t_col_base = col_data.getFTensor0N(gg, 0);
   98      for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols / 
size_symm; ++cc) {
 
   99 
  100        t_mat(
i, L) -= (t_col_base * t_tmp(
i, L));
 
  101 
  102        ++t_mat;
  103        ++t_col_base;
  104      }
  105 
  106      ++t_row_diff_base;
  107    }
  108 
  109    for (; rr < nb_row_base_functions; ++rr)
  110      ++t_row_diff_base;
  111  }
  112 
  114}
#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 symm_L_tensor(FTensor::Number< DIM >)
static FTensor::Tensor2< FTensor::PackPtr< double *, 3 >, 2, 3 > get_mat_vector_dtensor_sym(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)