https://mooseframework.inl.gov
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
HillPlasticityStressUpdateTempl< is_ad > Class Template Reference

This class uses the stress update material in an anisotropic return mapping. More...

#include <HillPlasticityStressUpdate.h>

Inheritance diagram for HillPlasticityStressUpdateTempl< is_ad >:
[legend]

Public Member Functions

 HillPlasticityStressUpdateTempl (const InputParameters &parameters)
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void computeStressInitialize (const GenericDenseVector< is_ad > &stress_dev, const GenericDenseVector< is_ad > &stress, const GenericRankFourTensor< is_ad > &elasticity_tensor) override
 
virtual GenericReal< is_ad > computeResidual (const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &scalar) override
 
virtual GenericReal< is_ad > computeDerivative (const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &scalar) override
 
virtual Real computeReferenceResidual (const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &residual, const GenericReal< is_ad > &scalar_effective_inelastic_strain) override
 
virtual void propagateQpStatefulProperties () override
 
bool requiresIsotropicTensor () override
 Does the model require the elasticity tensor to be isotropic? Yes, this class only does anisotropic plasticity More...
 
Real computeHardeningDerivative ()
 
GenericReal< is_ad > computeHardeningValue (const GenericReal< is_ad > &scalar, const GenericReal< is_ad > &omega)
 
void computeHillTensorEigenDecomposition (const DenseMatrix< Real > &hill_tensor)
 Compute eigendecomposition of Hill's tensor for anisotropic plasticity. More...
 
virtual void computeStrainFinalize (GenericRankTwoTensor< is_ad > &, const GenericRankTwoTensor< is_ad > &, const GenericDenseVector< is_ad > &, const GenericReal< is_ad > &) override
 Perform any necessary steps to finalize strain increment after return mapping iterations. More...
 
virtual void computeStressFinalize (const GenericRankTwoTensor< is_ad > &inelasticStrainIncrement, const GenericReal< is_ad > &delta_gamma, GenericRankTwoTensor< is_ad > &stress, const GenericDenseVector< is_ad > &, const GenericRankTwoTensor< is_ad > &, const GenericRankFourTensor< is_ad > &) override
 Perform any necessary steps to finalize state after return mapping iterations. More...
 
GenericReal< is_ad > computeOmega (const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial)
 
void computeDeltaDerivatives (const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial, const GenericReal< is_ad > &sy_alpha, GenericReal< is_ad > &omega, GenericReal< is_ad > &omega_gamma, GenericReal< is_ad > &sy_gamma)
 
virtual void initQpStatefulProperties () override
 
virtual GenericReal< is_ad > computeStressDerivative (const Real, const Real) override
 Calculate the derivative of the strain increment with respect to the updated stress. More...
 

Protected Attributes

GenericReal< is_ad > _qsigma
 Square of the q function for orthotropy. More...
 
GenericDenseVector< is_ad > _eigenvalues_hill
 
GenericDenseMatrix< is_ad > _eigenvectors_hill
 
const Real _hardening_constant
 
const Real _hardening_exponent
 
GenericMaterialProperty< Real, is_ad > & _hardening_variable
 
const MaterialProperty< Real > & _hardening_variable_old
 
GenericReal< is_ad > _hardening_derivative
 
GenericReal< is_ad > _yield_condition
 
GenericReal< is_ad > _yield_stress
 
const MaterialProperty< DenseMatrix< Real > > & _hill_tensor
 Hill tensor, when global axes do not (somehow) align with those of the material Example: Large rotation due to rigid body and/or large deformation kinematics. More...
 
GenericDenseVector< is_ad > _stress_np1
 
GenericReal< is_ad > _two_shear_modulus
 2 * shear modulus More...
 
unsigned int _qp
 
GenericMaterialProperty< RankTwoTensor, is_ad > & _plasticity_strain
 Plasticity strain tensor material property. More...
 
const MaterialProperty< RankTwoTensor > & _plasticity_strain_old
 

Detailed Description

