113 {
115
117
118 const auto nb_integration_pts = getGaussPts().size2();
119 const auto nb_row_base_functions = row_data.getN().size2();
120
123
125 false);
126 auto t_res_diff =
127 getFTensor3FromMat<size_symm, SPACE_DIM, SPACE_DIM>(
resDiff);
128
129 auto t_res_flow_dstrain = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
131 auto t_grad =
132 getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(
commonDataPtr->mGradPtr));
133 auto t_logC_dC = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
135
136 auto next = [&]() {
137 ++t_res_flow_dstrain;
138 ++t_grad;
139 ++t_logC_dC;
140 ++t_res_diff;
141 };
142
146 t_diff_grad;
148
149 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
153 t_dC_dF;
154
155 t_diff_ls_dlogC_dC(
i,
j,
k,
l) =
156 (t_res_flow_dstrain(
i,
j,
m,
n)) * (t_logC_dC(
m,
n,
k,
l) / 2);
157
160
162 t_res_diff(
L,
i,
j) =
163 (t_L(
m,
n,
L) * t_diff_ls_dlogC_dC(
m,
n,
k,
l)) * t_dC_dF(
k,
l,
i,
j);
164 next();
165 }
166 }
167
168 auto t_res_diff =
169 getFTensor3FromMat<size_symm, SPACE_DIM, SPACE_DIM>(
resDiff);
170
171 auto t_w = getFTensor0IntegrationWeight();
172 auto t_row_base = row_data.getFTensor0N();
173 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
174 double alpha = getMeasure() * t_w;
175 ++t_w;
176
177 size_t rr = 0;
179 const auto row_base =
alpha * t_row_base;
180 auto t_mat =
182 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
184 t_mat(
L,
l) += row_base * (t_res_diff(
L,
l,
k) * t_col_diff_base(
k));
185 ++t_mat;
186 ++t_col_diff_base;
187 }
188 ++t_row_base;
189 }
190
191 for (; rr < nb_row_base_functions; ++rr)
192 ++t_row_base;
193
194 ++t_res_diff;
195 }
196
198}
#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', size_symm > L
FTensor::Index< 'l', SPACE_DIM > l
FTensor::Index< 'k', SPACE_DIM > k
FTensor::Index< 'i', SPACE_DIM > i
[Common data]
FTensor::Index< 'm', SPACE_DIM > m
FTensor::Index< 'n', SPACE_DIM > n
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
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