https://mooseframework.inl.gov
ComputeMultipleInelasticStressBase.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 "DamageBase.h"
14 #include "StressUpdateBase.h"
15 
33 {
34 public:
36 
38 
39  virtual void initialSetup() override;
40 
41 protected:
42  virtual std::vector<MaterialName> getInelasticModelNames() = 0;
43 
44  virtual void initQpStatefulProperties() override;
45 
46  virtual void computeQpStress() override;
47 
53 
60  virtual void finiteStrainRotation(const bool force_elasticity_rotation = false);
61 
74  virtual void updateQpState(RankTwoTensor & elastic_strain_increment,
75  RankTwoTensor & combined_inelastic_strain_increment) = 0;
76 
87  virtual void updateQpStateSingleModel(unsigned model_number,
88  RankTwoTensor & elastic_strain_increment,
89  RankTwoTensor & combined_inelastic_strain_increment);
90 
96  virtual void computeQpJacobianMult();
97 
112  virtual void computeAdmissibleState(unsigned model_number,
113  RankTwoTensor & elastic_strain_increment,
114  RankTwoTensor & inelastic_strain_increment,
115  RankFourTensor & consistent_tangent_operator);
116 
118  const unsigned int _max_iterations;
123 
126 
131 
134 
137 
140 
142  unsigned _num_models;
143 
145  std::vector<bool> _tangent_computation_flag;
146 
149 
151  std::vector<Real> _inelastic_weights;
152 
154  std::vector<RankFourTensor> _consistent_tangent_operator;
155 
157  const bool _cycle_models;
158 
160 
165 
173  std::vector<StressUpdateBase *> _models;
174 
177 
180 
183 
185 };
const bool _cycle_models
whether to cycle through the models, using only one model per timestep
bool _is_elasticity_tensor_guaranteed_isotropic
is the elasticity tensor guaranteed to be isotropic?
const RankFourTensor _identity_symmetric_four
Rank four symmetric identity tensor.
virtual void computeQpJacobianMult()
Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[...] computed by the inelastic models, compute _Jacobian_mult[_qp].
virtual std::vector< MaterialName > getInelasticModelNames()=0
virtual void finiteStrainRotation(const bool force_elasticity_rotation=false)
Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration...
ComputeMultipleInelasticStressBase(const InputParameters &parameters)
virtual void updateQpStateSingleModel(unsigned model_number, RankTwoTensor &elastic_strain_increment, RankTwoTensor &combined_inelastic_strain_increment)
An optimised version of updateQpState that gets used when the number of plastic models is unity...
const MaterialProperty< RankTwoTensor > & _strain_increment
virtual void updateQpState(RankTwoTensor &elastic_strain_increment, RankTwoTensor &combined_inelastic_strain_increment)=0
Given the _strain_increment[_qp], iterate over all of the user-specified recompute materials in order...
std::vector< StressUpdateBase * > _models
The user supplied list of inelastic models to use in the simulation.
bool _all_models_isotropic
are all inelastic models inherently isotropic? (not the case for e.g. weak plane plasticity models) ...
virtual void computeAdmissibleState(unsigned model_number, RankTwoTensor &elastic_strain_increment, RankTwoTensor &inelastic_strain_increment, RankFourTensor &consistent_tangent_operator)
Given a trial stress (_stress[_qp]) and a strain increment (elastic_strain_increment) let the model_n...
std::vector< RankFourTensor > _consistent_tangent_operator
the consistent tangent operators computed by each plastic model
TangentCalculationMethod _tangent_calculation_method
Calculation method for the tangent modulus.
DamageBaseTempl< false > * _damage_model
Pointer to the damage model.
std::vector< bool > _tangent_computation_flag
Flags to compute tangent during updateState call.
TangentOperatorEnum
what sort of Tangent operator to calculate
ComputeMultipleInelasticStressBase computes the stress, the consistent tangent operator (or an approx...
MaterialProperty< RankTwoTensor > & _inelastic_strain
The sum of the inelastic strains that come from the plastic models.
ComputeFiniteStrainElasticStress computes the stress following elasticity theory for finite strains...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< Real > _inelastic_weights
_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)
virtual void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point...
const InputParameters & parameters() const
const bool _perform_finite_strain_rotations
after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rot...
virtual void computeQpStressIntermediateConfiguration()
Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration ...
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
old value of inelastic strain
TangentCalculationMethod
TangentCalculationMethod is an enum that determines the calculation method for the tangent operator...
enum ComputeMultipleInelasticStressBase::TangentOperatorEnum _tangent_operator_type
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
Strain tensors.
const unsigned int _max_iterations
Input parameters associated with the recompute iteration to return the stress state to the yield surf...