https://mooseframework.inl.gov
ADComputeMultipleInelasticStress.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 #include "ADRankTwoTensorForward.h"
15 #include "StressUpdateBase.h"
16 #include "DamageBase.h"
17 
34 {
35 public:
37 
39 
40  virtual void initialSetup() override;
41 
42 protected:
43  virtual void initQpStatefulProperties() override;
44 
45  virtual void computeQpStress() override;
46 
52 
57  virtual void finiteStrainRotation();
58 
70  virtual void updateQpState(ADRankTwoTensor & elastic_strain_increment,
71  ADRankTwoTensor & combined_inelastic_strain_increment);
72 
82  virtual void updateQpStateSingleModel(unsigned model_number,
83  ADRankTwoTensor & elastic_strain_increment,
84  ADRankTwoTensor & combined_inelastic_strain_increment);
85 
98  virtual void computeAdmissibleState(unsigned model_number,
99  ADRankTwoTensor & elastic_strain_increment,
100  ADRankTwoTensor & inelastic_strain_increment);
101 
103  const unsigned int _max_iterations;
108 
111 
114 
117 
119  const unsigned _num_models;
120 
122  const std::vector<Real> _inelastic_weights;
123 
125  const bool _cycle_models;
126 
128 
136  std::vector<ADStressUpdateBase *> _models;
137 
140 
143 
145 };
const std::vector< Real > _inelastic_weights
_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)
ADComputeMultipleInelasticStress(const InputParameters &parameters)
virtual void updateQpStateSingleModel(unsigned model_number, ADRankTwoTensor &elastic_strain_increment, ADRankTwoTensor &combined_inelastic_strain_increment)
An optimised version of updateQpState that gets used when the number of plastic models is unity...
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
old value of inelastic strain
ADMaterialProperty< RankTwoTensor > & _inelastic_strain
The sum of the inelastic strains that come from the plastic models.
virtual void computeQpStressIntermediateConfiguration()
Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration ...
ADComputeMultipleInelasticStress computes the stress and a decomposition of the strain into elastic a...
const bool _perform_finite_strain_rotations
after updateQpState, rotate the stress, elastic_strain, and inelastic_strain using _rotation_incremen...
virtual void updateQpState(ADRankTwoTensor &elastic_strain_increment, ADRankTwoTensor &combined_inelastic_strain_increment)
Given the _strain_increment[_qp], iterate over all of the user-specified recompute materials in order...
const unsigned int _max_iterations
Input parameters associated with the recompute iteration to return the stress state to the yield surf...
ADComputeFiniteStrainElasticStress computes the stress following elasticity theory for finite strains...
std::vector< ADStressUpdateBase * > _models
The user supplied list of inelastic models to use in the simulation.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool _is_elasticity_tensor_guaranteed_isotropic
is the elasticity tensor guaranteed to be isotropic?
const unsigned _num_models
number of plastic models
DamageBaseTempl< true > * _damage_model
Pointer to the damage model.
const InputParameters & parameters() const
const bool _cycle_models
whether to cycle through the models, using only one model per timestep
virtual void computeAdmissibleState(unsigned model_number, ADRankTwoTensor &elastic_strain_increment, ADRankTwoTensor &inelastic_strain_increment)
Given a trial stress (_stress[_qp]) and a strain increment (elastic_strain_increment) let the model_n...
virtual void finiteStrainRotation()
Rotate _elastic_strain, _stress, and _inelastic_strain to the new configuration.