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.
const InputParameters & parameters() const
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 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.