198 {
201 const auto parameters = material_ptr->getParameters(getFEEntityHandle());
202 const int nb_gauss = getGaussPts().size2();
203 const auto fields =
dataAtPts->auxiliaryData;
204 using DL = DataLayoutTraits<DataLayout::GaussByCoeffs>;
206 *fields->logDeviator, nb_gauss)();
207 auto t_theta =
209 *fields->logJacobian, nb_gauss)();
210 auto t_deviator_gradient =
213 auto t_volume_gradient =
217 for (int gg = 0; gg != nb_gauss; ++gg) {
219 t_coordinates(L) = t_d(L);
220 double energy;
223 &t_stress);
225
226
227 t_deviator_gradient(L) = t_stress(L);
229 ++t_d;
230 ++t_theta;
231 ++t_deviator_gradient;
232 ++t_volume_gradient;
233 }
235 }
#define FTENSOR_INDEX(DIM, I)
#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()
#define CHKERR
Inline error check.
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
decltype(GetFTensor1FromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor1FromMatType
static boost::shared_ptr< HMHNeohookean > getMaterial(const boost::shared_ptr< DataAtIntegrationPts > &data_ptr)
double firstDerivative
d[g(exp(theta))]/d theta
static MoFEMErrorCode evaluateDeviator(const Parameters ¶meters, const Coordinates &t_deviator, double &energy, Coordinates *stress_ptr=nullptr, Tangent *hessian_ptr=nullptr)
Evaluate f(D), optionally its five-component gradient and Hessian.
static MoFEMErrorCode evaluateVolume(const Parameters ¶meters, double theta, VolumeState &state)
Evaluate g(J) = K*(J-1)^2/2 and its logarithmic-volume derivatives.