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 112 of file HillPlasticityStressUpdate.C.

119 {
120  omega_gamma = 0.0;
121  sy_gamma = 0.0;
122 
123  GenericDenseVector<is_ad> K_deltaGamma(6);
124  omega = computeOmega(delta_gamma, stress_trial);
125 
127  for (unsigned int i = 0; i < 6; i++)
128  K(i) = _eigenvalues_hill(i) /
129  (Utility::pow<2>(1 + _two_shear_modulus * delta_gamma * _eigenvalues_hill(i)));
130 
131  for (unsigned int i = 0; i < 6; i++)
132  K_deltaGamma(i) = -2.0 * _two_shear_modulus * _eigenvalues_hill(i) * K(i) /
133  (1 + _two_shear_modulus * delta_gamma * _eigenvalues_hill(i));
134 
135  for (unsigned int i = 0; i < 6; i++)
136  omega_gamma += K_deltaGamma(i) * stress_trial(i) * stress_trial(i);
137 
138  omega_gamma /= 4.0 * omega;
139  sy_gamma = 2.0 * sy_alpha * (omega + delta_gamma * omega_gamma);
140 }
static const std::string K
Definition: NS.h:170
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 187 of file HillPlasticityStressUpdate.C.

191 {
192  // If in elastic regime, return unit derivative
193  if (_yield_condition <= 0.0)
194  return 1.0;
195 
196  GenericReal<is_ad> omega = computeOmega(delta_gamma, _stress_np1);
198 
199  GenericReal<is_ad> sy =
202 
203  GenericReal<is_ad> omega_gamma;
204  GenericReal<is_ad> sy_gamma;
205 
206  computeDeltaDerivatives(delta_gamma, _stress_np1, sy_alpha, omega, omega_gamma, sy_gamma);
207  GenericReal<is_ad> residual_derivative = 1 / omega * (sy_gamma - 1 / omega * omega_gamma * sy);
208 
209  return residual_derivative;
210 }
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 276 of file HillPlasticityStressUpdate.C.

277 {
280  std::pow(_hardening_variable[_qp] + 1.0e-30, _hardening_exponent - 1));
281 }
auto raw_value(const Eigen::Map< T > &in)
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 268 of file HillPlasticityStressUpdate.C.

270 {
271  return _hardening_variable_old[_qp] + 2.0 * delta_gamma * omega;
272 }
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 214 of file HillPlasticityStressUpdate.C.

216 {
217  const unsigned int dimension = hill_tensor.n();
218 
220  for (unsigned int index_i = 0; index_i < dimension; index_i++)
221  for (unsigned int index_j = 0; index_j < dimension; index_j++)
222  A(index_i, index_j) = MetaPhysicL::raw_value(hill_tensor(index_i, index_j));
223 
224  if (isBlockDiagonal(A))
225  {
226  Eigen::SelfAdjointEigenSolver<AnisotropyMatrixRealBlock> es(A.block<3, 3>(0, 0));
227 
228  auto lambda = es.eigenvalues();
229  auto v = es.eigenvectors();
230 
231  _eigenvalues_hill(0) = lambda(0);
232  _eigenvalues_hill(1) = lambda(1);
233  _eigenvalues_hill(2) = lambda(2);
234  _eigenvalues_hill(3) = A(3, 3);
235  _eigenvalues_hill(4) = A(4, 4);
236  _eigenvalues_hill(5) = A(5, 5);
237 
238  _eigenvectors_hill(0, 0) = v(0, 0);
239  _eigenvectors_hill(0, 1) = v(0, 1);
240  _eigenvectors_hill(0, 2) = v(0, 2);
241  _eigenvectors_hill(1, 0) = v(1, 0);
242  _eigenvectors_hill(1, 1) = v(1, 1);
243  _eigenvectors_hill(1, 2) = v(1, 2);
244  _eigenvectors_hill(2, 0) = v(2, 0);
245  _eigenvectors_hill(2, 1) = v(2, 1);
246  _eigenvectors_hill(2, 2) = v(2, 2);
247  _eigenvectors_hill(3, 3) = 1.0;
248  _eigenvectors_hill(4, 4) = 1.0;
249  _eigenvectors_hill(5, 5) = 1.0;
250  }
251  else
252  {
253  Eigen::SelfAdjointEigenSolver<AnisotropyMatrixReal> es_b(A);
254 
255  auto lambda_b = es_b.eigenvalues();
256  auto v_b = es_b.eigenvectors();
257  for (unsigned int index_i = 0; index_i < dimension; index_i++)
258  _eigenvalues_hill(index_i) = lambda_b(index_i);
259 
260  for (unsigned int index_i = 0; index_i < dimension; index_i++)
261  for (unsigned int index_j = 0; index_j < dimension; index_j++)
262  _eigenvectors_hill(index_i, index_j) = v_b(index_i, index_j);
263  }
264 }
Eigen::Matrix< Real, 6, 6 > AnisotropyMatrixReal
auto raw_value(const Eigen::Map< T > &in)
GenericDenseMatrix< is_ad > _eigenvectors_hill
GenericDenseVector< is_ad > _eigenvalues_hill
static const std::string v
Definition: NS.h:84
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  return std::sqrt(omega);
108 }
Moose::GenericType< Real, is_ad > GenericReal
static const std::string K
Definition: NS.h:170
GenericReal< is_ad > _two_shear_modulus
2 * shear modulus
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
GenericDenseVector< is_ad > _eigenvalues_hill