template<bool is_ad>
class HillPlasticityStressUpdateTempl< is_ad >

This class uses the stress update material in an anisotropic return mapping.

This class is one of the generalized radial return constitutive models based on Hill's criterion; it assumes and isotropic elasticity tensor and an anisotropic plastic yield surface. Constitutive models that combine creep and plasticity can be used.

Definition at line 22 of file HillPlasticityStressUpdate.h.

Constructor & Destructor Documentation

◆ HillPlasticityStressUpdateTempl()

template<bool is_ad>
HillPlasticityStressUpdateTempl< is_ad >::HillPlasticityStressUpdateTempl ( const InputParameters parameters)

Definition at line 37 of file HillPlasticityStressUpdate.C.

40  _qsigma(0.0),
42  _eigenvectors_hill(6, 6),
43  _hardening_constant(this->template getParam<Real>("hardening_constant")),
44  _hardening_exponent(this->template getParam<Real>("hardening_exponent")),
45  _hardening_variable(this->template declareGenericProperty<Real, is_ad>(this->_base_name +
46  "hardening_variable")),
48  this->template getMaterialPropertyOld<Real>(this->_base_name + "hardening_variable")),
50  _yield_condition(1.0),
51  _yield_stress(this->template getParam<Real>("yield_stress")),
52  _hill_tensor(this->template getMaterialPropertyByName<DenseMatrix<Real>>(this->_base_name +
53  "hill_tensor")),
54  _stress_np1(6)
55 {
56 }
const MaterialProperty< Real > & _hardening_variable_old
GenericDenseMatrix< is_ad > _eigenvectors_hill
GenericDenseVector< is_ad > _stress_np1
GenericDenseVector< is_ad > _eigenvalues_hill
GenericReal< is_ad > _qsigma
Square of the q function for orthotropy.
const MaterialProperty< DenseMatrix< Real > > & _hill_tensor
Hill tensor, when global axes do not (somehow) align with those of the material Example: Large rotati...
This class provides baseline functionality for anisotropic (Hill-like) plasticity models based on the...
GenericMaterialProperty< Real, is_ad > & _hardening_variable

Member Function Documentation

◆ computeDeltaDerivatives()

template<bool is_ad>
void HillPlasticityStressUpdateTempl< is_ad >::computeDeltaDerivatives ( const GenericReal< is_ad > &  delta_gamma,
const GenericDenseVector< is_ad > &  stress_trial,
const GenericReal< is_ad > &  sy_alpha,
GenericReal< is_ad > &  omega,
GenericReal< is_ad > &  omega_gamma,
GenericReal< is_ad > &  sy_gamma 
)
protected

Definition at line 113 of file HillPlasticityStressUpdate.C.

120 {
121  omega_gamma = 0.0;
122  sy_gamma = 0.0;
123 
124  GenericDenseVector<is_ad> K_deltaGamma(6);
125  omega = computeOmega(delta_gamma, stress_trial);
126 
128  for (unsigned int i = 0; i < 6; i++)
129  K(i) = _eigenvalues_hill(i) /
130  (Utility::pow<2>(1 + _two_shear_modulus * delta_gamma * _eigenvalues_hill(i)));
131 
132  for (unsigned int i = 0; i < 6; i++)
133  K_deltaGamma(i) = -2.0 * _two_shear_modulus * _eigenvalues_hill(i) * K(i) /
134  (1 + _two_shear_modulus * delta_gamma * _eigenvalues_hill(i));
135 
136  for (unsigned int i = 0; i < 6; i++)
137  omega_gamma += K_deltaGamma(i) * stress_trial(i) * stress_trial(i);
138 
139  omega_gamma /= 4.0 * omega;
140  sy_gamma = 2.0 * sy_alpha * (omega + delta_gamma * omega_gamma);
141 }
static const std::string K
Definition: NS.h:174
GenericReal< is_ad > _two_shear_modulus
2 * shear modulus
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
GenericDenseVector< is_ad > _eigenvalues_hill
GenericReal< is_ad > computeOmega(const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial)

