https://mooseframework.inl.gov
ViscoplasticityStressUpdateBase.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 
12 #include "StressUpdateBase.h"
13 
14 template <bool is_ad>
16 {
17 public:
19 
21 
22  virtual Real computeTimeStepLimit() override;
23  bool requiresIsotropicTensor() override { return true; }
24 
26 
27 protected:
28  virtual void initQpStatefulProperties() override;
29 
30  virtual void propagateQpStatefulProperties() override;
31 
37  virtual void computeStressInitialize(const GenericReal<is_ad> & /*effective_trial_stress*/,
38  const GenericRankFourTensor<is_ad> & /*elasticity_tensor*/)
39  {
40  }
41 
46  virtual void
47  computeStressFinalize(const GenericRankTwoTensor<is_ad> & /*plastic_strain_increment*/)
48  {
49  }
50 
51  void updateIntermediatePorosity(const GenericRankTwoTensor<is_ad> & elastic_strain_increment);
52 
54  const std::string _total_strain_base_name;
55 
58 
63 
68 
71 
74 
77 
79  const bool _verbose;
80 
83 
84  enum class NegativeBehavior
85  {
86  ZERO,
88  EXCEPTION
89  };
90 
93 
99 };
100 
101 #define usingViscoplasticityStressUpdateBaseMembers \
102  usingTransientInterfaceMembers; \
103  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_name; \
104  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_qp; \
105  using ViscoplasticityStressUpdateBaseTempl<is_ad>::isParamValid; \
106  using ViscoplasticityStressUpdateBaseTempl<is_ad>::paramError; \
107  using ViscoplasticityStressUpdateBaseTempl<is_ad>::paramWarning; \
108  using ViscoplasticityStressUpdateBaseTempl<is_ad>::updateState; \
109  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_console; \
110  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_q_point; \
111  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_verbose; \
112  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_intermediate_porosity; \
113  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_effective_inelastic_strain; \
114  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_effective_inelastic_strain_old; \
115  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_inelastic_strain; \
116  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_inelastic_strain_old; \
117  using ViscoplasticityStressUpdateBaseTempl<is_ad>::_porosity_old; \
118  using ViscoplasticityStressUpdateBaseTempl<is_ad>::updateIntermediatePorosity; \
119  using ViscoplasticityStressUpdateBaseTempl<is_ad>::computeStressFinalize; \
120  using ViscoplasticityStressUpdateBaseTempl<is_ad>::computeStressInitialize
121 
virtual void propagateQpStatefulProperties() override
If updateState is not called during a timestep, this will be.
Moose::GenericType< Real, is_ad > GenericReal
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &)
Perform any necessary steps to finalize state after return mapping iterations.
GenericMaterialProperty< Real, is_ad > & _effective_inelastic_strain
Effective inelastic strain material property.
const NegativeBehavior _negative_behavior
Enum for negative porosity handling.
void updateIntermediatePorosity(const GenericRankTwoTensor< is_ad > &elastic_strain_increment)
ViscoplasticityStressUpdateBaseTempl< false > ViscoplasticityStressUpdateBase
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
const GenericMaterialProperty< RankTwoTensor, is_ad > & _strain_increment
Material property for the total strain increment.
GenericReal< is_ad > _intermediate_porosity
Container for the porosity calculated from all other intelastic models except the current model...
const std::string _total_strain_base_name
String designating the base name of the total strain.
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
bool requiresIsotropicTensor() override
Does the model require the elasticity tensor to be isotropic?
StressUpdateBase is a material that is not called by MOOSE because of the compute=false flag set in t...
ViscoplasticityStressUpdateBaseTempl(const InputParameters &parameters)
const bool _verbose
Flag to enable verbose output.
GenericMaterialProperty< RankTwoTensor, is_ad > & _inelastic_strain
Creep strain material property.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real _max_inelastic_increment
Max increment for inelastic strain.
virtual void computeStressInitialize(const GenericReal< is_ad > &, const GenericRankFourTensor< is_ad > &)
Perform any necessary initialization before return mapping iterations.
const InputParameters & parameters() const
ViscoplasticityStressUpdateBaseTempl< true > ADViscoplasticityStressUpdateBase
const MaterialProperty< Real > & _effective_inelastic_strain_old
const MaterialProperty< Real > & _porosity_old
Material property for the old porosity.
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor