Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://www.mooseframework.org 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 : 12 : #include "AnisotropicReturnCreepStressUpdateBase.h" 13 : 14 : /** 15 : * This class uses the stress update material for an anisotropic creep 16 : * model. This class is one of the basic radial return constitutive models; more complex 17 : * constitutive models combine creep and plasticity. 18 : * 19 : * This class inherits from AnisotropicReturnCreepStressUpdateBase and must be used 20 : * in conjunction with ComputeMultipleInelasticStress. This class calculates 21 : * creep based on stress, temperature, and time effects. This class also 22 : * computes the creep strain as a stateful material property. 23 : * 24 : * This class extends the usage of PowerLawCreep to Hill (i.e. anisotropic) 25 : * cases. For more information, consult, e.g. Stewart et al, "An anisotropic tertiary creep 26 : * damage constitutive model for anistropic materials", International Journal of Pressure Vessels 27 : * and Piping 88 (2011) 356--364. 28 : */ 29 : template <bool is_ad> 30 : class HillCreepStressUpdateTempl : public AnisotropicReturnCreepStressUpdateBaseTempl<is_ad> 31 : { 32 : public: 33 : static InputParameters validParams(); 34 : 35 : HillCreepStressUpdateTempl(const InputParameters & parameters); 36 : 37 : protected: 38 : usingTransientInterfaceMembers; 39 : using Material::_current_elem; 40 : using Material::_q_point; 41 : using Material::_qp; 42 : 43 : virtual void 44 : computeStressInitialize(const GenericDenseVector<is_ad> & stress_dev, 45 : const GenericDenseVector<is_ad> & stress, 46 : const GenericRankFourTensor<is_ad> & elasticity_tensor) override; 47 : virtual GenericReal<is_ad> 48 : computeResidual(const GenericDenseVector<is_ad> & effective_trial_stress, 49 : const GenericDenseVector<is_ad> & stress_new, 50 : const GenericReal<is_ad> & scalar) override; 51 : virtual GenericReal<is_ad> 52 : computeDerivative(const GenericDenseVector<is_ad> & effective_trial_stress, 53 : const GenericDenseVector<is_ad> & stress_new, 54 : const GenericReal<is_ad> & scalar) override; 55 : 56 : virtual Real 57 : computeReferenceResidual(const GenericDenseVector<is_ad> & effective_trial_stress, 58 : const GenericDenseVector<is_ad> & stress_new, 59 : const GenericReal<is_ad> & residual, 60 : const GenericReal<is_ad> & scalar_effective_inelastic_strain) override; 61 : 62 : /** 63 : * Perform any necessary steps to finalize strain increment after return mapping iterations 64 : * @param inelasticStrainIncrement Inelastic strain increment 65 : * @param stress Cauchy stresss tensor 66 : * @param stress_dev Deviatoric partt of the Cauchy stresss tensor 67 : * @param delta_gamma Generalized radial return's plastic multiplier 68 : */ 69 : virtual void computeStrainFinalize(GenericRankTwoTensor<is_ad> & inelasticStrainIncrement, 70 : const GenericRankTwoTensor<is_ad> & stress, 71 : const GenericDenseVector<is_ad> & stress_dev, 72 : const GenericReal<is_ad> & delta_gamma) override; 73 : 74 : /** 75 : * Perform any necessary steps to finalize state after return mapping iterations 76 : * @param inelasticStrainIncrement Inelastic strain increment 77 : * @param delta_gamma Generalized radial return's plastic multiplier 78 : * @param stress Cauchy stresss tensor 79 : * @param stress_dev Deviatoric partt of the Cauchy stresss tensor 80 : */ 81 : virtual void 82 : computeStressFinalize(const GenericRankTwoTensor<is_ad> & inelasticStrainIncrement, 83 : const GenericReal<is_ad> & delta_gamma, 84 : GenericRankTwoTensor<is_ad> & stress, 85 : const GenericDenseVector<is_ad> & stress_dev, 86 : const GenericRankTwoTensor<is_ad> & stress_old, 87 : const GenericRankFourTensor<is_ad> & elasticity_tensor) override; 88 : 89 : virtual GenericReal<is_ad> 90 : initialGuess(const GenericDenseVector<is_ad> & /*stress_dev*/) override; 91 : 92 : /** 93 : * Does the model require the elasticity tensor to be isotropic? Not in principle. 94 : * TODO: Take care of rotation of anisotropy parameters 95 : */ 96 96 : bool requiresIsotropicTensor() override { return false; } 97 : 98 : /** 99 : * Compute the limiting value of the time step for this material according to the numerical 100 : * integration error 101 : * @return Limiting time step 102 : */ 103 924728 : virtual Real computeIntegrationErrorTimeStep() override 104 : { 105 924728 : return this->_max_integration_error_time_step; 106 : } 107 : 108 : /// Flag to determine if temperature is supplied by the user 109 : const bool _has_temp; 110 : 111 : /// Temperature variable value 112 : const VariableValue & _temperature; 113 : 114 : /// Leading coefficient 115 : const Real _coefficient; 116 : 117 : /// Exponent on the effective stress 118 : const Real _n_exponent; 119 : 120 : /// Exponent on time 121 : const Real _m_exponent; 122 : 123 : /// Activation energy for exp term 124 : const Real _activation_energy; 125 : 126 : /// Gas constant for exp term 127 : const Real _gas_constant; 128 : 129 : /// Simulation start time 130 : const Real _start_time; 131 : 132 : /// Exponential calculated from activation, gas constant, and temperature 133 : Real _exponential; 134 : 135 : /// Exponential calculated from current time 136 : Real _exp_time; 137 : 138 : /// Hill constant material 139 : const MaterialProperty<std::vector<Real>> & _hill_constants; 140 : 141 : /// Hill tensor, when global axes do not (somehow) align with those of the material 142 : /// Example: Large rotation due to rigid body and/or large deformation kinematics 143 : const MaterialProperty<DenseMatrix<Real>> * _hill_tensor; 144 : 145 : /// Square of the q function for orthotropy 146 : GenericReal<is_ad> _qsigma; 147 : 148 : /// 2 * shear modulus 149 : GenericReal<is_ad> _two_shear_modulus; 150 : }; 151 : 152 : typedef HillCreepStressUpdateTempl<false> HillCreepStressUpdate; 153 : typedef HillCreepStressUpdateTempl<true> ADHillCreepStressUpdate;