628 {
631
632 double *w_ptr = &(OP::getGaussPts()(DIM, 0));
639
640 auto get_ftensor2_symmetric = [&](auto &storage, const auto gg,
641 const auto rr) {
643 &storage(gg, 6 * rr + 0), &storage(gg, 6 * rr + 1),
644 &storage(gg, 6 * rr + 2), &storage(gg, 6 * rr + 3),
645 &storage(gg, 6 * rr + 4), &storage(gg, 6 * rr + 5)};
646 };
647
652
653 auto t_Cep =
654 getFTensor4DdgFromMat<3, 3, 1>(
commonDataPtr->materialTangentOperator);
655 const auto vol = OP::getMeasure();
656 auto t_w = OP::getFTensor0IntegrationWeight();
657 for (int gg = 0; gg != OP::nbIntegrationPts; ++gg) {
658 const double alpha = vol * t_w;
659 ++t_w;
660
661 for (auto rr = 0; rr != OP::nbRows; ++rr) {
663 t_rowCep(
k,
l) = t_Cep(
i,
j,
k,
l) * t_diff_row(
i,
j);
665 for (auto cc = 0; cc != OP::nbCols; ++cc) {
666 OP::locMat(rr, cc) += alpha * (t_rowCep(
k,
l) * t_diff_col(
k,
l));
667 ++t_diff_col;
668 }
669 ++t_diff_row;
670 }
671
672 ++t_Cep;
673 }
675}
#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< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
static FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 6 >, 3 > getFTensor2SymmetricDiffBase(DataForcesAndSourcesCore::EntData &data, MatrixDouble &storage, const bool b_bar, const int nb_integration_pts, double *w_ptr, FTensor::Number< 2 >)
MatrixDouble baseRowStorage
Store tensorial base functions.
MatrixDouble baseColStorage
Store tensorial base functions.
boost::shared_ptr< CommonData > commonDataPtr
FormsIntegrators< DomainEleOp >::Assembly< A >::OpBase AssemblyDomainEleOp