https://mooseframework.inl.gov
Loading...
Searching...
No Matches
HillElastoPlasticityStressUpdate.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
13
21template <bool is_ad>
24{
25public:
27
29
32 const GenericMaterialProperty<RankTwoTensor, is_ad> & strain_rate) override;
33
34protected:
36 using AnisotropicReturnPlasticityStressUpdateBaseTempl<is_ad>::_effective_inelastic_strain;
37 using AnisotropicReturnPlasticityStressUpdateBaseTempl<is_ad>::_effective_inelastic_strain_old;
40 using AnisotropicReturnPlasticityStressUpdateBaseTempl<is_ad>::isBlockDiagonal;
43 using Material::_qp;
45
46 virtual void initQpStatefulProperties() override;
47
48 virtual void
50 const GenericDenseVector<is_ad> & stress,
51 const GenericRankFourTensor<is_ad> & elasticity_tensor) override;
52
57
58 virtual GenericReal<is_ad>
59 computeResidual(const GenericDenseVector<is_ad> & effective_trial_stress,
60 const GenericDenseVector<is_ad> & stress_new,
61 const GenericReal<is_ad> & scalar) override;
62 virtual GenericReal<is_ad>
63 computeDerivative(const GenericDenseVector<is_ad> & effective_trial_stress,
64 const GenericDenseVector<is_ad> & stress_new,
65 const GenericReal<is_ad> & scalar) override;
66
67 virtual Real
68 computeReferenceResidual(const GenericDenseVector<is_ad> & effective_trial_stress,
69 const GenericDenseVector<is_ad> & stress_new,
70 const GenericReal<is_ad> & residual,
71 const GenericReal<is_ad> & scalar_effective_inelastic_strain) override;
72 virtual void propagateQpStatefulProperties() override;
77 bool requiresIsotropicTensor() override { return false; }
78
81 const GenericReal<is_ad> & omega);
86 void computeHillTensorEigenDecomposition(const DenseMatrix<GenericReal<is_ad>> & hill_tensor);
87
95 virtual void computeStrainFinalize(GenericRankTwoTensor<is_ad> & inelasticStrainIncrement,
96 const GenericRankTwoTensor<is_ad> & stress,
97 const GenericDenseVector<is_ad> & stress_dev,
98 const GenericReal<is_ad> & delta_gamma) override;
99
107 virtual void
108 computeStressFinalize(const GenericRankTwoTensor<is_ad> & inelasticStrainIncrement,
109 const GenericReal<is_ad> & delta_gamma,
111 const GenericDenseVector<is_ad> & stress_dev,
112 const GenericRankTwoTensor<is_ad> & stress_old,
113 const GenericRankFourTensor<is_ad> & elasticity_tensor) override;
114
116 const GenericDenseVector<is_ad> & stress_trial);
117
118 void computeDeltaDerivatives(const GenericReal<is_ad> & delta_gamma,
119 const GenericDenseVector<is_ad> & stress_trial,
120 const GenericReal<is_ad> & sy_alpha,
121 GenericReal<is_ad> & omega,
122 GenericReal<is_ad> & omega_gamma,
123 GenericReal<is_ad> & sy_gamma);
124
127
131
133 const std::string _elasticity_tensor_name;
136
139
142
145
148
152
156
160
166 const enum class Axis { X, Y, Z } _axis;
167};
168
HillElastoPlasticityStressUpdateTempl< true > ADHillElastoPlasticityStressUpdate
HillElastoPlasticityStressUpdateTempl< false > HillElastoPlasticityStressUpdate
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
Moose::GenericType< Real, is_ad > GenericReal
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
Moose::GenericType< DenseMatrix< Real >, is_ad > GenericDenseMatrix
This class provides baseline functionality for anisotropic (Hill-like) plasticity models based on the...
GenericMaterialProperty< RankTwoTensor, is_ad > & _plasticity_strain
Plasticity strain tensor material property.
This class uses the stress update material in an anisotropic return mapping.
const MaterialProperty< RankTwoTensor > & _rotation_matrix_transpose_old
virtual GenericReal< is_ad > computeDerivative(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &scalar) override
GenericMaterialProperty< DenseMatrix< Real >, is_ad > & _elasticity_eigenvectors
void computeHillTensorEigenDecomposition(const DenseMatrix< GenericReal< is_ad > > &hill_tensor)
Compute eigendecomposition of Hill's tensor for anisotropic plasticity.
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)
void computeElasticityTensorEigenDecomposition()
Compute eigendecomposition of element-wise elasticity tensor.
virtual GenericReal< is_ad > computeResidual(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &scalar) override
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
const GenericMaterialProperty< RankFourTensor, is_ad > & _elasticity_tensor
Anisotropic elasticity tensor material property.
const MaterialProperty< DenseMatrix< Real > > & _hill_tensor
Hill tensor, when global axes do not (somehow) align with those of the material Example: Large rotati...
virtual void 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 > &stress_old, const GenericRankFourTensor< is_ad > &elasticity_tensor) override
Perform any necessary steps to finalize state after return mapping iterations.
const MaterialProperty< RankTwoTensor > & _rotation_matrix_old
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic? No, this class does anisotropic elasto-...
GenericReal< is_ad > _qsigma
Square of the q function for orthotropy.
GenericMaterialProperty< DenseVector< Real >, is_ad > & _sigma_tilde
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
GenericMaterialProperty< DenseVector< Real >, is_ad > & _elasticity_eigenvalues
GenericMaterialProperty< Real, is_ad > & _hardening_variable
MaterialProperty< RankTwoTensor > & _rotation_matrix
virtual void computeStressInitialize(const GenericDenseVector< is_ad > &stress_dev, const GenericDenseVector< is_ad > &stress, const GenericRankFourTensor< is_ad > &elasticity_tensor) override
GenericMaterialProperty< DenseMatrix< Real >, is_ad > & _alpha_matrix
virtual Real computeStrainEnergyRateDensity(const GenericMaterialProperty< RankTwoTensor, is_ad > &stress, const GenericMaterialProperty< RankTwoTensor, is_ad > &strain_rate) override
MaterialProperty< RankTwoTensor > & _rotation_matrix_transpose
GenericMaterialProperty< DenseVector< Real >, is_ad > & _b_eigenvalues
GenericMaterialProperty< DenseVector< Real >, is_ad > & _sigma_tilde_rotated
const MaterialProperty< Real > & _hardening_variable_old
GenericReal< is_ad > computeHardeningValue(const GenericReal< is_ad > &scalar, const GenericReal< is_ad > &omega)
GenericMaterialProperty< DenseMatrix< Real >, is_ad > & _b_eigenvectors
GenericReal< is_ad > computeOmega(const GenericReal< is_ad > &delta_gamma, const GenericDenseVector< is_ad > &stress_trial)
enum HillElastoPlasticityStressUpdateTempl::Axis _axis
virtual void computeStrainFinalize(GenericRankTwoTensor< is_ad > &inelasticStrainIncrement, const GenericRankTwoTensor< is_ad > &stress, const GenericDenseVector< is_ad > &stress_dev, const GenericReal< is_ad > &delta_gamma) override
Perform any necessary steps to finalize strain increment after return mapping iterations.
unsigned int _qp
const Elem *const & _current_elem
const MooseArray< Point > & _q_point
void paramError(const std::string &param, Args... args) const