65 {
67
68 auto &locMat = AssemblyDomainEleOp::locMat;
69
70 const auto nb_integration_pts = row_data.getN().size1();
71 const auto nb_row_base_functions = row_data.getN().size2();
72 auto t_w = getFTensor0IntegrationWeight();
73 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
74 auto t_D = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM, 0>(*
mDPtr);
75
81
83 t_coeff_exp(
i,
j) = 0;
85 t_coeff_exp(d, d) = (*coeffExpansionPtr)[
d];
86 }
87
88 t_eigen_strain(
i,
j) = (t_D(
i,
j,
k,
l) * t_coeff_exp(
k,
l));
89
90 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
91
92 double alpha = getMeasure() * t_w;
93 auto rr = 0;
94 for (; rr != AssemblyDomainEleOp::nbRows /
SPACE_DIM; ++rr) {
95 auto t_mat =
97 DataLayoutTraits<DataLayout::CoeffsByGauss>>(
99 auto t_col_base = col_data.getFTensor0N(gg, 0);
100 for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
101
103 (t_row_diff_base(
j) * t_eigen_strain(
i,
j)) * (t_col_base * alpha);
104
105 ++t_mat;
106 ++t_col_base;
107 }
108
109 ++t_row_diff_base;
110 }
111 for (; rr != nb_row_base_functions; ++rr)
112 ++t_row_diff_base;
113
114 ++t_w;
115 }
116
118}
#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< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto getFTensor1FromMat(M &data, int rr=0, int cc=0)
Get tensor rank 1 (vector) form data matrix.