147                                        {
  149 
  156 
  157  constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
 
  159 
  160  auto &locMat = AssemblyDomainEleOp::locMat;
  161 
  162  const size_t nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
  163  const size_t nb_row_base_functions = row_data.getN().size2();
  164 
  165  auto t_res_flow_dstrain =
  166      getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->resFlowDstrain);
 
  167 
  168  auto next = [&]() { ++t_res_flow_dstrain; };
  169 
  174 
  175  auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
  176  auto t_row_base = row_data.getFTensor0N();
  177  for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
  178 
  179    double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
  180    ++t_w;
  182    t_res_tens(L, 
i, 
j) =
 
  183        alpha * ((t_L(
m, 
n, L) * (t_res_flow_dstrain(
m, 
n, 
k, 
l))) *
 
  184                 t_diff_grad(
k, 
l, 
i, 
j));
 
  185    next();
  186 
  187    size_t rr = 0;
  188    for (; rr != AssemblyDomainEleOp::nbRows / 
size_symm; ++rr) {
 
  189      auto t_mat =
  191      auto t_col_diff_base = col_data.getFTensor1DiffN<DIM>(gg, 0);
  192      for (size_t cc = 0; cc != AssemblyDomainEleOp::nbCols / DIM; ++cc) {
  193        t_mat(L, 
l) += t_row_base * (t_res_tens(L, 
l, 
k) * t_col_diff_base(
k));
 
  194        ++t_mat;
  195        ++t_col_diff_base;
  196      }
  197      ++t_row_base;
  198    }
  199 
  200    for (; rr < nb_row_base_functions; ++rr)
  201      ++t_row_base;
  202  }
  203 
  205}
#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 n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto symm_L_tensor(FTensor::Number< DIM >)
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
FTensor::Index< 'm', 3 > m