Line data Source code
1 : #pragma once 2 : 3 : #include "MaterialProperty.h" 4 : #include "RadialReturnBackstressStressUpdateBase.h" 5 : 6 : template <bool is_ad> 7 : class CombinedNonlinearHardeningPlasticityTempl 8 : : public RadialReturnBackstressStressUpdateBaseTempl<is_ad> 9 : { 10 : public: 11 : static InputParameters validParams(); 12 : 13 : CombinedNonlinearHardeningPlasticityTempl(const InputParameters & parameters); 14 : 15 : using Material::_qp; 16 : using RadialReturnBackstressStressUpdateBaseTempl<is_ad>::_base_name; 17 : using RadialReturnBackstressStressUpdateBaseTempl<is_ad>::_three_shear_modulus; 18 : 19 : virtual void 20 : computeStressInitialize(const GenericReal<is_ad> & effective_trial_stress, 21 : const GenericRankFourTensor<is_ad> & elasticity_tensor) override; 22 : virtual GenericReal<is_ad> computeResidual(const GenericReal<is_ad> & effective_trial_stress, 23 : const GenericReal<is_ad> & scalar) override; 24 : virtual GenericReal<is_ad> computeDerivative(const GenericReal<is_ad> & effective_trial_stress, 25 : const GenericReal<is_ad> & scalar) override; 26 : 27 : virtual void computeYieldStress(const GenericRankFourTensor<is_ad> & elasticity_tensor); 28 : 29 0 : GenericReal<is_ad> yieldCondition() const { return _yield_condition; } 30 : 31 : virtual void 32 : computeStressFinalize(const GenericRankTwoTensor<is_ad> & plastic_strain_increment) override; 33 : 34 : protected: 35 : virtual void initQpStatefulProperties() override; 36 : virtual void propagateQpStatefulProperties() override; 37 : 38 : virtual void iterationFinalize(const GenericReal<is_ad> & scalar) override; 39 : 40 : virtual GenericReal<is_ad> computeIsotropicHardeningValue(const GenericReal<is_ad> & scalar); 41 : virtual GenericReal<is_ad> computeIsotropicHardeningDerivative(const GenericReal<is_ad> & scalar); 42 : virtual GenericReal<is_ad> computeKinematicHardeningValue(const GenericReal<is_ad> & scalar); 43 : 44 : const Function * _yield_stress_function; 45 : GenericReal<is_ad> _yield_stress; 46 : const Real _isotropic_hardening_constant; 47 : const Function * const _isotropic_hardening_function; 48 : 49 : GenericReal<is_ad> _yield_condition; 50 : GenericReal<is_ad> _isotropic_hardening_slope; 51 : GenericReal<is_ad> _kinematic_hardening_slope; 52 : GenericRankTwoTensor<is_ad> stress_new; 53 : GenericRankTwoTensor<is_ad> elastic_strain_old; 54 : GenericRankTwoTensor<is_ad> strain_increment; 55 : 56 : /// plastic strain 57 : GenericMaterialProperty<RankTwoTensor, is_ad> & _plastic_strain; 58 : 59 : /// old value of plastic strain 60 : const MaterialProperty<RankTwoTensor> & _plastic_strain_old; 61 : 62 : ///@{ Coefficients for combined isotropic and kinematic hardening 63 : const Real _kinematic_hardening_modulus; 64 : const Real _gamma; 65 : const Real _q; 66 : const Real _b; 67 : ///@} 68 : 69 : GenericMaterialProperty<Real, is_ad> & _isotropic_hardening_variable; 70 : const MaterialProperty<Real> & _isotropic_hardening_variable_old; 71 : GenericMaterialProperty<Real, is_ad> & _kinematic_hardening_variable; 72 : const MaterialProperty<Real> & _kinematic_hardening_variable_old; 73 : const GenericVariableValue<is_ad> & _temperature; 74 : }; 75 : 76 : typedef CombinedNonlinearHardeningPlasticityTempl<false> CombinedNonlinearHardeningPlasticity; 77 : typedef CombinedNonlinearHardeningPlasticityTempl<true> ADCombinedNonlinearHardeningPlasticity;