◆ computeDerivative()

template<bool is_ad>
GenericReal< is_ad > HillPlasticityStressUpdateTempl< is_ad >::computeDerivative ( const GenericDenseVector< is_ad > &  effective_trial_stress,
const GenericDenseVector< is_ad > &  stress_new,
const GenericReal< is_ad > &  scalar 
)
overrideprotectedvirtual

Definition at line 189 of file HillPlasticityStressUpdate.C.

193 {
194  // If in elastic regime, return unit derivative
195  if (_yield_condition <= 0.0)
196  return 1.0;
197 
198  GenericReal<is_ad> omega = computeOmega(delta_gamma, _stress_np1);
200 
201  GenericReal<is_ad> sy =
204 
205  GenericReal<is_ad> omega_gamma;
206  GenericReal<is_ad> sy_gamma;
207 
208  computeDeltaDerivatives(delta_gamma, _stress_np1, sy_alpha, omega, omega_gamma, sy_gamma);
209  GenericReal<is_ad> residual_derivative = 1 / omega * (sy_gamma - 1 / omega * omega_gamma * sy);
210 
211  return residual_derivative;
212 }
Moose::GenericType< Real, is_ad > GenericReal
GenericReal< is_ad > computeHardeningValue(const GenericReal< is_ad > &scalar, const GenericReal< is_ad > &omega)
GenericDenseVector< is_ad > _stress_np1
void computeDeltaDerivatives(const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial, const GenericReal< is_ad > &sy_alpha, GenericReal< is_ad > &omega, GenericReal< is_ad > &omega_gamma, GenericReal< is_ad > &sy_gamma)
GenericReal< is_ad > computeOmega(const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial)

◆ computeHardeningDerivative()

template<bool is_ad>
Real HillPlasticityStressUpdateTempl< is_ad >::computeHardeningDerivative ( )
protected

Definition at line 278 of file HillPlasticityStressUpdate.C.

279 {
280  using std::pow;
281 
284 }
auto raw_value(const Eigen::Map< T > &in)
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
GenericMaterialProperty< Real, is_ad > & _hardening_variable
MooseUnits pow(const MooseUnits &, int)

◆ computeHardeningValue()

template<bool is_ad>
GenericReal< is_ad > HillPlasticityStressUpdateTempl< is_ad >::computeHardeningValue ( const GenericReal< is_ad > &  scalar,
const GenericReal< is_ad > &  omega 
)
protected

Definition at line 270 of file HillPlasticityStressUpdate.C.

272 {
273  return _hardening_variable_old[_qp] + 2.0 * delta_gamma * omega;
274 }
const MaterialProperty< Real > & _hardening_variable_old

◆ computeHillTensorEigenDecomposition()

template<bool is_ad>
void HillPlasticityStressUpdateTempl< is_ad >::computeHillTensorEigenDecomposition ( const DenseMatrix< Real > &  hill_tensor)
protected

Compute eigendecomposition of Hill's tensor for anisotropic plasticity.

Parameters
hill_tensor6x6 matrix representing fourth order Hill's tensor describing anisotropy

Definition at line 216 of file HillPlasticityStressUpdate.C.

