663 {
665
666 auto &locMat = AssemblyDomainEleOp::locMat;
667
668 const auto nb_integration_pts = row_data.getN().size1();
669 const auto nb_row_base_functions = row_data.getN().size2();
670 auto t_w = this->getFTensor0IntegrationWeight();
671
673 auto t_row_diff_base = row_data.getFTensor1DiffN<DIM>();
675 auto t_grad =
677 auto t_logC_dC =
681
689
691 t_coeff_exp(
i,
j) = 0;
693 t_coeff_exp(d, d) = (*coeffExpansionPtr)[
d];
694 }
695
696 t_eigen_strain(
i,
j) = (t_D(
i,
j,
k,
l) * t_coeff_exp(
k,
l));
697
698 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
699
701
702 double alpha = this->getMeasure() * t_w;
703 auto rr = 0;
704 for (; rr != AssemblyDomainEleOp::nbRows / DIM; ++rr) {
705 auto t_mat = getFTensor1FromMat<DIM, 1>(locMat, rr * DIM);
706 auto t_col_base = col_data.getFTensor0N(gg, 0);
707 for (auto cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
708#ifdef HENCKY_SMALL_STRAIN
710 (t_row_diff_base(
j) * t_eigen_strain(
i,
j)) * (t_col_base * alpha);
711#else
712 t_mat(
i) -= (t_row_diff_base(
j) *
713 (t_F(
i, o) * ((t_D(
m,
n,
k,
l) * t_coeff_exp(
k,
l)) *
714 t_logC_dC(
m,
n, o,
j)))) *
715 (t_col_base * alpha);
716#endif
717
718 ++t_mat;
719 ++t_col_base;
720 }
721
722 ++t_row_diff_base;
723 }
724 for (; rr != nb_row_base_functions; ++rr)
725 ++t_row_diff_base;
726
727 ++t_w;
728 ++t_grad;
729 ++t_logC_dC;
730 ++t_D;
731 }
732
734}
#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
FTensor::Index< 'm', 3 > m