617 {
619
620 const double vol = getMeasure();
621 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
622 auto t_grad_u = getFTensor2FromMat<U_FIELD_DIM, SPACE_DIM>(*
gradUPtr);
623 auto t_h = getFTensor0FromVec(*
hPtr);
624 auto t_coords = getFTensor1CoordsAtGaussPts();
625
626 auto t_row_base = row_data.getFTensor0N();
627 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
628
629 auto t_w = getFTensor0IntegrationWeight();
630
631 auto get_mat = [&](const int rr) {
632 return getFTensor2FromArray<SPACE_DIM, SPACE_DIM, SPACE_DIM>(locMat, rr);
633 };
634
635 auto ts_a = getTSa();
637
638 for (int gg = 0; gg != nbIntegrationPts; gg++) {
639
640 const double r = t_coords(0);
644
645 const double beta0 = alpha *
rho;
646 const double beta1 = beta0 * ts_a;
648
649 int rr = 0;
651
653 auto t_col_base = col_data.getFTensor0N(gg, 0);
654 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
655
656
657
659 t_d_stress(
l,
j,
k) = t_D(
i,
j,
k,
l) * (alpha * t_row_diff_base(
i));
660
661 for (
int cc = 0; cc != nbCols /
U_FIELD_DIM; ++cc) {
662
663 const double bb = t_row_base * t_col_base;
664
665 t_mat(
i,
j) += (beta1 * bb) *
t_kd(
i,
j);
666 t_mat(
i,
j) += (beta0 * bb) * t_grad_u(
i,
j);
668 (beta0 * t_row_base) *
t_kd(
i,
j) * (t_col_diff_base(
k) * t_u(
k));
669 t_mat(
i,
j) += t_d_stress(
i,
j,
k) * t_col_diff_base(
k);
670
672 t_mat(0, 0) += (bb * (alpha / t_coords(0))) * (2 *
mu);
673 }
674
675 ++t_mat;
676 ++t_col_base;
677 ++t_col_diff_base;
678 }
679
680 ++t_row_base;
681 ++t_row_diff_base;
682 }
683
684 for (; rr < nbRowBaseFunctions; ++rr) {
685 ++t_row_diff_base;
686 ++t_row_base;
687 }
688
689 ++t_u;
690 ++t_grad_u;
691 ++t_h;
692
693 ++t_coords;
694 ++t_w;
695 }
696
698 }
Kronecker Delta class symmetric.
#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()
auto cylindrical
[cylindrical]
constexpr int U_FIELD_DIM
auto phase_function
Phase-dependent material property interpolation.
auto get_D
Create deviatoric stress tensor.
FTensor::Index< 'i', SPACE_DIM > i
constexpr CoordinateTypes coord_type
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k