218 {
219  const unsigned int dimension = hill_tensor.n();
220 
222  for (unsigned int index_i = 0; index_i < dimension; index_i++)
223  for (unsigned int index_j = 0; index_j < dimension; index_j++)
224  A(index_i, index_j) = MetaPhysicL::raw_value(hill_tensor(index_i, index_j));
225 
226  if (isBlockDiagonal(A))
227  {
228  Eigen::SelfAdjointEigenSolver<AnisotropyMatrixRealBlock> es(A.block<3, 3>(0, 0));
229 
230  auto lambda = es.eigenvalues();
231  auto v = es.eigenvectors();
232 
233  _eigenvalues_hill(0) = lambda(0);
234  _eigenvalues_hill(1) = lambda(1);
235  _eigenvalues_hill(2) = lambda(2);
236  _eigenvalues_hill(3) = A(3, 3);
237  _eigenvalues_hill(4) = A(4, 4);
238  _eigenvalues_hill(5) = A(5, 5);
239 
240  _eigenvectors_hill(0, 0) = v(0, 0);
241  _eigenvectors_hill(0, 1) = v(0, 1);
242  _eigenvectors_hill(0, 2) = v(0, 2);
243  _eigenvectors_hill(1, 0) = v(1, 0);
244  _eigenvectors_hill(1, 1) = v(1, 1);
245  _eigenvectors_hill(1, 2) = v(1, 2);
246  _eigenvectors_hill(2, 0) = v(2, 0);
247  _eigenvectors_hill(2, 1) = v(2, 1);
248  _eigenvectors_hill(2, 2) = v(2, 2);
249  _eigenvectors_hill(3, 3) = 1.0;
250  _eigenvectors_hill(4, 4) = 1.0;
251  _eigenvectors_hill(5, 5) = 1.0;
252  }
253  else
254  {
255  Eigen::SelfAdjointEigenSolver<AnisotropyMatrixReal> es_b(A);
256 
257  auto lambda_b = es_b.eigenvalues();
258  auto v_b = es_b.eigenvectors();
259  for (unsigned int index_i = 0; index_i < dimension; index_i++)
260  _eigenvalues_hill(index_i) = lambda_b(index_i);
261 
262  for (unsigned int index_i = 0; index_i < dimension; index_i++)
263  for (unsigned int index_j = 0; index_j < dimension; index_j++)
264  _eigenvectors_hill(index_i, index_j) = v_b(index_i, index_j);
265  }
266 }
Eigen::Matrix< Real, 6, 6 > AnisotropyMatrixReal
auto raw_value(const Eigen::Map< T > &in)
const double v
GenericDenseMatrix< is_ad > _eigenvectors_hill
GenericDenseVector< is_ad > _eigenvalues_hill
unsigned int n() const

◆ computeOmega()

template<bool is_ad>
GenericReal< is_ad > HillPlasticityStressUpdateTempl< is_ad >::computeOmega ( const GenericReal< is_ad > &  delta_gamma,
const GenericDenseVector< is_ad > &  stress_trial 
)
protected

Definition at line 90 of file HillPlasticityStressUpdate.C.

92 {
94  GenericReal<is_ad> omega = 0.0;
95 
96  for (unsigned int i = 0; i < 6; i++)
97  {
98  K(i) = _eigenvalues_hill(i) /
99  (Utility::pow<2>(1 + _two_shear_modulus * delta_gamma * _eigenvalues_hill(i)));
100  omega += K(i) * stress_trial(i) * stress_trial(i);
101  }
102  omega *= 0.5;
103 
104  if (omega == 0.0)
105  omega = 1.0e-36;
106 
107  using std::sqrt;
108  return sqrt(omega);
109 }
Moose::GenericType< Real, is_ad > GenericReal
static const std::string K
Definition: NS.h:174
GenericReal< is_ad > _two_shear_modulus
2 * shear modulus
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
GenericDenseVector< is_ad > _eigenvalues_hill
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh

◆ computeReferenceResidual()

template<bool is_ad>
Real HillPlasticityStressUpdateTempl< is_ad >::computeReferenceResidual ( const GenericDenseVector< is_ad > &  effective_trial_stress,
const GenericDenseVector< is_ad > &  stress_new,
const GenericReal< is_ad > &  residual,
const GenericReal< is_ad > &  scalar_effective_inelastic_strain 
)
overrideprotectedvirtual

Definition at line 145 of file HillPlasticityStressUpdate.C.

150 {
151  // Equation is already normalized.
152  return 1.0;
153 }

◆ computeResidual()

template<bool is_ad>
GenericReal< is_ad > HillPlasticityStressUpdateTempl< is_ad >::computeResidual ( const GenericDenseVector< is_ad > &  effective_trial_stress,
const GenericDenseVector< is_ad > &  stress_new,
const GenericReal< is_ad > &  scalar 
)
overrideprotectedvirtual

