508 {
510
515
517
518
519 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
520 auto t_D =
521 getFTensor4DdgFromMat<DIM, DIM, S,
522 DataLayoutTraits<DataLayout::GaussByCoeffs>>(
524 auto t_logC = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matLogC);
525 auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->matLogCdC);
526 auto t_logCPlastic = getFTensor2SymmetricFromMat<DIM>(*
matLogCPlastic);
527 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
529 commonDataPtr->matFirstPiolaStress.resize(DIM * DIM, nb_gauss_pts,
false);
531 auto t_T = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matHenckyStress);
532 auto t_P = getFTensor2FromMat<DIM, DIM>(
commonDataPtr->matFirstPiolaStress);
533 auto t_S =
534 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matSecondPiolaStress);
535 auto t_grad = getFTensor2FromMat<DIM, DIM>(*(
commonDataPtr->matGradPtr));
536 auto t_temp = getFTensor0FromVec(*
tempPtr);
537
539 t_coeff_exp(
i,
j) = 0;
541 t_coeff_exp(d, d) = (*coeffExpansionPtr)[
d];
542 }
543
544 for (size_t gg = 0; gg != nb_gauss_pts; ++gg) {
545#ifdef HENCKY_SMALL_STRAIN
547 t_D(
i,
j,
k,
l) * (t_grad(
k,
l) - t_logCPlastic(
k,
l) -
548 t_coeff_exp(
k,
l) * (t_temp - (*refTempPtr)));
549#else
551 t_D(
i,
j,
k,
l) * (t_logC(
k,
l) - t_logCPlastic(
k,
l) -
552 t_coeff_exp(
k,
l) * (t_temp - (*refTempPtr)));
555 t_S(
k,
l) = t_T(
i,
j) * t_logC_dC(
i,
j,
k,
l);
556 t_P(
i,
l) = t_F(
i,
k) * t_S(
k,
l);
557#endif
558 ++t_grad;
559 ++t_logC;
560 ++t_P;
561 ++t_T;
562 ++t_S;
563 ++t_D;
564 ++t_temp;
565 ++t_logCPlastic;
566 }
567
569 }
#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