Line data Source code
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 : 12 : #include "StressUpdateBase.h" 13 : #include "LinearViscoelasticityBase.h" 14 : 15 : /** 16 : * This class computes a creep strain increment associated with a linear viscoelastic 17 : * model contained in a LinearViscoelasticityBase material. The creep strain increment 18 : * is deduced from the elastic strain increment and added to the inelastic strain increment. 19 : * The stress is reduced accordingly. 20 : * 21 : * This material must be used in conjunction with ComputeMultipleInelasticStress, and uses 22 : * an incremental (small or finite) strain formulation. To use viscoelastic models with 23 : * total small strain, use a ComputeLinearViscoelasticStress material instead. 24 : */ 25 : class LinearViscoelasticStressUpdate : public StressUpdateBase 26 : { 27 : public: 28 : static InputParameters validParams(); 29 : 30 : LinearViscoelasticStressUpdate(const InputParameters & parameters); 31 : 32 : /** 33 : * Computes the new creep strain, and removes the creep contribution from the elastic strains and 34 : * stress. The tangent_operator is set equal to the elasticity tensor of the material. 35 : */ 36 : using StressUpdateBase::updateState; 37 : 38 : virtual void updateState(RankTwoTensor & strain_increment, 39 : RankTwoTensor & inelastic_strain_increment, 40 : const RankTwoTensor & rotation_increment, 41 : RankTwoTensor & stress_new, 42 : const RankTwoTensor & stress_old, 43 : const RankFourTensor & elasticity_tensor, 44 : const RankTwoTensor & elastic_strain_old, 45 : bool compute_full_tangent_operator, 46 : RankFourTensor & tangent_operator) override; 47 : 48 : /// Reimplemented from StressUpdateBase 49 : virtual void propagateQpStatefulProperties() override; 50 : 51 126 : virtual bool requiresIsotropicTensor() override { return false; } 52 : 53 : protected: 54 : virtual void initQpStatefulProperties() override; 55 : 56 : ///@{ Creep strain 57 : MaterialProperty<RankTwoTensor> & _creep_strain; 58 : const MaterialProperty<RankTwoTensor> & _creep_strain_old; 59 : ///@} 60 : 61 : /// Apparent creep strain (extracted from a LinearViscoelasticityBase object) 62 : const MaterialProperty<RankTwoTensor> & _apparent_creep_strain; 63 : /// Apparent elasticity tensor (extracted from a LinearViscoelasticityBase object) 64 : const MaterialProperty<RankFourTensor> & _apparent_elasticity_tensor; 65 : /// Instantaneous compliance tensor (extracted from a LinearViscoelasticityBase object) 66 : const MaterialProperty<RankFourTensor> & _elasticity_tensor_inv; 67 : };