281 {
283
288
289 auto get_K_at_pts =
291 *
matK, OP::nbIntegrationPts);
292
294
295
296 const double vol = OP::getMeasure();
297
298 auto t_w = OP::getFTensor0IntegrationWeight();
299
300 auto t_row_grad = row_data.getFTensor2DiffN2<
SPACE_DIM>();
301
302 auto t_K_at_pts = get_K_at_pts();
303
304 auto t_coords = OP::getFTensor1CoordsAtGaussPts();
305
306 for (int gg = 0; gg != OP::nbIntegrationPts; gg++) {
307
308 const double alpha = t_w * vol * t_K_at_pts(0);
309
310 int rr = 0;
311 for (; rr != OP::nbRows /
FIELD_DIM; rr++) {
312
313 auto t_mat = getFTensor2FromArray<FIELD_DIM, FIELD_DIM, FIELD_DIM>(
315 auto t_col_grad = col_data.getFTensor2DiffN2<
SPACE_DIM>(gg, 0);
316
317
318 for (
int cc = 0; cc != OP::nbCols /
FIELD_DIM; cc++) {
320 alpha * (t_row_grad(
J,
K) * t_col_grad(
J,
K)) *
t_kd(
i,
j);
321 ++t_col_grad;
322
323 ++t_mat;
324 }
325 ++t_row_grad;
326
327 }
328 for (; rr < OP::nbRowBaseFunctions; ++rr)
329 ++t_row_grad;
330
331 ++t_coords;
332 ++t_K_at_pts;
333 ++t_w;
334 }
336}
#define FTENSOR_INDEX(DIM, I)
#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< 'J', DIM1 > J
FTensor::Index< 'j', 3 > j
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
decltype(GetFTensor1FromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor1FromMatType