https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
34public:
36
38
39 virtual void initialSetup() override;
40
41protected:
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};
TangentCalculationMethod
TangentCalculationMethod is an enum that determines the calculation method for the tangent operator.
ComputeFiniteStrainElasticStress computes the stress following elasticity theory for finite strains.
ComputeMultipleInelasticStressBase computes the stress, the consistent tangent operator (or an approx...
TangentCalculationMethod _tangent_calculation_method
Calculation method for the tangent modulus.
virtual void finiteStrainRotation(const bool force_elasticity_rotation=false)
Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration.
const MaterialProperty< RankTwoTensor > & _strain_increment
const bool _perform_finite_strain_rotations
after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rot...
std::vector< Real > _inelastic_weights
_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)
std::vector< StressUpdateBase * > _models
The user supplied list of inelastic models to use in the simulation.
virtual std::vector< MaterialName > getInelasticModelNames()=0
const bool _cycle_models
whether to cycle through the models, using only one model per timestep
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,...
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< bool > _tangent_computation_flag
Flags to compute tangent during updateState call.
DamageBaseTempl< false > * _damage_model
Pointer to the damage model.
MaterialProperty< RankTwoTensor > & _inelastic_strain
The sum of the inelastic strains that come from the plastic models.
const RankFourTensor _identity_symmetric_four
Rank four symmetric identity tensor.
virtual void computeQpStressIntermediateConfiguration()
Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration ...
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...
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
old value of inelastic strain
TangentOperatorEnum
what sort of Tangent operator to calculate
virtual void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point.
enum ComputeMultipleInelasticStressBase::TangentOperatorEnum _tangent_operator_type
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
Strain tensors.
bool _all_models_isotropic
are all inelastic models inherently isotropic? (not the case for e.g. weak plane plasticity models)
const unsigned int _max_iterations
Input parameters associated with the recompute iteration to return the stress state to the yield surf...
std::vector< RankFourTensor > _consistent_tangent_operator
the consistent tangent operators computed by each plastic model
bool _is_elasticity_tensor_guaranteed_isotropic
is the elasticity tensor guaranteed to be isotropic?
virtual void computeQpJacobianMult()
Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[....
DamageBase is a base class for damage models, which modify the stress tensor computed by another mode...
Definition DamageBase.h:26