378 {
380
387 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
389
390 const auto nb_integration_pts = row_data.getN().size1();
391 const auto nb_row_base_functions = row_data.getN().size2();
392 auto t_w = this->getFTensor0IntegrationWeight();
393
395
397 auto t_row_base = row_data.getFTensor0N();
398
399 auto t_stress = getFTensor2SymmetricFromMat<DIM>(
401
402
403 auto t_plastic_strain_rate = getFTensor2SymmetricFromMat<DIM>(
405
406
407 auto t_D =
409
410
411 auto t_coords = AssemblyDomainEleOp::getFTensor1CoordsAtGaussPts();
412
414
415 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
416
417 auto t_vec = getFTensor1FromPtr<size_symm>(&this->locMat(0, 0));
418 double alpha = this->getMeasure() * t_w;
419 auto rr = 0;
420 for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
421 auto t_col_base = col_data.getFTensor0N(gg, 0);
422 for (
auto cc = 0; cc != AssemblyDomainEleOp::nbCols /
size_symm; cc++) {
423#ifdef HENCKY_SMALL_STRAIN
424 t_vec(L) -=
425 alpha * t_row_base *
427 (t_plastic_strain_rate(
i,
j) * t_D(
i,
j,
k,
l) *
429 this->getTSa() * t_stress(
i,
j) * t_diff(
i,
j,
m,
n)) *
430 t_col_base * t_L(
m,
n, L);
431#else
432 t_vec(L) -=
433 alpha * t_row_base *
435 (t_plastic_strain_rate(
i,
j) * t_D(
i,
j,
k,
l) *
437 this->getTSa() * t_stress(
i,
j) * t_diff(
i,
j,
m,
n)) *
438 t_col_base * t_L(
m,
n, L);
439#endif
440 ++t_vec;
441 ++t_col_base;
442 }
443
444 ++t_row_base;
445 }
446 for (; rr != nb_row_base_functions; ++rr)
447 ++t_row_base;
448
449 ++t_w;
450 ++t_plastic_strain_rate;
451 ++t_D;
452 ++t_coords;
453 ++t_stress;
454 }
455
457}
#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 >)
auto diff_tensor(FTensor::Number< DIM >)
[Lambda functions]
FTensor::Index< 'm', 3 > m