Definition at line 157 of file HillPlasticityStressUpdate.C.

161 {
162  using std::pow;
163 
164  // If in elastic regime, just return
165  if (_yield_condition <= 0.0)
166  return 0.0;
167 
168  GenericDenseMatrix<is_ad> eigenvectors_hill_transpose(6, 6);
169 
170  _eigenvectors_hill.get_transpose(eigenvectors_hill_transpose);
171  eigenvectors_hill_transpose.vector_mult(_stress_np1, stress_dev);
172 
173  GenericReal<is_ad> omega = computeOmega(delta_gamma, _stress_np1);
174 
175  // Hardening variable is \alpha isotropic hardening for now.
176  _hardening_variable[_qp] = computeHardeningValue(delta_gamma, omega);
177  GenericReal<is_ad> s_y =
180 
181  GenericReal<is_ad> residual = 0.0;
182  residual = s_y / omega - 1.0;
183 
184  return residual;
185 }
Moose::GenericType< Real, is_ad > GenericReal
GenericReal< is_ad > computeHardeningValue(const GenericReal< is_ad > &scalar, const GenericReal< is_ad > &omega)
GenericDenseMatrix< is_ad > _eigenvectors_hill
GenericDenseVector< is_ad > _stress_np1
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
GenericReal< is_ad > computeOmega(const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial)
GenericMaterialProperty< Real, is_ad > & _hardening_variable
MooseUnits pow(const MooseUnits &, int)
Moose::GenericType< DenseMatrix< Real >, is_ad > GenericDenseMatrix

◆ computeStrainFinalize()

template<bool is_ad>
void HillPlasticityStressUpdateTempl< is_ad >::computeStrainFinalize ( GenericRankTwoTensor< is_ad > &  inelasticStrainIncrement,
const GenericRankTwoTensor< is_ad > &  stress,
const GenericDenseVector< is_ad > &  stress_dev,
const GenericReal< is_ad > &  delta_gamma 
)
overrideprotectedvirtual

Perform any necessary steps to finalize strain increment after return mapping iterations.

Parameters
inelasticStrainIncrementInelastic strain increment

Reimplemented from AnisotropicReturnPlasticityStressUpdateBaseTempl< is_ad >.

Definition at line 288 of file HillPlasticityStressUpdate.C.

293 {
294  using std::sqrt;
295 
296  // e^P = delta_gamma * hill_tensor * stress
297  GenericDenseVector<is_ad> inelasticStrainIncrement_vector(6);
298  GenericDenseVector<is_ad> hill_stress(6);
299  _hill_tensor[_qp].vector_mult(hill_stress, stress_dev);
300  hill_stress.scale(delta_gamma);
301  inelasticStrainIncrement_vector = hill_stress;
302 
303  inelasticStrainIncrement(0, 0) = inelasticStrainIncrement_vector(0);
304  inelasticStrainIncrement(1, 1) = inelasticStrainIncrement_vector(1);
305  inelasticStrainIncrement(2, 2) = inelasticStrainIncrement_vector(2);
306  inelasticStrainIncrement(0, 1) = inelasticStrainIncrement(1, 0) =
307  inelasticStrainIncrement_vector(3) / 2.0;
308  inelasticStrainIncrement(1, 2) = inelasticStrainIncrement(2, 1) =
309  inelasticStrainIncrement_vector(4) / 2.0;
310  inelasticStrainIncrement(0, 2) = inelasticStrainIncrement(2, 0) =
311  inelasticStrainIncrement_vector(5) / 2.0;
312 
313  // Calculate equivalent plastic strain
314  GenericDenseVector<is_ad> Mepsilon(6);
315  _hill_tensor[_qp].vector_mult(Mepsilon, inelasticStrainIncrement_vector);
316  GenericReal<is_ad> eq_plastic_strain_inc = Mepsilon.dot(inelasticStrainIncrement_vector);
317 
318  if (eq_plastic_strain_inc > 0.0)
319  eq_plastic_strain_inc = sqrt(eq_plastic_strain_inc);
320 
321  _effective_inelastic_strain[_qp] = _effective_inelastic_strain_old[_qp] + eq_plastic_strain_inc;
322 
324  inelasticStrainIncrement, stress, stress_dev, delta_gamma);
325 }
Moose::GenericType< Real, is_ad > GenericReal
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
virtual void computeStrainFinalize(GenericRankTwoTensor< is_ad > &, const GenericRankTwoTensor< is_ad > &, const GenericDenseVector< is_ad > &, const GenericReal< is_ad > &) override
Perform any necessary steps to finalize strain increment after return mapping iterations.
const MaterialProperty< DenseMatrix< Real > > & _hill_tensor
Hill tensor, when global axes do not (somehow) align with those of the material Example: Large rotati...
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh

