652 {
654
655#ifndef NDEBUG
658 "Topological data pointer is null");
659#endif
660
662 if (!nb_dofs)
664
665 const int nb_integration_pts = OP::getGaussPts().size2();
666
667#ifndef NDEBUG
668 const int traction_rows =
topoData->objDDisplacementAtPts.size1();
669 const int traction_cols =
topoData->objDDisplacementAtPts.size2();
670 if (traction_cols != nb_integration_pts)
672 "objDDisplacementAtPts columns (%d) != nb integration points (%d)",
673 traction_cols, nb_integration_pts);
674
677 "objDDisplacementAtPts row size is %d, expected %d", traction_rows,
679 }
680#endif
681
682 auto t_normal = OP::getFTensor1NormalsAtGaussPts();
683 auto t_w = OP::getFTensor0IntegrationWeight();
684 const int nb_base_functions = data.
getN().size2() /
SPACE_DIM;
686 auto t_obj_dtraction =
687 getFTensor1FromMat<SPACE_DIM>(
topoData->objDDisplacementAtPts);
688
691
692 for (int gg = 0; gg != nb_integration_pts; ++gg) {
693 auto t_nf = getFTensor1FromPtr<SPACE_DIM>(&*OP::locF.begin());
694 int bb = 0;
695 for (; bb != nb_dofs /
SPACE_DIM; ++bb) {
697 t_w * (t_row_base_fun(
j) * t_normal(
j)) * t_obj_dtraction(
i) * 0.5;
698 ++t_nf;
699 ++t_row_base_fun;
700 }
701 for (; bb != nb_base_functions; ++bb)
702 ++t_row_base_fun;
703
704 ++t_w;
705 ++t_normal;
706 ++t_obj_dtraction;
707 }
708
710}
#define FTENSOR_INDEX(DIM, I)
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#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', 3 > j
boost::shared_ptr< TopologicalData > topoData
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1N(FieldApproximationBase base)
Get base functions for Hdiv/Hcurl spaces.
const VectorInt & getIndices() const
Get global indices of degrees of freedom on entity.