214 {
217
219 false);
221
222 const auto nb_integration_pts = getGaussPts().size2();
223 const auto nb_row_base_functions = row_data.getN().size2();
224
227
229 auto t_res_diff = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(
resDiff);
230 auto t_grad =
231 getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(
commonDataPtr->mGradPtr));
232 auto t_logC_dC = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
234 auto t_c_dstrain =
235 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->resCdStrain);
236
237 auto next = [&]() {
238 ++t_grad;
239 ++t_logC_dC;
240 ++t_c_dstrain;
241 ++t_res_diff;
242 };
243
245
246 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
250 t_dC_dF;
251
252 t_diff_ls_dlog_c(
k,
l) =
253 (t_c_dstrain(
i,
j)) * (t_logC_dC(
i,
j,
k,
l) / 2);
256
258 t_res_diff(
i,
j) = (t_diff_ls_dlog_c(
k,
l) * t_dC_dF(
k,
l,
i,
j));
259 next();
260 }
261 }
262
263 auto t_res_diff = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(
resDiff);
264
265 auto t_w = getFTensor0IntegrationWeight();
266 auto t_row_base = row_data.getFTensor0N();
267 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
268 double alpha = getMeasure() * t_w;
269 ++t_w;
270
271 auto t_mat = getFTensor1FromPtr<SPACE_DIM>(
locMat.data().data());
272 size_t rr = 0;
274 const auto row_base =
alpha * t_row_base;
275 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
277 t_mat(
i) += row_base * (t_res_diff(
i,
j) * t_col_diff_base(
j));
278 ++t_mat;
279 ++t_col_diff_base;
280 }
281 ++t_row_base;
282 }
283 for (; rr != nb_row_base_functions; ++rr)
284 ++t_row_base;
285
286 ++t_res_diff;
287 }
288
290}
#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< 'j', SPACE_DIM > j
FTensor::Index< 'l', SPACE_DIM > l
FTensor::Index< 'k', SPACE_DIM > k
FTensor::Index< 'i', SPACE_DIM > i
[Common data]
int colSide
column side number
int nbRows
number of dofs on rows
EntityType colType
column type
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column