21 MooseEnum objectiveRate(
"truesdell jaumann green_naghdi",
"truesdell");
23 "objective_rate", objectiveRate,
"Which type of objective integration to use");
31 _small_stress(declareProperty<
RankTwoTensor>(_base_name +
"small_stress")),
32 _small_stress_old(getMaterialPropertyOld<
RankTwoTensor>(_base_name +
"small_stress")),
33 _small_jacobian(declareProperty<
RankFourTensor>(_base_name +
"small_jacobian")),
34 _cauchy_stress_old(getMaterialPropertyOld<
RankTwoTensor>(_base_name +
"cauchy_stress")),
35 _mechanical_strain(getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"mechanical_strain")),
36 _strain_increment(getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"strain_increment")),
38 getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"vorticity_increment")),
39 _def_grad(getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"deformation_gradient")),
40 _def_grad_old(getMaterialPropertyOldByName<
RankTwoTensor>(_base_name +
"deformation_gradient")),
43 _rotation(_polar_decomp ? &declareProperty<
RankTwoTensor>(_base_name +
"rotation") : nullptr),
44 _rotation_old(_polar_decomp ? &getMaterialPropertyOld<
RankTwoTensor>(_base_name +
"rotation")
46 _d_rotation_d_def_grad(
47 _polar_decomp ? &declareProperty<
RankFourTensor>(derivativePropertyName(
48 _base_name +
"rotation", {
_base_name +
"deformation_gradient"}))
50 _stretch(_polar_decomp ? &declareProperty<
RankTwoTensor>(_base_name +
"stretch") : nullptr)
88 mooseError(
"Internal error: unsupported objective rate.");
111 usingTensorIndices(i,
j,
k, l);
132 usingTensorIndices(i,
j,
k, l, m);
149 T.times<m,
j, i, m,
k, l>(d_R_d_F * d_F_d_dL) - dR.
times<i,
k,
j, l>(I);
156 std::tuple<RankTwoTensor, RankFourTensor>
170 usingTensorIndices(i,
j,
k, l);
171 return (1.0 + dQ.
trace()) * I.times<i,
k,
j, l>(I) - dQ.
times<i,
k,
j, l>(I) -
172 I.times<i,
k,
j, l>(dQ);
179 usingTensorIndices(i,
j,
k, l);
180 return S.times<i,
j,
k, l>(I) - I.times<i,
k, l,
j>(
S) -
S.times<i, l,
j,
k>(I);
194 (*_stretch)[
_qp] = MathUtils::sqrt(
C).
get();
203 usingTensorIndices(i,
j,
k, l);
204 (*_d_rotation_d_def_grad)[
_qp] = (O.
times<i,
k, l,
j>(Y) -
Z.times<i, l,
k,
j>(
Z)) / Y.det();
void polarDecomposition()
Perform polar decomposition.
RankFourTensor stressAdvectionDerivative(const RankTwoTensor &S) const
Derivative of the action to advect stress with respect to the kinematic tensor.
RankFourTensorTempl< T > inverse() const
RankTwoTensorTempl< Real > inverse() const
ObjectiveRate
Types of objective integrations.
static RankTwoTensorTempl Identity()
RankFourTensor updateTensor(const RankTwoTensor &Q) const
Make the tensor used to advect the stress.
const bool _large_kinematics
If true use large deformations.
const std::string _base_name
Prepend to the material properties.
virtual void computeQpSmallStress()=0
Method to implement to provide the small stress update.
virtual void initQpStatefulProperties() override
Initialize everything with zeros.
static InputParameters validParams()
virtual void initQpStatefulProperties() override
Initialize the new (small) stress.
static const std::string S
RankTwoTensor objectiveUpdateTruesdell(const RankTwoTensor &dS)
Objective update using the Truesdell rate.
const MaterialProperty< RankTwoTensor > & _def_grad
Deformation gradient.
std::tuple< RankTwoTensor, RankFourTensor > advectStress(const RankTwoTensor &S0, const RankTwoTensor &dQ) const
Advect the stress using the provided kinematic tensor.
enum ComputeLagrangianObjectiveStress::ObjectiveRate _rate
MaterialProperty< RankTwoTensor > & _cauchy_stress
The Cauchy stress.
const MaterialProperty< RankTwoTensor > & _cauchy_stress_old
We need the old Cauchy stress to do the objective integration.
const MooseArray< Moose::GenericType< T, is_ad > > & get() const
const bool _polar_decomp
Whether we need to perform polar decomposition.
Native interface for providing the Cauchy stress.
const MaterialProperty< RankTwoTensor > & _small_stress_old
We need the old value to get the increment.
virtual void computeQpCauchyStress() override
Implement the objective update.
RankTwoTensorTempl< Real > transpose() const
const MaterialProperty< RankTwoTensor > & _inv_df
Inverse incremental deformation gradient.
RankTwoTensor objectiveUpdateJaumann(const RankTwoTensor &dS)
Objective update using the Jaumann rate.
static const std::string Z
MaterialProperty< RankFourTensor > & _small_jacobian
The updated small algorithmic tangent.
RankFourTensorTempl< Real > times(const RankTwoTensorTempl< Real > &b) const
ComputeLagrangianObjectiveStress(const InputParameters ¶meters)
MaterialProperty< RankTwoTensor > & _small_stress
The updated small stress.
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
RankFourTensor cauchyJacobian(const RankFourTensor &Jinv, const RankFourTensor &U) const
Compute the consistent tangent.
static const std::string k
MaterialProperty< RankFourTensor > & _cauchy_jacobian
The derivative of the Cauchy stress wrt the increment in the spatial velocity gradient.
static const std::string C
static InputParameters validParams()
RankTwoTensor objectiveUpdateGreenNaghdi(const RankTwoTensor &dS)
Objective update using the Green-Naghdi rate.