555                                                                  {
  557 
  566 
  568    
  569    const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
  570    commonDataPtr->matTangent.resize(DIM * DIM * DIM * DIM, nb_gauss_pts);
 
  571    auto dP_dF =
  572        getFTensor4FromMat<DIM, DIM, DIM, DIM, 1>(
commonDataPtr->matTangent);
 
  573 
  574    auto t_D = getFTensor4DdgFromMat<DIM, DIM, S>(*
matDPtr);
 
  575    auto t_eig_val = getFTensor1FromMat<DIM>(
commonDataPtr->matEigVal);
 
  576    auto t_eig_vec = getFTensor2FromMat<DIM, DIM>(
commonDataPtr->matEigVec);
 
  577    auto t_T = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matHenckyStress);
 
  578    auto t_S =
  579        getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->matSecondPiolaStress);
 
  580    auto t_grad = getFTensor2FromMat<DIM, DIM>(*(
commonDataPtr->matGradPtr));
 
  581    auto t_logC_dC = getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->matLogCdC);
 
  582 
  583    for (size_t gg = 0; gg != nb_gauss_pts; ++gg) {
  584 
  585#ifdef HENCKY_SMALL_STRAIN
  586      dP_dF(
i, 
j, 
k, 
l) = t_D(
i, 
j, 
k, 
l);
 
  587#else
  588 
  591 
  592      
  593      auto nb_uniq = get_uniq_nb<DIM>(&t_eig_val(0));
  596 
  598                                            t_T, nb_uniq);
  601      P_D_P_plus_TL(
i, 
j, 
k, 
l) =
 
  603          (t_logC_dC(
i, 
j, o, p) * t_D(o, p, 
m, 
n)) * t_logC_dC(
m, 
n, 
k, 
l);
 
  604      P_D_P_plus_TL(
i, 
j, 
k, 
l) *= 0.5;
 
  607          t_F(
i, 
k) * (P_D_P_plus_TL(
k, 
j, o, p) * dC_dF(o, p, 
m, 
n));
 
  608 
  609#endif
  610 
  611      ++dP_dF;
  612 
  613      ++t_grad;
  614      ++t_eig_val;
  615      ++t_eig_vec;
  616      ++t_logC_dC;
  617      ++t_S;
  618      ++t_T;
  619      ++t_D;
  620    }
  621 
  623  }
#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
const double n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto getDiffDiffMat(A &&t_val, B &&t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, C &&t_S, const int nb)
Get the Diff Diff Mat object.
FTensor::Index< 'm', 3 > m