◆ computeStressDerivative()

template<bool is_ad>
virtual GenericReal<is_ad> AnisotropicReturnPlasticityStressUpdateBaseTempl< is_ad >::computeStressDerivative ( const Real  ,
const Real   
)
inlineoverrideprotectedvirtualinherited

Calculate the derivative of the strain increment with respect to the updated stress.

Parameters
effective_trial_stressEffective trial stress
scalarInelastic strain increment magnitude being solved for

Definition at line 47 of file AnisotropicReturnPlasticityStressUpdateBase.h.

49  {
50  return 0.0;
51  }

◆ computeStressFinalize()

template<bool is_ad>
void HillPlasticityStressUpdateTempl< is_ad >::computeStressFinalize ( const GenericRankTwoTensor< is_ad > &  inelasticStrainIncrement,
const GenericReal< is_ad > &  delta_gamma,
GenericRankTwoTensor< is_ad > &  stress,
const GenericDenseVector< is_ad > &  stress_dev,
const GenericRankTwoTensor< is_ad > &  ,
const GenericRankFourTensor< is_ad > &   
)
overrideprotectedvirtual

Perform any necessary steps to finalize state after return mapping iterations.

Parameters
inelasticStrainIncrementInelastic strain increment

Definition at line 329 of file HillPlasticityStressUpdate.C.

336 {
337  // Need to compute this iteration's stress tensor based on the scalar variable for deviatoric
338  // s(n+1) = {Q [I + 2*nu*delta_gamma*Delta]^(-1) Q^T} s(trial)
339 
340  if (_yield_condition <= 0.0)
341  return;
342 
343  GenericDenseMatrix<is_ad> inv_matrix(6, 6);
344  for (unsigned int i = 0; i < 6; i++)
345  inv_matrix(i, i) = 1 / (1 + _two_shear_modulus * delta_gamma * _eigenvalues_hill(i));
346 
347  GenericDenseMatrix<is_ad> eigenvectors_hill_transpose(6, 6);
348 
349  _eigenvectors_hill.get_transpose(eigenvectors_hill_transpose);
350  GenericDenseMatrix<is_ad> eigenvectors_hill_copy(_eigenvectors_hill);
351 
352  // Right multiply by matrix of eigenvectors transpose
353  inv_matrix.right_multiply(eigenvectors_hill_transpose);
354  // Right multiply eigenvector matrix by [I + 2*nu*delta_gamma*Delta]^(-1) Q^T
355  eigenvectors_hill_copy.right_multiply(inv_matrix);
356 
357  GenericDenseVector<is_ad> stress_np1(6);
358  eigenvectors_hill_copy.vector_mult(stress_np1, stress_dev);
359 
360  GenericRankTwoTensor<is_ad> stress_new_volumetric = stress_new - stress_new.deviatoric();
361 
362  stress_new(0, 0) = stress_new_volumetric(0, 0) + stress_np1(0);
363  stress_new(1, 1) = stress_new_volumetric(1, 1) + stress_np1(1);
364  stress_new(2, 2) = stress_new_volumetric(2, 2) + stress_np1(2);
365  stress_new(0, 1) = stress_new(1, 0) = stress_np1(3);
366  stress_new(1, 2) = stress_new(2, 1) = stress_np1(4);
367  stress_new(0, 2) = stress_new(2, 0) = stress_np1(5);
368 
369  GenericReal<is_ad> omega = computeOmega(delta_gamma, _stress_np1);
370  _hardening_variable[_qp] = computeHardeningValue(delta_gamma, omega);
371 }
Moose::GenericType< Real, is_ad > GenericReal
GenericReal< is_ad > computeHardeningValue(const GenericReal< is_ad > &scalar, const GenericReal< is_ad > &omega)
GenericDenseMatrix< is_ad > _eigenvectors_hill
GenericDenseVector< is_ad > _stress_np1
GenericReal< is_ad > _two_shear_modulus
2 * shear modulus
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
GenericDenseVector< is_ad > _eigenvalues_hill
GenericReal< is_ad > computeOmega(const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial)
GenericMaterialProperty< Real, is_ad > & _hardening_variable
Moose::GenericType< DenseMatrix< Real >, is_ad > GenericDenseMatrix
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor

