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 = getFTensor1FromMat<SPACE_DIM, 1>(locMat, rr *
SPACE_DIM);
96 auto t_col_base = col_data.getFTensor0N(gg, 0);
97 for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
98
100 (t_row_diff_base(
j) * t_eigen_strain(
i,
j)) * (t_col_base * alpha);
101
102 ++t_mat;
103 ++t_col_base;
104 }
105
106 ++t_row_diff_base;
107 }
108 for (; rr != nb_row_base_functions; ++rr)
109 ++t_row_diff_base;
110
111 ++t_w;
112 }
113
115}
#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