v0.16.3
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient Struct Reference
Inheritance diagram for EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient:
[legend]
Collaboration diagram for EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient:
[legend]

Public Member Functions

 OpAuxiliaryHelmholtzGradient (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< MatrixDouble > deviator_gradient_ptr, boost::shared_ptr< MatrixDouble > volume_gradient_ptr)
 
MoFEMErrorCode doWork (int, EntityType, EntData &) override
 

Private Attributes

boost::shared_ptr< DataAtIntegrationPtsdataAtPts
 
boost::shared_ptr< MatrixDouble > deviatorGradientPtr
 
boost::shared_ptr< MatrixDouble > volumeGradientPtr
 

Detailed Description

Definition at line 189 of file HMHNeohookean.cpp.

Constructor & Destructor Documentation

◆ OpAuxiliaryHelmholtzGradient()

EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient::OpAuxiliaryHelmholtzGradient ( boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< MatrixDouble >  deviator_gradient_ptr,
boost::shared_ptr< MatrixDouble >  volume_gradient_ptr 
)
inline

Definition at line 190 of file HMHNeohookean.cpp.

194 : VolUserDataOperator(NOSPACE, OPSPACE), dataAtPts(std::move(data_ptr)),
195 deviatorGradientPtr(std::move(deviator_gradient_ptr)),
196 volumeGradientPtr(std::move(volume_gradient_ptr)) {}
@ NOSPACE
Definition definitions.h:83
VolumeElementForcesAndSourcesCore::UserDataOperator VolUserDataOperator

Member Function Documentation

◆ doWork()

MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient::doWork ( int  ,
EntityType  ,
EntData  
)
inlineoverride

Definition at line 198 of file HMHNeohookean.cpp.

198 {
200 const auto material_ptr = getMaterial(dataAtPts);
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>;
205 auto t_d = MatrixSizeHelper<GetFTensor1FromMatType<5, -1, DL>, DL>::get(
206 *fields->logDeviator, nb_gauss)();
207 auto t_theta =
208 MatrixSizeHelper<GetFTensor1FromMatType<1, -1, DL>, DL>::get(
209 *fields->logJacobian, nb_gauss)();
210 auto t_deviator_gradient =
211 MatrixSizeHelper<GetFTensor1FromMatType<5, -1, DL>, DL>::size(
212 *deviatorGradientPtr, nb_gauss)();
213 auto t_volume_gradient =
214 MatrixSizeHelper<GetFTensor1FromMatType<1, -1, DL>, DL>::size(
215 *volumeGradientPtr, nb_gauss)();
216 FTENSOR_INDEX(5, L);
217 for (int gg = 0; gg != nb_gauss; ++gg) {
218 Material::Coordinates t_coordinates, t_stress;
219 t_coordinates(L) = t_d(L);
220 double energy;
222 CHKERR Material::evaluateDeviator(parameters, t_coordinates, energy,
223 &t_stress);
224 CHKERR Material::evaluateVolume(parameters, t_theta(0), volume);
225 // Differentiate the physical energy at D_k. Weak copy closure does
226 // not make the independent T_d its pointwise derivative.
227 t_deviator_gradient(L) = t_stress(L);
228 t_volume_gradient(0) = volume.firstDerivative;
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)
static MoFEMErrorCode evaluateDeviator(const Parameters &parameters, 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 &parameters, double theta, VolumeState &state)
Evaluate g(J) = K*(J-1)^2/2 and its logarithmic-volume derivatives.

Member Data Documentation

◆ dataAtPts

boost::shared_ptr<DataAtIntegrationPts> EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient::dataAtPts
private

Definition at line 238 of file HMHNeohookean.cpp.

◆ deviatorGradientPtr

boost::shared_ptr<MatrixDouble> EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient::deviatorGradientPtr
private

Definition at line 239 of file HMHNeohookean.cpp.

◆ volumeGradientPtr

boost::shared_ptr<MatrixDouble> EshelbianPlasticity::HMHNeohookean::OpAuxiliaryHelmholtzGradient::volumeGradientPtr
private

Definition at line 240 of file HMHNeohookean.cpp.


The documentation for this struct was generated from the following file: