102 {
104
106
107 const size_t nb_integration_pts = getGaussPts().size2();
108 const size_t nb_row_base_functions = row_data.getN().size2();
109
110 auto t_res_flow_dstrain = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
112
113 auto next = [&]() {
114 ++t_res_flow_dstrain;
115 };
116
120 t_diff_grad;
122
123 auto t_w = getFTensor0IntegrationWeight();
124 auto t_row_base = row_data.getFTensor0N();
125 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
126
127 double alpha = getMeasure() * t_w;
128 ++t_w;
130 t_res_tens(
L,
i,
j) =
131 alpha * ((t_L(
m,
n,
L) * (t_res_flow_dstrain(
m,
n,
k,
l))) *
132 t_diff_grad(
k,
l,
i,
j));
133 next();
134
135 size_t rr = 0;
137 auto t_mat =
139 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
141 t_mat(
L,
l) += t_row_base * (t_res_tens(
L,
l,
k) * t_col_diff_base(
k));
142 ++t_mat;
143 ++t_col_diff_base;
144 }
145 ++t_row_base;
146 }
147
148 for (; rr < nb_row_base_functions; ++rr)
149 ++t_row_base;
150 }
151
153}
#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< 'j', SPACE_DIM > j
FTensor::Index< 'L', size_symm > L
FTensor::Index< 'l', SPACE_DIM > l
FTensor::Index< 'k', SPACE_DIM > k
FTensor::Index< 'i', SPACE_DIM > i
[Common data]
FTensor::Index< 'm', SPACE_DIM > m
FTensor::Index< 'n', SPACE_DIM > n
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
int nbRows
number of dofs on rows
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column