◆ 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 144 of file HillPlasticityStressUpdate.C.

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

◆ 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 156 of file HillPlasticityStressUpdate.C.

160 {
161 
162  // If in elastic regime, just return
163  if (_yield_condition <= 0.0)
164  return 0.0;
165 
166  GenericDenseMatrix<is_ad> eigenvectors_hill_transpose(6, 6);
167 
168  _eigenvectors_hill.get_transpose(eigenvectors_hill_transpose);
169  eigenvectors_hill_transpose.vector_mult(_stress_np1, stress_dev);
170 
171  GenericReal<is_ad> omega = computeOmega(delta_gamma, _stress_np1);
172 
173  // Hardening variable is \alpha isotropic hardening for now.
174  _hardening_variable[_qp] = computeHardeningValue(delta_gamma, omega);
175  GenericReal<is_ad> s_y =
178 
179  GenericReal<is_ad> residual = 0.0;
180  residual = s_y / omega - 1.0;
181 
182  return residual;
183 }
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 > 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 285 of file HillPlasticityStressUpdate.C.

290 {
291  // e^P = delta_gamma * hill_tensor * stress
292  GenericDenseVector<is_ad> inelasticStrainIncrement_vector(6);
293  GenericDenseVector<is_ad> hill_stress(6);
294  _hill_tensor[_qp].vector_mult(hill_stress, stress_dev);
295  hill_stress.scale(delta_gamma);
296  inelasticStrainIncrement_vector = hill_stress;
297 
298  inelasticStrainIncrement(0, 0) = inelasticStrainIncrement_vector(0);
299  inelasticStrainIncrement(1, 1) = inelasticStrainIncrement_vector(1);
300  inelasticStrainIncrement(2, 2) = inelasticStrainIncrement_vector(2);
301  inelasticStrainIncrement(0, 1) = inelasticStrainIncrement(1, 0) =
302  inelasticStrainIncrement_vector(3) / 2.0;
303  inelasticStrainIncrement(1, 2) = inelasticStrainIncrement(2, 1) =
304  inelasticStrainIncrement_vector(4) / 2.0;
305  inelasticStrainIncrement(0, 2) = inelasticStrainIncrement(2, 0) =
306  inelasticStrainIncrement_vector(5) / 2.0;
307 
308  // Calculate equivalent plastic strain
309  GenericDenseVector<is_ad> Mepsilon(6);
310  _hill_tensor[_qp].vector_mult(Mepsilon, inelasticStrainIncrement_vector);
311  GenericReal<is_ad> eq_plastic_strain_inc = Mepsilon.dot(inelasticStrainIncrement_vector);
312 
313  if (eq_plastic_strain_inc > 0.0)
314  eq_plastic_strain_inc = std::sqrt(eq_plastic_strain_inc);
315 
316  _effective_inelastic_strain[_qp] = _effective_inelastic_strain_old[_qp] + eq_plastic_strain_inc;
317 
319  inelasticStrainIncrement, stress, stress_dev, delta_gamma);
320 }
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...

◆ 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 324 of file HillPlasticityStressUpdate.C.

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