167 {
169
171
172 const auto nb_integration_pts = getGaussPts().size2();
173 const auto nb_row_base_functions = row_data.getN().size2();
174
175 auto t_c_dstrain =
176 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->resCdStrain);
178
179 auto next = [&]() {
180 ++t_c_dstrain;
181 };
182
183 auto get_mat_scalar_dvector = [&]() {
187 else
190 };
191
192 auto t_w = getFTensor0IntegrationWeight();
193 auto t_row_base = row_data.getFTensor0N();
194 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
195 double alpha = getMeasure() * t_w;
196 ++t_w;
197
200 ((t_c_dstrain(
k,
l)) * t_diff_grad_symmetrise(
k,
l,
i,
j));
201 next();
202
203 auto t_mat = get_mat_scalar_dvector();
204 size_t rr = 0;
206 const double row_base =
alpha * t_row_base;
207 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
209 t_mat(
i) += row_base * (t_res_mat(
i,
j) * t_col_diff_base(
j));
210 ++t_mat;
211 ++t_col_diff_base;
212 }
213 ++t_row_base;
214 }
215 for (; rr != nb_row_base_functions; ++rr)
216 ++t_row_base;
217 }
218
220}
#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', SPACE_DIM > l
FTensor::Index< 'k', SPACE_DIM > k
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