Integrate grad-grad operator.
1265 {
1267
1268 const size_t nb_row_dofs = row_data.getIndices().size();
1269 const size_t nb_col_dofs = col_data.getIndices().size();
1270
1271 if (nb_row_dofs && nb_col_dofs) {
1272
1277
1278
1279 double vol = OpBase::getMeasure();
1280
1281
1282 auto t_w = OpBase::getFTensor0IntegrationWeight();
1283
1284
1285 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
1286
1287
1288 using DL = DataLayoutTraits<DataLayout::GaussByCoeffs>;
1289 auto get_D_at_pts = MatrixSizeHelper<
1293 auto t_D_at_pts = get_D_at_pts();
1294
1295
1296 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1297
1298
1300
1301
1302 double a = t_w * vol *
betaCoeff(t_coords(0), t_coords(1), t_coords(2));
1303
1304
1305 int rr = 0;
1307
1308
1309 auto t_m = OpBase::template getLocMat<SPACE_DIM>(
SPACE_DIM * rr);
1310
1311
1313 t_row(
i,
k,
l) = t_D_at_pts(
i,
j,
k,
l) * (
a * t_row_diff_base(
j));
1314
1315
1316 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
1317
1318
1320
1321
1322 t_m(
i,
k) += t_row(
i,
k,
l) * t_col_diff_base(
l);
1323
1324
1325 ++t_col_diff_base;
1326
1327
1328 ++t_m;
1329 }
1330
1331
1332 ++t_row_diff_base;
1333 }
1334
1336 ++t_row_diff_base;
1337
1338
1339 ++t_w;
1340 ++t_D_at_pts;
1341 ++t_coords;
1342 }
1343 }
1344
1346}
#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< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
decltype(GetFTensor4FromMatImpl< Tensor_Dim0, Tensor_Dim1, Tensor_Dim2, Tensor_Dim3, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor4FromMatType
int nbRows
number of dofs on rows
int nbIntegrationPts
number of integration points
int nbCols
number if dof on column
int nbRowBaseFunctions
number or row base functions
FTensor::Index< 'i', SPACE_DIM > i
summit Index