574 {
576
577 const auto nb_integration_pts = getGaussPts().size2();
578 const auto nb_row_base_functions = row_data.getN().size2();
579
580 auto t_c_dstrain =
581 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->resCdStrain);
582 auto t_c_dstrain_dot =
583 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->resCdStrainDot);
584
585 auto next = [&]() {
586 ++t_c_dstrain;
587 ++t_c_dstrain_dot;
588 };
589
591
592 auto t_w = getFTensor0IntegrationWeight();
593 auto t_row_base = row_data.getFTensor0N();
594 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
595 const double alpha = getMeasure() * t_w;
596 ++t_w;
597
599 t_res_vec(
L) = t_L(
i,
j,
L) * (t_c_dstrain_dot(
i,
j) - t_c_dstrain(
i,
j));
600 next();
601
602 auto t_mat =
604 size_t rr = 0;
606 const auto row_base =
alpha * t_row_base;
607 auto t_col_base = col_data.getFTensor0N(gg, 0);
609 t_mat(
L) += (row_base * t_col_base) * t_res_vec(
L);
610 ++t_mat;
611 ++t_col_base;
612 }
613 ++t_row_base;
614 }
615 for (; rr != nb_row_base_functions; ++rr)
616 ++t_row_base;
617 }
618
620}
#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()
auto get_mat_scalar_dtensor_sym(MatrixDouble &mat, FTensor::Number< 2 >)
FTensor::Index< 'j', SPACE_DIM > j
FTensor::Index< 'L', size_symm > L
FTensor::Index< 'i', SPACE_DIM > i
[Common data]
int nbRows
number of dofs on rows
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column