◆ computeStressInitialize()

template<bool is_ad>
void HillPlasticityStressUpdateTempl< is_ad >::computeStressInitialize ( const GenericDenseVector< is_ad > &  stress_dev,
const GenericDenseVector< is_ad > &  stress,
const GenericRankFourTensor< is_ad > &  elasticity_tensor 
)
overrideprotectedvirtual

Definition at line 69 of file HillPlasticityStressUpdate.C.

73 {
76  _effective_inelastic_strain[_qp] = _effective_inelastic_strain_old[_qp];
77 
79 
80  // Hill constants: We use directly the transformation tensor, which won't be updated if not
81  // necessary in the Hill tensor material.
83 
84  _yield_condition = 1.0; // Some positive value
85  _yield_condition = -computeResidual(stress_dev, stress_dev, 0.0);
86 }
T getIsotropicShearModulus(const RankFourTensorTempl< T > &elasticity_tensor)
Get the shear modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be ...
const MaterialProperty< Real > & _hardening_variable_old
void computeHillTensorEigenDecomposition(const DenseMatrix< Real > &hill_tensor)
Compute eigendecomposition of Hill&#39;s tensor for anisotropic plasticity.
GenericReal< is_ad > _two_shear_modulus
2 * shear modulus
const MaterialProperty< DenseMatrix< Real > > & _hill_tensor
Hill tensor, when global axes do not (somehow) align with those of the material Example: Large rotati...
virtual GenericReal< is_ad > computeResidual(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &scalar) override
GenericMaterialProperty< RankTwoTensor, is_ad > & _plasticity_strain
Plasticity strain tensor material property.
GenericMaterialProperty< Real, is_ad > & _hardening_variable

◆ initQpStatefulProperties()

template<bool is_ad>
void AnisotropicReturnPlasticityStressUpdateBaseTempl< is_ad >::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

◆ propagateQpStatefulProperties()

template<bool is_ad>
void HillPlasticityStressUpdateTempl< is_ad >::propagateQpStatefulProperties ( )
overrideprotectedvirtual

◆ requiresIsotropicTensor()

template<bool is_ad>
bool HillPlasticityStressUpdateTempl< is_ad >::requiresIsotropicTensor ( )
inlineoverrideprotected

Does the model require the elasticity tensor to be isotropic? Yes, this class only does anisotropic plasticity

Definition at line 62 of file HillPlasticityStressUpdate.h.

62 { return true; }

◆ validParams()

template<bool is_ad>
InputParameters HillPlasticityStressUpdateTempl< is_ad >::validParams ( )
static

Definition at line 18 of file HillPlasticityStressUpdate.C.

