714 {
716
725
728 &
m(0, 0), &
m(0, 1), &
m(0, 2));
729 };
730
732
733 auto t_w = this->getFTensor0IntegrationWeight();
734 auto t_lagrange = getFTensor1FromMat<3>(*
lagrangePtr);
735 auto t_adjoint_lambda = getFTensor2FromMat<3, 3>(bd.getVarFlux());
738
739 auto t_diff_base = row_data.getFTensor1DiffN<2>();
740 auto nb_base_functions = row_data.getN().size2();
741
743
745
748 (
t_kd(
i,
m) * t_diff_base(N1));
750 (
t_kd(
k,
m) * t_diff_base(N0)) * t_t2(
i);
751 auto t_vec = getFTensor1FromPtr<3>(&*OP::locF.data().begin());
752 size_t rr = 0;
753 for (; rr != row_data.getIndices().size() / 3; ++rr) {
754 t_vec(
m) += (0.5 * t_w) * (t_adjoint_lambda(
i,
J) * t_lagrange(
i)) *
756 ++t_diff_base;
757 ++t_vec;
758 }
759 for (; rr < nb_base_functions; ++rr)
760 ++t_diff_base;
761 ++t_w;
762 ++t_lagrange;
763 ++t_adjoint_lambda;
764 ++t_t1;
765 ++t_t2;
766 }
767 }
768
771
773}
#define FTENSOR_INDEX(DIM, I)
#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
FTensor::Index< 'J', DIM1 > J
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
constexpr std::enable_if<(Dim0<=2 &&Dim1<=2), Tensor2_Expr< Levi_Civita< T >, T, Dim0, Dim1, i, j > >::type levi_civita(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
levi_civita functions to make for easy adhoc use
UBlasMatrix< double > MatrixDouble
constexpr IntegrationType I
FTensor::Index< 'm', 3 > m
int nbIntegrationPts
number of integration points
boost::shared_ptr< MatrixDouble > tangent2DiffPtr
boost::shared_ptr< MatrixDouble > tangent1DiffPtr