563
564 OpCalculatePiolaStressImpl(
const std::string
field_name,
565 boost::shared_ptr<CommonData> common_data)
568 std::fill(&DomainEleOp::doEntities[MBEDGE],
569 &DomainEleOp::doEntities[MBMAXTYPE], false);
570 }
571
574
579
581
582
583 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
584#ifdef HENCKY_SMALL_STRAIN
585 auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*
commonDataPtr->matDPtr);
586#endif
587 auto t_logC = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matLogC);
588 auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->matLogCdC);
589 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
590 commonDataPtr->matFirstPiolaStress.resize(DIM * DIM, nb_gauss_pts,
false);
592 auto t_P = getFTensor2FromMat<DIM, DIM>(
commonDataPtr->matFirstPiolaStress);
593 auto t_T = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matHenckyStress);
594 auto t_S =
595 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matSecondPiolaStress);
596 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(
commonDataPtr->matGradPtr));
597
598 for (size_t gg = 0; gg != nb_gauss_pts; ++gg) {
599
600#ifdef HENCKY_SMALL_STRAIN
601 t_P(
i,
j) = t_D(
i,
j,
k,
l) * t_grad(
k,
l);
602#else
605 t_S(
k,
l) = t_T(
i,
j) * t_logC_dC(
i,
j,
k,
l);
606 t_P(
i,
l) = t_F(
i,
k) * t_S(
k,
l);
607#endif
608
609 ++t_grad;
610 ++t_logC;
611 ++t_logC_dC;
612 ++t_P;
613 ++t_T;
614 ++t_S;
615#ifdef HENCKY_SMALL_STRAIN
616 ++t_D;
617#endif
618 }
619
621 }
622
623private:
#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
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Data on single entity (This is passed as argument to DataOperator::doWork)