165 {
167
174 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
176
177 auto &locMat = AssemblyDomainEleOp::locMat;
178
179 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
180 const auto nb_row_base_functions = row_data.getN().size2();
181
182 if (AssemblyDomainEleOp::colType == MBVERTEX &&
183 AssemblyDomainEleOp::colSide == 0) {
184
186 auto t_res_diff = getFTensor3FromMat<size_symm, DIM, DIM>(
resDiff);
187
188 auto t_res_flow_dstrain =
189 getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->resFlowDstrain);
190 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(
commonDataPtr->mGradPtr));
191 auto t_logC_dC =
193
194 auto next = [&]() {
195 ++t_res_flow_dstrain;
196 ++t_grad;
197 ++t_logC_dC;
198 ++t_res_diff;
199 };
200
205
206 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
210
211 t_diff_ls_dlogC_dC(
i,
j,
k,
l) =
212 (t_res_flow_dstrain(
i,
j,
m,
n)) * (t_logC_dC(
m,
n,
k,
l) / 2);
213
216
218 t_res_diff(L,
i,
j) =
219 (t_L(
m,
n, L) * t_diff_ls_dlogC_dC(
m,
n,
k,
l)) * t_dC_dF(
k,
l,
i,
j);
220 next();
221 }
222 }
223
224 auto t_res_diff = getFTensor3FromMat<size_symm, DIM, DIM>(
resDiff);
225
226 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
227 auto t_row_base = row_data.getFTensor0N();
228 for (size_t gg = 0; gg != nb_integration_pts; ++gg) {
229 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
230 ++t_w;
231
232 size_t rr = 0;
233 for (; rr != AssemblyDomainEleOp::nbRows /
size_symm; ++rr) {
234 const auto row_base = alpha * t_row_base;
235 auto t_mat =
237 auto t_col_diff_base = col_data.getFTensor1DiffN<DIM>(gg, 0);
238 for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols / DIM; ++cc) {
239 t_mat(L,
l) += row_base * (t_res_diff(L,
l,
k) * t_col_diff_base(
k));
240 ++t_mat;
241 ++t_col_diff_base;
242 }
243 ++t_row_base;
244 }
245
246 for (; rr < nb_row_base_functions; ++rr)
247 ++t_row_base;
248
249 ++t_res_diff;
250 }
251
253}
#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
const double n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto symm_L_tensor(FTensor::Number< DIM >)
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
FTensor::Index< 'm', 3 > m