Integrate grad-grad operator.
1104 {
1106
1107 const size_t nb_row_dofs = row_data.getIndices().size();
1108 const size_t nb_col_dofs = col_data.getIndices().size();
1109
1110 if (nb_row_dofs && nb_col_dofs) {
1111
1116
1117
1118 double vol = OpBase::getMeasure();
1119
1120
1121 auto t_w = OpBase::getFTensor0IntegrationWeight();
1122
1123
1124 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
1125
1126
1127 auto t_D =
1128 getFTensor4FromMat<SPACE_DIM, SPACE_DIM, SPACE_DIM, SPACE_DIM, S>(
1130
1131
1132 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1133
1134
1136
1137
1138 double a = t_w * vol *
betaCoeff(t_coords(0), t_coords(1), t_coords(2));
1139
1140
1141 int rr = 0;
1143
1144
1145 auto t_m = OpBase::template getLocMat<SPACE_DIM>(
SPACE_DIM * rr);
1146
1147
1148 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
1149
1150
1152
1153
1155 a * (t_D(
i,
j,
k,
l) * (t_row_diff_base(
j) * t_col_diff_base(
l)));
1156
1157
1158 ++t_col_diff_base;
1159
1160
1161 ++t_m;
1162 }
1163
1164
1165 ++t_row_diff_base;
1166 }
1167
1169 ++t_row_diff_base;
1170
1171
1172 ++t_w;
1173 ++t_D;
1174 ++t_coords;
1175 }
1176 }
1177
1179}
#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
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