237 {
239
240 const auto nb_integration_pts = row_data.getN().size1();
241 const auto nb_row_base_functions = row_data.getN().size2();
242 auto t_w = this->getFTensor0IntegrationWeight();
243
245 auto t_row_base = row_data.getFTensor0N();
246
247
248 auto t_plastic_strain_rate = getFTensor2SymmetricFromMat<DIM>(
250
251
252 auto t_D =
254
255
256 auto t_coords = AssemblyDomainEleOp::getFTensor1CoordsAtGaussPts();
257
262
264 t_coeff_exp(
i,
j) = 0;
266 t_coeff_exp(d, d) = (*coeffExpansionPtr)[
d];
267 }
268
269 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
270
271 double alpha = this->getMeasure() * t_w;
272 auto rr = 0;
273 for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
274 auto t_col_base = col_data.getFTensor0N(gg, 0);
275 for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
276#ifdef HENCKY_SMALL_STRAIN
277 AssemblyDomainEleOp::locMat(rr, cc) -=
278 alpha * t_row_base *
280 t_coeff_exp(
i,
j) * t_D(
i,
j,
k,
l) * t_plastic_strain_rate(
k,
l) *
281 t_col_base;
282#else
283 AssemblyDomainEleOp::locMat(rr, cc) -=
284 alpha * t_row_base *
286 t_coeff_exp(
i,
j) * t_D(
i,
j,
k,
l) * t_plastic_strain_rate(
k,
l) *
287 t_col_base;
288#endif
289 ++t_col_base;
290 }
291
292 ++t_row_base;
293 }
294 for (; rr != nb_row_base_functions; ++rr)
295 ++t_row_base;
296
297 ++t_w;
298 ++t_plastic_strain_rate;
299 ++t_D;
300 ++t_coords;
301 }
302
304}
constexpr int SPACE_DIM
[Define dimension]
#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
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k