704 {
706
709
710 int nb_integration_pts = OP::getGaussPts().size2();
712
713 int nb_base_functions = data.
getN().size2() / 3;
715 auto t_w = OP::getFTensor0IntegrationWeight();
716
718 auto t_kappa = getFTensor0FromVec<0>(*
kappaPtr);
720 auto t_face_normal = getFTensor1NormalsAtGaussPts();
721
722 auto next = [&]() {
723 ++t_P;
724 ++t_face_normal;
725 ++t_kappa;
726 ++t_delta_kappa;
727 ++t_w;
728 };
729
730 for (auto gg = 0; gg != nb_integration_pts; ++gg) {
734 t_normalized_normal(
J) = t_normal(
J);
737 t_traction(
i) = t_P(
i,
J) * t_normalized_normal(
J);
738
739 auto dJ_dtraction = [](auto &t_traction, auto &t_normalized_normal,
740 auto &t_delta_kappa, auto &t_kappa, auto gc) {
741 double kappa =
static_cast<double>(t_kappa);
742 double delta_kappa = static_cast<double>(t_delta_kappa);
745 t_traction_double(
i) = t_traction(
i);
746 auto t_dM =
748 t_traction_double, delta_kappa,
kappa, t_normalized_normal, gc,
751 t_dJ_double(
i) = t_dM(
i);
752 return t_dJ_double;
753 };
754
756
757 auto t_nf = getFTensor1FromPtr<3>(&*OP::locF.begin());
758 int bb = 0;
759 for (; bb != nb_dofs /
SPACE_DIM; ++bb) {
760 double row_base = t_w * (t_row_base_fun(
J) * t_normal(
J));
761 t_nf(
i) += row_base * t_dJ(
i);
762 ++t_nf;
763 ++t_row_base_fun;
764 }
765 for (; bb != nb_base_functions; ++bb)
766 ++t_row_base_fun;
767 };
768
769 assemble(dJ_dtraction(t_traction, t_normalized_normal, t_delta_kappa,
771
772
773 next();
774 }
775
777 };
#define FTENSOR_INDEX(DIM, I)
Tensor1< T, Tensor_Dim > normalize()
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'J', DIM1 > J
static auto calculateDissipationSurplusDiffTraction(const FTensor::Tensor1< T, 3 > &t_traction, const T &delta_kappa, const T &kappa, FTensor::Tensor1< double, 3 > &t_n_normalize, double gc, double beta, double min_stiffness)
boost::shared_ptr< MatrixDouble > fluxMatPtr
boost::shared_ptr< double > gcPtr
boost::shared_ptr< VectorDouble > kappaDeltaPtr
boost::shared_ptr< VectorDouble > kappaPtr
static double min_stiffness
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.