19 {
21  params.addClassDescription(
22  "This class uses the generalized radial return for anisotropic plasticity model."
23  "This class can be used in conjunction with other creep and plasticity materials for "
24  "more complex simulations.");
25 
26  params.addRequiredParam<Real>("hardening_constant",
27  "Hardening constant (H) for anisotropic plasticity");
28  params.addParam<Real>(
29  "hardening_exponent", 1.0, "Hardening exponent (n) for anisotropic plasticity");
30  params.addRequiredParam<Real>("yield_stress",
31  "Yield stress (constant value) for anisotropic plasticity");
32 
33  return params;
34 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _eigenvalues_hill

template<bool is_ad>
GenericDenseVector<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_eigenvalues_hill
protected

Definition at line 107 of file HillPlasticityStressUpdate.h.

◆ _eigenvectors_hill

template<bool is_ad>
GenericDenseMatrix<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_eigenvectors_hill
protected

Definition at line 108 of file HillPlasticityStressUpdate.h.

◆ _hardening_constant

template<bool is_ad>
const Real HillPlasticityStressUpdateTempl< is_ad >::_hardening_constant
protected

Definition at line 110 of file HillPlasticityStressUpdate.h.

◆ _hardening_derivative

template<bool is_ad>
GenericReal<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_hardening_derivative
protected

Definition at line 115 of file HillPlasticityStressUpdate.h.

◆ _hardening_exponent

template<bool is_ad>
const Real HillPlasticityStressUpdateTempl< is_ad >::_hardening_exponent
protected

Definition at line 111 of file HillPlasticityStressUpdate.h.

◆ _hardening_variable

template<bool is_ad>
GenericMaterialProperty<Real, is_ad>& HillPlasticityStressUpdateTempl< is_ad >::_hardening_variable
protected

Definition at line 113 of file HillPlasticityStressUpdate.h.

◆ _hardening_variable_old

template<bool is_ad>
const MaterialProperty<Real>& HillPlasticityStressUpdateTempl< is_ad >::_hardening_variable_old
protected

Definition at line 114 of file HillPlasticityStressUpdate.h.

◆ _hill_tensor

template<bool is_ad>
const MaterialProperty<DenseMatrix<Real> >& HillPlasticityStressUpdateTempl< is_ad >::_hill_tensor
protected

Hill tensor, when global axes do not (somehow) align with those of the material Example: Large rotation due to rigid body and/or large deformation kinematics.

Definition at line 121 of file HillPlasticityStressUpdate.h.

◆ _plasticity_strain

template<bool is_ad>
GenericMaterialProperty<RankTwoTensor, is_ad>& AnisotropicReturnPlasticityStressUpdateBaseTempl< is_ad >::_plasticity_strain
protectedinherited

Plasticity strain tensor material property.

Definition at line 66 of file AnisotropicReturnPlasticityStressUpdateBase.h.

◆ _plasticity_strain_old

template<bool is_ad>
const MaterialProperty<RankTwoTensor>& AnisotropicReturnPlasticityStressUpdateBaseTempl< is_ad >::_plasticity_strain_old
protectedinherited

◆ _qp

template<bool is_ad>
unsigned int Material::_qp
protected

◆ _qsigma

template<bool is_ad>
GenericReal<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_qsigma
protected

Square of the q function for orthotropy.

Definition at line 105 of file HillPlasticityStressUpdate.h.

◆ _stress_np1

template<bool is_ad>
GenericDenseVector<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_stress_np1
protected

Definition at line 123 of file HillPlasticityStressUpdate.h.

◆ _two_shear_modulus

template<bool is_ad>
GenericReal<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_two_shear_modulus
protected

2 * shear modulus

Definition at line 125 of file HillPlasticityStressUpdate.h.

◆ _yield_condition

template<bool is_ad>
GenericReal<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_yield_condition
protected

Definition at line 116 of file HillPlasticityStressUpdate.h.

◆ _yield_stress

template<bool is_ad>
GenericReal<is_ad> HillPlasticityStressUpdateTempl< is_ad >::_yield_stress
protected

Definition at line 117 of file HillPlasticityStressUpdate.h.


The documentation for this class was generated from the following files: