429 {
431
433
434 const auto nb_integration_pts = getGaussPts().size2();
435 const auto nb_row_base_functions = row_data.getN().size2();
436
437 auto t_res_flow_dstrain = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
439 auto t_res_flow_dstrain_dot = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
442
443 auto next = [&]() {
444 ++t_res_flow_dstrain;
445 ++t_res_flow_dstrain_dot;
446 };
447
448 auto t_w = getFTensor0IntegrationWeight();
449 auto t_row_base = row_data.getFTensor0N();
450 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
451 double alpha = getMeasure() * t_w;
452 ++t_w;
453
456 alpha * (t_L(
i,
j,
O) * ((t_res_flow_dstrain_dot(
i,
j,
k,
l) -
457 t_res_flow_dstrain(
i,
j,
k,
l)) *
459 next();
460
461 size_t rr = 0;
465 auto t_col_base = col_data.getFTensor0N(gg, 0);
467 t_mat(
O,
L) += ((t_row_base * t_col_base) * t_res_mat(
O,
L));
468 ++t_mat;
469 ++t_col_base;
470 }
471
472 ++t_row_base;
473 }
474
475 for (; rr < nb_row_base_functions; ++rr)
476 ++t_row_base;
477 }
478
480}
#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()
static auto get_mat_tensor_sym_dtensor_sym(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
FTensor::Index< 'j', SPACE_DIM > j
FTensor::Index< 'O', size_symm > O
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]
int nbRows
number of dofs on rows
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column