226 {
228
232
233 auto get_val_grad_at_pts = MatrixSizeHelper<
235 DL>::get(*
matVals, OP::nbIntegrationPts);
236 auto get_K_at_pts =
238 *
matK, OP::nbIntegrationPts);
239
240
241 const double vol = OP::getMeasure();
242
243 auto t_w = OP::getFTensor0IntegrationWeight();
244
245 auto t_row_grad = row_data.getFTensor2DiffN2<
SPACE_DIM>();
246
247 auto t_val_grad_at_pts =
248 get_val_grad_at_pts();
249
250 auto t_K_at_pts = get_K_at_pts();
251
252 auto t_coords = OP::getFTensor1CoordsAtGaussPts();
253
254 for (int gg = 0; gg != OP::nbIntegrationPts; gg++) {
255
256 const double alpha = t_w * vol * t_K_at_pts(0);
257
258 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(OP::locF);
259
260 int rr = 0;
261 for (; rr != OP::nbRows /
FIELD_DIM; rr++) {
262
263 t_nf(
i) += alpha * (t_row_grad(
J,
K) * t_val_grad_at_pts(
i,
J,
K));
264 ++t_row_grad;
265
266 }
267 for (; rr < OP::nbRowBaseFunctions; ++rr)
268 ++t_row_grad;
269
270 ++t_coords;
271 ++t_val_grad_at_pts;
272 ++t_K_at_pts;
273 ++t_w;
274 }
276}
#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
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
decltype(GetFTensor1FromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor1FromMatType
decltype(GetFTensor3FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor3FromMatType