165                                                  {
  167 
  174  constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
 
  176 
  177  auto &locMat = AssemblyDomainEleOp::locMat;
  178 
  179  const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
  180  const auto nb_row_base_functions = row_data.getN().size2();
  181 
  182  if (AssemblyDomainEleOp::colType == MBVERTEX &&
  183      AssemblyDomainEleOp::colSide == 0) {
  184 
  186    auto t_res_diff = getFTensor3FromMat<size_symm, DIM, DIM>(
resDiff);
 
  187 
  188    auto t_res_flow_dstrain =
  189        getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->resFlowDstrain);
 
  190    auto t_grad = getFTensor2FromMat<DIM, DIM>(*(
commonDataPtr->mGradPtr));
 
  191    auto t_logC_dC =
  193 
  194    auto next = [&]() {
  195      ++t_res_flow_dstrain;
  196      ++t_grad;
  197      ++t_logC_dC;
  198      ++t_res_diff;
  199    };
  200 
  205 
  206    for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
  210 
  211      t_diff_ls_dlogC_dC(
i, 
j, 
k, 
l) =
 
  212          (t_res_flow_dstrain(
i, 
j, 
m, 
n)) * (t_logC_dC(
m, 
n, 
k, 
l) / 2);
 
  213 
  216 
  218      t_res_diff(L, 
i, 
j) =
 
  219          (t_L(
m, 
n, L) * t_diff_ls_dlogC_dC(
m, 
n, 
k, 
l)) * t_dC_dF(
k, 
l, 
i, 
j);
 
  220      next();
  221    }
  222  }
  223 
  224  auto t_res_diff = getFTensor3FromMat<size_symm, DIM, DIM>(
resDiff);
 
  225 
  226  auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
  227  auto t_row_base = row_data.getFTensor0N();
  228  for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
  229    double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
  230    ++t_w;
  231 
  232    size_t rr = 0;
  233    for (; rr != AssemblyDomainEleOp::nbRows / 
size_symm; ++rr) {
 
  234      const auto row_base = alpha * t_row_base;
  235      auto t_mat =
  237      auto t_col_diff_base = col_data.getFTensor1DiffN<DIM>(gg, 0);
  238      for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols / DIM; ++cc) {
  239        t_mat(L, 
l) += row_base * (t_res_diff(L, 
l, 
k) * t_col_diff_base(
k));
 
  240        ++t_mat;
  241        ++t_col_diff_base;
  242      }
  243      ++t_row_base;
  244    }
  245 
  246    for (; rr < nb_row_base_functions; ++rr)
  247      ++t_row_base;
  248 
  249    ++t_res_diff;
  250  }
  251 
  253}
#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