https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
ComputeCreepPlasticityStress Class Reference

ComputeCreepPlasticityStress computes the stress, the consistent tangent operator (or an approximation to it), and a decomposition of the strain into elastic and inelastic parts. More...

#include <ComputeCreepPlasticityStress.h>

Inheritance diagram for ComputeCreepPlasticityStress:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 ComputeCreepPlasticityStress (const InputParameters &parameters)
 
virtual void initialSetup () override
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Types

enum class  TangentOperatorEnum { elastic , nonlinear }
 what sort of Tangent operator to calculate More...
 

Protected Member Functions

virtual std::vector< MaterialName > getInelasticModelNames () override
 
virtual void updateQpState (RankTwoTensor &elastic_strain_increment, RankTwoTensor &combined_inelastic_strain_increment) override
 Given the _strain_increment[_qp], iterate over all of the user-specified recompute materials in order to find an admissible stress (which is placed into _stress[_qp]) and set of inelastic strains, as well as the tangent operator (which is placed into _Jacobian_mult[_qp]).
 
void computeStress (const RankTwoTensor &elastic_strain_increment, RankTwoTensor &stress)
 
void computeTangentOperators ()
 
void computeInelasticStrainIncrements (Real effective_trial_stress, const RankTwoTensor &deviatoric_trial_stress)
 
void finalizeConstitutiveModels ()
 
virtual void initQpStatefulProperties () override
 
virtual void computeQpStress () override
 Compute the stress and store it in the _stress material property for the current quadrature point.
 
virtual void computeQpStressIntermediateConfiguration ()
 Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration to the new configuration.
 
virtual void finiteStrainRotation (const bool force_elasticity_rotation=false)
 Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration.
 
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, or when we're cycling through models Given the _strain_increment[_qp], find an admissible stress (which is put into _stress[_qp]) and inelastic strain, as well as the tangent operator (which is placed into _Jacobian_mult[_qp])
 
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 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_number model produce an admissible stress (gets placed back in _stress[_qp]), and decompose the strain increment into an elastic part (gets placed back into elastic_strain_increment) and an inelastic part (inelastic_strain_increment), as well as computing the consistent_tangent_operator.
 
virtual void computeQpProperties () override
 
bool hasGuaranteedMaterialProperty (const MaterialPropertyName &prop, Guarantee guarantee)
 

Protected Attributes

PowerLawCreepStressUpdate_creep_model
 
IsotropicPlasticityStressUpdate_plasticity_model
 
Real _effective_creep_strain_increment
 
Real _effective_plastic_strain_increment
 
std::array< RankTwoTensor, 2 > _inelastic_strain_increment
 
const bool _perform_finite_strain_rotations
 after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rotation_increment
 
MaterialProperty< RankTwoTensor > & _inelastic_strain
 The sum of the inelastic strains that come from the plastic models.
 
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
 old value of inelastic strain
 
enum ComputeMultipleInelasticStressBase::TangentOperatorEnum _tangent_operator_type
 
unsigned _num_models
 number of plastic models
 
std::vector< bool > _tangent_computation_flag
 Flags to compute tangent during updateState call.
 
TangentCalculationMethod _tangent_calculation_method
 Calculation method for the tangent modulus.
 
std::vector< Real > _inelastic_weights
 _inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)
 
std::vector< RankFourTensor_consistent_tangent_operator
 the consistent tangent operators computed by each plastic model
 
const bool _cycle_models
 whether to cycle through the models, using only one model per timestep
 
MaterialProperty< Real > & _material_timestep_limit
 
const RankFourTensor _identity_symmetric_four
 Rank four symmetric identity tensor.
 
std::vector< StressUpdateBase * > _models
 The user supplied list of inelastic models to use in the simulation.
 
bool _is_elasticity_tensor_guaranteed_isotropic
 is the elasticity tensor guaranteed to be isotropic?
 
bool _all_models_isotropic
 are all inelastic models inherently isotropic? (not the case for e.g. weak plane plasticity models)
 
DamageBaseTempl< false > * _damage_model
 Pointer to the damage model.
 
RankTwoTensor _undamaged_stress_old
 
const std::string _elasticity_tensor_name
 Name of the elasticity tensor material property.
 
const MaterialProperty< RankFourTensor > & _elasticity_tensor
 Elasticity tensor material property.
 
MaterialProperty< RankTwoTensor > & _rotation_total
 Rotation up to current step "n" to compute anisotropic elasticity tensor.
 
const MaterialProperty< RankTwoTensor > & _rotation_total_old
 Rotation up to "n - 1" (previous) step to compute anisotropic elasticity tensor.
 
const MaterialProperty< RankTwoTensor > & _rotation_increment
 Rotation increment material property.
 
const MaterialProperty< RankTwoTensor > & _stress_old
 Old state of the stress tensor material property.
 
const std::string _base_name
 Base name prepended to all material property names to allow for multi-material systems.
 
const MaterialProperty< RankTwoTensor > & _mechanical_strain
 Mechanical strain material property.
 
MaterialProperty< RankTwoTensor > & _stress
 Stress material property.
 
MaterialProperty< RankTwoTensor > & _elastic_strain
 Elastic strain material property.
 
const MaterialProperty< RankTwoTensor > & _extra_stress
 Extra stress tensor.
 
std::vector< const Function * > _initial_stress_fcn
 initial stress components
 
MaterialProperty< RankFourTensor > & _Jacobian_mult
 derivative of stress w.r.t. strain (_dstress_dstrain)
 
const unsigned int _max_iterations
 Input parameters associated with the recompute iteration to return the stress state to the yield surface.
 
const Real _relative_tolerance
 
const Real _absolute_tolerance
 
const bool _internal_solve_full_iteration_history
 
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
 Strain tensors.
 
const MaterialProperty< RankTwoTensor > & _strain_increment
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase_dmi_fe_problem
 
const InputParameters_gc_params
 Parameters of the object with this interface.
 
FEProblemBase *const _gc_feproblem
 Reference to the FEProblemBase class.
 
BlockRestrictable *const _gc_block_restrict
 Access block restrictions of the object with this interface.
 

Detailed Description

ComputeCreepPlasticityStress computes the stress, the consistent tangent operator (or an approximation to it), and a decomposition of the strain into elastic and inelastic parts.

By default finite strains are assumed.

The elastic strain is calculated by subtracting the computed inelastic strain increment tensor from the mechanical strain tensor. Mechanical strain is considered as the sum of the elastic and inelastic (plastic, creep, ect) strains.

This material is used specifically to combine creep and plasticity. The solve happens for both materials simultaneously rather than with a staggered approach.

Definition at line 29 of file ComputeCreepPlasticityStress.h.

Member Enumeration Documentation

◆ TangentOperatorEnum

enum class ComputeMultipleInelasticStressBase::TangentOperatorEnum
strongprotectedinherited

what sort of Tangent operator to calculate

Enumerator
elastic 
nonlinear 

Definition at line 139 of file ComputeMultipleInelasticStressBase.h.

Constructor & Destructor Documentation

◆ ComputeCreepPlasticityStress()

ComputeCreepPlasticityStress::ComputeCreepPlasticityStress ( const InputParameters parameters)

Definition at line 34 of file ComputeCreepPlasticityStress.C.

36{
37}
ComputeMultipleInelasticStressBase computes the stress, the consistent tangent operator (or an approx...

Member Function Documentation

◆ computeAdmissibleState()

void ComputeMultipleInelasticStressBase::computeAdmissibleState ( unsigned  model_number,
RankTwoTensor elastic_strain_increment,
RankTwoTensor inelastic_strain_increment,
RankFourTensor consistent_tangent_operator 
)
protectedvirtualinherited

Given a trial stress (_stress[_qp]) and a strain increment (elastic_strain_increment) let the model_number model produce an admissible stress (gets placed back in _stress[_qp]), and decompose the strain increment into an elastic part (gets placed back into elastic_strain_increment) and an inelastic part (inelastic_strain_increment), as well as computing the consistent_tangent_operator.

Parameters
model_numberThe inelastic model to use
elastic_strain_incrementUpon input, this is the strain increment. Upon output, it is the elastic part of the strain increment
inelastic_strain_incrementThe inelastic strain increment corresponding to the supplied strain increment
consistent_tangent_operatorThe consistent tangent operator

Reimplemented in ComputeMultipleInelasticCosseratStress.

Definition at line 356 of file ComputeMultipleInelasticStressBase.C.

361{
362 // Reset properties to the beginning of the time step (necessary if substepping is employed).
363 _models[model_number]->resetIncrementalMaterialProperties();
364
365 const bool jac = _fe_problem.currentlyComputingJacobian();
366 if (_damage_model)
367 _models[model_number]->updateState(elastic_strain_increment,
368 inelastic_strain_increment,
370 _stress[_qp],
374 (jac && _tangent_computation_flag[model_number]),
375 consistent_tangent_operator);
376 else if (_models[model_number]->substeppingCapabilityEnabled() &&
378 _models[model_number]->updateStateSubstep(elastic_strain_increment,
379 inelastic_strain_increment,
381 _stress[_qp],
382 _stress_old[_qp],
385 (jac && _tangent_computation_flag[model_number]),
386 consistent_tangent_operator);
387 else
388 _models[model_number]->updateState(elastic_strain_increment,
389 inelastic_strain_increment,
391 _stress[_qp],
392 _stress_old[_qp],
395 (jac && _tangent_computation_flag[model_number]),
396 consistent_tangent_operator);
397
398 if (jac && !_tangent_computation_flag[model_number])
399 {
401 consistent_tangent_operator.zero();
402 else
403 consistent_tangent_operator = _elasticity_tensor[_qp];
404 }
405}
const MaterialProperty< RankTwoTensor > & _rotation_increment
Rotation increment material property.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
const MaterialProperty< RankTwoTensor > & _stress_old
Old state of the stress tensor material property.
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
TangentCalculationMethod _tangent_calculation_method
Calculation method for the tangent modulus.
const bool _perform_finite_strain_rotations
after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rot...
std::vector< StressUpdateBase * > _models
The user supplied list of inelastic models to use in the simulation.
std::vector< bool > _tangent_computation_flag
Flags to compute tangent during updateState call.
DamageBaseTempl< false > * _damage_model
Pointer to the damage model.
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
Strain tensors.
bool _is_elasticity_tensor_guaranteed_isotropic
is the elasticity tensor guaranteed to be isotropic?

Referenced by ComputeMultipleInelasticCosseratStress::computeAdmissibleState(), updateQpState(), ComputeMultipleInelasticStress::updateQpState(), and ComputeMultipleInelasticStressBase::updateQpStateSingleModel().

◆ computeInelasticStrainIncrements()

void ComputeCreepPlasticityStress::computeInelasticStrainIncrements ( Real  effective_trial_stress,
const RankTwoTensor deviatoric_trial_stress 
)
protected

Definition at line 361 of file ComputeCreepPlasticityStress.C.

363{
364 if (!MooseUtils::absoluteFuzzyEqual(effective_trial_stress, 0.0))
365 {
368 deviatoric_trial_stress *
369 (1.5 * _effective_creep_strain_increment / effective_trial_stress);
370 else
372
375 deviatoric_trial_stress *
376 (1.5 * _effective_plastic_strain_increment / effective_trial_stress);
377 else
379 }
380 else
381 {
384 }
385}
std::array< RankTwoTensor, 2 > _inelastic_strain_increment

Referenced by updateQpState().

◆ computeQpJacobianMult()

void ComputeMultipleInelasticStressBase::computeQpJacobianMult ( )
protectedvirtualinherited

Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[...] computed by the inelastic models, compute _Jacobian_mult[_qp].

Reimplemented in ComputeMultipleInelasticCosseratStress.

Definition at line 283 of file ComputeMultipleInelasticStressBase.C.

284{
288 {
290 for (const auto i_rmm : make_range(_num_models))
292 mooseAssert(A.isSymmetric(), "Tangent operator isn't symmetric");
293 _Jacobian_mult[_qp] = A.invSymm() * _elasticity_tensor[_qp];
294 }
295 else
296 {
297 const RankFourTensor E_inv = _elasticity_tensor[_qp].invSymm();
299 for (const auto i_rmm : make_range(1u, _num_models))
301 }
302}
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
const RankFourTensor _identity_symmetric_four
Rank four symmetric identity tensor.
std::vector< RankFourTensor > _consistent_tangent_operator
the consistent tangent operators computed by each plastic model
RankFourTensorTempl< T > invSymm() const
IntRange< T > make_range(T beg, T end)

Referenced by updateQpState(), and ComputeMultipleInelasticStress::updateQpState().

◆ computeQpProperties()

void ComputeGeneralStressBase::computeQpProperties ( )
overrideprotectedvirtualinherited

Definition at line 44 of file ComputeGeneralStressBase.C.

45{
47
48 // Add in extra stress
49 _stress[_qp] += _extra_stress[_qp];
50}
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.
virtual void computeQpStress()=0
Compute the stress and store it in the _stress material property for the current quadrature point.

◆ computeQpStress()

void ComputeMultipleInelasticStressBase::computeQpStress ( )
overrideprotectedvirtualinherited

Compute the stress and store it in the _stress material property for the current quadrature point.

Reimplemented from ComputeFiniteStrainElasticStress.

Reimplemented in ComputeMultipleInelasticCosseratStress, and ComputeSmearedCrackingStress.

Definition at line 199 of file ComputeMultipleInelasticStressBase.C.

200{
201 if (_damage_model)
202 {
204 _damage_model->setQp(_qp);
206 }
208
209 if (_damage_model)
210 {
211 _damage_model->setQp(_qp);
216
217 const Real damage_timestep_limit = _damage_model->computeTimeStepLimit();
218 if (_material_timestep_limit[_qp] > damage_timestep_limit)
219 _material_timestep_limit[_qp] = damage_timestep_limit;
220 }
221
224}
virtual void finiteStrainRotation(const bool force_elasticity_rotation=false)
Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration.
virtual void computeQpStressIntermediateConfiguration()
Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration ...
virtual Real computeTimeStepLimit()
Compute the limiting value of the time step for this material.
Definition DamageBase.C:54
virtual void updateJacobianMultForDamage(RankFourTensor &jacobian_mult)=0
Update the material constitutive matrix.
void setQp(unsigned int qp)
Sets the value of the member variable _qp for use in inheriting classes.
Definition DamageBase.C:41
virtual void finiteStrainRotation(const GenericRankTwoTensor< is_ad > &rotation_increment)
Perform any necessary rotation of internal variables for finite strain.
Definition DamageBase.C:61
virtual void updateStressForDamage(GenericRankTwoTensor< is_ad > &stress_new)=0
Update the current stress tensor for effects of damage.
virtual void updateDamage()
Update the internal variable(s) that evolve the damage.
Definition DamageBase.C:48
virtual void computeUndamagedOldStress(RankTwoTensor &stress_old)=0
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ computeQpStressIntermediateConfiguration()

void ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration ( )
protectedvirtualinherited

Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration to the new configuration.

Definition at line 227 of file ComputeMultipleInelasticStressBase.C.

228{
229 RankTwoTensor elastic_strain_increment;
230 RankTwoTensor combined_inelastic_strain_increment;
231
232 if (_num_models == 0)
233 {
235
236 // If the elasticity tensor values have changed and the tensor is isotropic,
237 // use the old strain to calculate the old stress
240 else
241 {
242 if (_damage_model)
244 else
246 }
247 if (_fe_problem.currentlyComputingJacobian())
249
250 _material_timestep_limit[_qp] = std::numeric_limits<Real>::max();
251 }
252 else
253 {
254 if (_num_models == 1 || _cycle_models)
256 elastic_strain_increment,
257 combined_inelastic_strain_increment);
258 else
259 updateQpState(elastic_strain_increment, combined_inelastic_strain_increment);
260
261 _elastic_strain[_qp] = _elastic_strain_old[_qp] + elastic_strain_increment;
262 _inelastic_strain[_qp] = _inelastic_strain_old[_qp] + combined_inelastic_strain_increment;
263 }
264}
MaterialProperty< RankTwoTensor > & _elastic_strain
Elastic strain material property.
const MaterialProperty< RankTwoTensor > & _strain_increment
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,...
MaterialProperty< RankTwoTensor > & _inelastic_strain
The sum of the inelastic strains that come from the plastic models.
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

Referenced by ComputeMultipleInelasticStressBase::computeQpStress(), and ComputeSmearedCrackingStress::computeQpStress().

◆ computeStress()

void ComputeCreepPlasticityStress::computeStress ( const RankTwoTensor elastic_strain_increment,
RankTwoTensor stress 
)
protected

Definition at line 322 of file ComputeCreepPlasticityStress.C.

324{
325 // form the stress, with the check for changed elasticity constants
327 stress = _elasticity_tensor[_qp] * (_elastic_strain_old[_qp] + elastic_strain_increment);
328 else
329 {
330 if (_damage_model)
331 stress = _undamaged_stress_old + _elasticity_tensor[_qp] * elastic_strain_increment;
332 else
333 stress = _stress_old[_qp] + _elasticity_tensor[_qp] * elastic_strain_increment;
334 }
335}

Referenced by computeTangentOperators(), and updateQpState().

◆ computeTangentOperators()

void ComputeCreepPlasticityStress::computeTangentOperators ( )
protected

Definition at line 338 of file ComputeCreepPlasticityStress.C.

339{
340 auto elastic_strain_inc = _strain_increment[_qp] - _inelastic_strain_increment[1];
341
342 RankTwoTensor stress;
343 computeStress(elastic_strain_inc, stress);
344 RankTwoTensor deviatoric_stress = stress.deviatoric();
345 Real effective_stress = std::sqrt(1.5 * deviatoric_stress.doubleContraction(deviatoric_stress));
346
348 effective_stress, _stress[_qp], _consistent_tangent_operator[0]);
349
350 elastic_strain_inc = _strain_increment[_qp] - _inelastic_strain_increment[0];
351
352 computeStress(elastic_strain_inc, stress);
353 deviatoric_stress = stress.deviatoric();
354 effective_stress = std::sqrt(1.5 * deviatoric_stress.doubleContraction(deviatoric_stress));
355
357 effective_stress, _stress[_qp], _consistent_tangent_operator[1]);
358}
IsotropicPlasticityStressUpdate * _plasticity_model
PowerLawCreepStressUpdate * _creep_model
void computeStress(const RankTwoTensor &elastic_strain_increment, RankTwoTensor &stress)
void computeTangentOperator(Real effective_trial_stress, const RankTwoTensor &stress_new, RankFourTensor &tangent_operator)
Calculate the tangent_operator.
T doubleContraction(const RankTwoTensorTempl< T > &a) const
RankTwoTensorTempl< T > deviatoric() const

Referenced by updateQpState().

◆ finalizeConstitutiveModels()

void ComputeCreepPlasticityStress::finalizeConstitutiveModels ( )
protected

Definition at line 388 of file ComputeCreepPlasticityStress.C.

389{
397}
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
virtual void resetIncrementalMaterialProperties() override
Reset material properties.
void updateEffectiveInelasticStrainIncrement(const GenericReal< is_ad > &eisi)
void updateEffectiveInelasticStrain(const GenericReal< is_ad > &increment)

Referenced by updateQpState().

◆ finiteStrainRotation()

void ComputeMultipleInelasticStressBase::finiteStrainRotation ( const bool  force_elasticity_rotation = false)
protectedvirtualinherited

Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration.

Parameters
force_elasticity_rotationForce the elasticity tensor to be rotated, even if it is not deemed necessary.

Definition at line 267 of file ComputeMultipleInelasticStressBase.C.

268{
269 _elastic_strain[_qp] =
270 _rotation_increment[_qp] * _elastic_strain[_qp] * _rotation_increment[_qp].transpose();
271 _stress[_qp] = _rotation_increment[_qp] * _stress[_qp] * _rotation_increment[_qp].transpose();
272 _inelastic_strain[_qp] =
273 _rotation_increment[_qp] * _inelastic_strain[_qp] * _rotation_increment[_qp].transpose();
274
275 if (force_elasticity_rotation ||
279 _Jacobian_mult[_qp].rotate(_rotation_increment[_qp]);
280}
bool _all_models_isotropic
are all inelastic models inherently isotropic? (not the case for e.g. weak plane plasticity models)

Referenced by ComputeMultipleInelasticStressBase::computeQpStress(), and ComputeSmearedCrackingStress::computeQpStress().

◆ getInelasticModelNames()

std::vector< MaterialName > ComputeCreepPlasticityStress::getInelasticModelNames ( )
overrideprotectedvirtual

Implements ComputeMultipleInelasticStressBase.

Definition at line 40 of file ComputeCreepPlasticityStress.C.

41{
42 std::vector<MaterialName> names = {getParam<MaterialName>("creep_model"),
43 getParam<MaterialName>("plasticity_model")};
44 return names;
45}

◆ hasGuaranteedMaterialProperty()

bool GuaranteeConsumer::hasGuaranteedMaterialProperty ( const MaterialPropertyName &  prop,
Guarantee  guarantee 
)
protectedinherited

Definition at line 28 of file GuaranteeConsumer.C.

30{
32 mooseError("hasGuaranteedMaterialProperty() needs to be called in initialSetup()");
33
34 // Reference to MaterialWarehouse for testing and retrieving block ids
35 const auto & warehouse = _gc_feproblem->getMaterialWarehouse();
36
37 // Complete set of ids that this object is active
41
42 // Loop over each id for this object
43 for (const auto & id : ids)
44 {
45 // If block materials exist, look if any issue the required guarantee
46 if (warehouse.hasActiveBlockObjects(id))
47 {
48 const std::vector<std::shared_ptr<MaterialBase>> & mats = warehouse.getActiveBlockObjects(id);
49 for (const auto & mat : mats)
50 {
51 const auto & mat_props = mat->getSuppliedItems();
52 if (mat_props.count(prop_name))
53 {
54 auto guarantee_mat = dynamic_cast<GuaranteeProvider *>(mat.get());
55 if (guarantee_mat && !guarantee_mat->hasGuarantee(prop_name, guarantee))
56 {
57 // we found at least one material on the set of block we operate on
58 // that does _not_ provide the requested guarantee
59 return false;
60 }
61 }
62 }
63 }
64 }
65
66 return true;
67}
void mooseError(Args &&... args)
virtual const std::set< SubdomainID > & blockIDs() const
virtual bool blockRestricted() const
const MaterialWarehouse & getMaterialWarehouse() const
virtual MooseMesh & mesh() override
virtual bool startedInitialSetup()
BlockRestrictable *const _gc_block_restrict
Access block restrictions of the object with this interface.
FEProblemBase *const _gc_feproblem
Reference to the FEProblemBase class.
Add-on class that provides the functionality to issue guarantees for declared material properties.
const std::set< SubdomainID > & meshSubdomains() const

Referenced by ComputeFiniteStrainElasticStress::computeQpStress(), LagrangianStressDivergenceBase::initialSetup(), ADComputeMultipleInelasticStress::initialSetup(), ADComputeSmearedCrackingStress::initialSetup(), ComputeLinearElasticPFFractureStress::initialSetup(), ComputeMultipleInelasticStressBase::initialSetup(), ComputeSmearedCrackingStress::initialSetup(), ComputeLagrangianStressBase::initialSetup(), ComputeStVenantKirchhoffStress::initialSetup(), and CriticalTimeStep::initialSetup().

◆ initialSetup()

void ComputeCreepPlasticityStress::initialSetup ( )
overridevirtual

Reimplemented from ComputeMultipleInelasticStressBase.

Definition at line 48 of file ComputeCreepPlasticityStress.C.

49{
51
52 if (_models.size() != 2)
53 mooseError("Error in ComputeCreepPlasticityStress: two models are required.");
54
56 if (!_creep_model)
57 mooseError("Model " + getParam<MaterialName>("creep_model") +
58 " is not a compatible creep model in ComputeCreepPlasticityStress.");
59
62 mooseError("Model " + getParam<MaterialName>("plasticity_model") +
63 " is not a compatible plasticity model in ComputeCreepPlasticityStress.");
64}
This class uses the Discrete material in a radial return isotropic plasticity model.
This class uses the stress update material in a radial return isotropic creep model.

◆ initQpStatefulProperties()

void ComputeMultipleInelasticStressBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

◆ updateQpState()

void ComputeCreepPlasticityStress::updateQpState ( RankTwoTensor elastic_strain_increment,
RankTwoTensor combined_inelastic_strain_increment 
)
overrideprotectedvirtual

Given the _strain_increment[_qp], iterate over all of the user-specified recompute materials in order to find an admissible stress (which is placed into _stress[_qp]) and set of inelastic strains, as well as the tangent operator (which is placed into _Jacobian_mult[_qp]).

Parameters
elastic_strain_incrementThe elastic part of _strain_increment[_qp] after the iterative process has converged
combined_inelastic_strain_incrementThe inelastic part of _strain_increment[_qp] after the iterative process has converged.

Implements ComputeMultipleInelasticStressBase.

Definition at line 67 of file ComputeCreepPlasticityStress.C.

69{
71 {
72 _console << std::endl
73 << "iteration output for ComputeCreepPlasticityStress solve:"
74 << " time=" << _t << " int_pt=" << _qp << std::endl;
75 }
76
77 for (const auto i_rmm : index_range(_models))
79
80 elastic_strain_increment = _strain_increment[_qp];
81 computeStress(elastic_strain_increment, _stress[_qp]);
82
83 const RankTwoTensor trial_stress = _stress[_qp];
84 const RankTwoTensor deviatoric_trial_stress = trial_stress.deviatoric();
85 const Real effective_trial_stress =
86 std::sqrt(1.5 * deviatoric_trial_stress.doubleContraction(deviatoric_trial_stress));
87
88 //
89 // First, compute creep response assuming no plasticity
90 //
91 _creep_model->setQp(_qp);
93 0, elastic_strain_increment, _inelastic_strain_increment[0], _consistent_tangent_operator[0]);
95
96 //
97 // Now check the plasticity model.
98 // If no yielding, we are done.
99 //
102 1, elastic_strain_increment, _inelastic_strain_increment[1], _consistent_tangent_operator[1]);
104 const Real yield_condition = _plasticity_model->yieldCondition();
105
106 if (yield_condition > 0.0) // yielding even with maximum creep strain
107 {
108 const Real max_effective_creep_strain_increment = _effective_creep_strain_increment;
109
110 //
111 // Compute plastic response given no creep
112 //
113 elastic_strain_increment = _strain_increment[_qp];
114 _stress[_qp] = trial_stress;
116 elastic_strain_increment,
119 const Real max_effective_plastic_strain_increment =
121
122 //
123 // Reset plasticity model
124 //
125 _plasticity_model->computeStressInitialize(effective_trial_stress, _elasticity_tensor[_qp]);
126
127 //
128 // The residual for the creep law is (creep rate)*dt - (creep strain increment)
129 // We want the creep rate calculation to depend on both creep and plasticity.
130 // Since we send in the total scalar inelastic strain (creep and plasticity), we need to correct
131 // the second term by adding the plastic strain.
132 //
133 Real creep_residual = _creep_model->computeResidual(effective_trial_stress,
136 creep_residual += _effective_plastic_strain_increment;
137
138 //
139 // We want the plasticity resdiual to be (effective_trial_stress - r - yield_stress)/3G - (total
140 // inelastic increment)
141 // The standard residual for plasticity is (effective_trial_stress - r - yield_stress)/3G -
142 // (plasticity strain increment)
143 // Since we send in the plastic inelastic strain (for calculation of r), we must subtract the
144 // creep strain to correct the final term in our desired residual
145 //
146 Real plasticity_residual = _plasticity_model->computeResidual(
147 effective_trial_stress, _effective_plastic_strain_increment);
148 plasticity_residual -= _effective_creep_strain_increment;
149
150 unsigned int counter = 0;
151 Real residual = 0;
152 const Real threeG =
154 const Real reference_residual = effective_trial_stress / threeG;
155
156 do
157 {
158 //
159 // Solve Ax=b where x is the vector of creep and plastic inelastic strains
160 //
161 // x1 => creep
162 // x2 => plasticity
163 //
164 //
165 // A11 (creep,creep)
166 //
167 Real A11 = _creep_model->computeDerivative(effective_trial_stress,
170 //
171 // A12 (creep,plasticity)
172 //
173 Real A12 = A11 + 1.0;
174 //
175 // A21 (plasticity,creep)
176 //
177 Real A21 = -1.0;
178 //
179 // A22 (plasticity,plasticity)
180 //
181 Real A22 = _plasticity_model->computeDerivative(effective_trial_stress,
183
184 Real rhs1 = creep_residual;
185 Real rhs2 = plasticity_residual;
186
187 //
188 // Solve
189 //
190 // A11*a + A21 = 0
191 // A11*a = -A21
192 // a = -A21/A11
193 const Real a = -A21 / A11;
194 A21 = 0;
195 A22 += a * A12;
196 rhs2 += a * rhs1;
197
198 Real x2 = rhs2 / A22;
199 Real x1 = (rhs1 - A12 * x2) / A11;
200
201 while (_effective_creep_strain_increment - x1 < 0)
202 x1 *= 0.5;
204 x2 *= 0.5;
205
206 while (_effective_creep_strain_increment - x1 > max_effective_creep_strain_increment)
207 x1 *= 0.5;
208 while (_effective_plastic_strain_increment - x2 > max_effective_plastic_strain_increment)
209 x2 *= 0.5;
210
211 // This check is to avoid a fpe in the creep law.
212 // Maybe it is better to check for this condition in the creep law
213 if (effective_trial_stress < threeG * (_effective_creep_strain_increment - x1 +
215 {
216 const Real sum =
218 const Real factor = 0.9 * effective_trial_stress / (threeG * sum);
219 const Real cNew = (_effective_creep_strain_increment - x1) * factor;
220 const Real pNew = (_effective_plastic_strain_increment - x2) * factor;
223 }
224
227
228 //
229 // The residual for the creep law is (creep rate)*dt - (creep strain increment)
230 //
231 creep_residual = _creep_model->computeResidual(effective_trial_stress,
234 creep_residual += _effective_plastic_strain_increment;
235 //
236 // The residual for plasticity is (effective_trial_stress - r - yield_stress)/3G - scalar
237 //
238 plasticity_residual = _plasticity_model->computeResidual(effective_trial_stress,
240 plasticity_residual -= _effective_creep_strain_increment;
241
242 residual =
243 std::sqrt(creep_residual * creep_residual + plasticity_residual * plasticity_residual);
244
246 {
247 _console << "stress iteration number = " << counter << "\n relative residual = "
248 << (0 == reference_residual ? 0 : residual / reference_residual)
249 << "\n stress convergence relative tolerance = " << _relative_tolerance
250 << "\n absolute residual = " << residual
251 << "\n creep residual = " << creep_residual
252 << "\n plasticity residual = " << plasticity_residual
253 << "\n creep iteration increment = " << x1
254 << "\n plasticity iteration increment = " << x2
255 << "\n creep scalar strain = " << _effective_creep_strain_increment
256 << "\n plasticity scalar strain = " << _effective_plastic_strain_increment
257 << "\n max creep scalar strain = " << max_effective_creep_strain_increment
258 << "\n max plasticity scalar strain = " << max_effective_plastic_strain_increment
259 << "\n stress convergence absolute tolerance = " << _absolute_tolerance
260 << std::endl;
261 }
262 ++counter;
263 } while (counter < _max_iterations && residual > _absolute_tolerance &&
264 (residual / reference_residual) > _relative_tolerance);
265
266 if (counter == _max_iterations && residual > _absolute_tolerance &&
267 (residual / reference_residual) > _relative_tolerance)
268 {
269 std::stringstream msg;
270 msg << "\n relative residual = "
271 << (0 == reference_residual ? 0 : residual / reference_residual)
272 << "\n stress convergence relative tolerance = " << _relative_tolerance
273 << "\n absolute residual = " << residual << "\n creep residual = " << creep_residual
274 << "\n plasticity residual = " << plasticity_residual
275 << "\n creep scalar strain = " << _effective_creep_strain_increment
276 << "\n plasticity scalar strain = " << _effective_plastic_strain_increment
277 << "\n max creep scalar strain = " << max_effective_creep_strain_increment
278 << "\n max plasticity scalar strain = " << max_effective_plastic_strain_increment
279 << "\n stress convergence absolute tolerance = " << _absolute_tolerance << std::endl;
280
281 throw MooseException("Max stress iteration hit during ComputeCreepPlasticityStress solve! " +
282 _name + msg.str());
283 }
284 }
285 computeInelasticStrainIncrements(effective_trial_stress, deviatoric_trial_stress);
286
288
289 combined_inelastic_strain_increment.zero();
290 for (const auto i_rmm : make_range(_num_models))
291 combined_inelastic_strain_increment += _inelastic_strain_increment[i_rmm];
292
293 if (yield_condition > 0.0)
294 {
295 elastic_strain_increment = _strain_increment[_qp] - combined_inelastic_strain_increment;
296 _stress[_qp] = _elasticity_tensor[_qp] * (elastic_strain_increment + _elastic_strain_old[_qp]);
297
299 }
300 else
301 {
302 // The tangent for creep was called in the initial creep solve.
303
304 // Set the tangent for plasticity to zero
306 }
307
308 if (_fe_problem.currentlyComputingJacobian())
310
311 _material_timestep_limit[_qp] = 0.0;
312 for (const auto i_rmm : make_range(_num_models))
313 _material_timestep_limit[_qp] += 1.0 / _models[i_rmm]->computeTimeStepLimit();
314
315 if (MooseUtils::absoluteFuzzyEqual(_material_timestep_limit[_qp], 0.0))
316 _material_timestep_limit[_qp] = std::numeric_limits<Real>::max();
317 else
319}
void computeInelasticStrainIncrements(Real effective_trial_stress, const RankTwoTensor &deviatoric_trial_stress)
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...
const unsigned int _max_iterations
Input parameters associated with the recompute iteration to return the stress state to the yield surf...
virtual void computeQpJacobianMult()
Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[....
virtual void computeStressInitialize(const GenericReal< is_ad > &effective_trial_stress, const GenericRankFourTensor< is_ad > &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
virtual GenericReal< is_ad > computeResidual(const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar) override
Compute the residual for a predicted value of the scalar.
virtual GenericReal< is_ad > computeDerivative(const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar) override
Compute the derivative of the residual as a function of the scalar variable.
virtual GenericReal< is_ad > computeDerivative(const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar) override
Compute the derivative of the residual as a function of the scalar variable.
virtual GenericReal< is_ad > computeResidual(const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar) override
Compute the residual for a predicted value of the scalar.
const GenericReal< is_ad > & effectiveInelasticStrainIncrement() const
Current value of scalar inelastic strain.
void setQp(unsigned int qp)
Sets the value of the global variable _qp for inheriting classes.
T getIsotropicShearModulus(const RankFourTensorTempl< T > &elasticity_tensor)
Get the shear modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be ...
auto index_range(const T &sizable)
const Number zero

◆ updateQpStateSingleModel()

void ComputeMultipleInelasticStressBase::updateQpStateSingleModel ( unsigned  model_number,
RankTwoTensor elastic_strain_increment,
RankTwoTensor combined_inelastic_strain_increment 
)
protectedvirtualinherited

An optimised version of updateQpState that gets used when the number of plastic models is unity, or when we're cycling through models Given the _strain_increment[_qp], find an admissible stress (which is put into _stress[_qp]) and inelastic strain, as well as the tangent operator (which is placed into _Jacobian_mult[_qp])

Parameters
model_numberUse this model number
elastic_strain_incrementThe elastic part of _strain_increment[_qp]
combined_inelastic_strain_incrementThe inelastic part of _strain_increment[_qp]

Definition at line 305 of file ComputeMultipleInelasticStressBase.C.

309{
310 for (auto model : _models)
311 model->setQp(_qp);
312
313 elastic_strain_increment = _strain_increment[_qp];
314
315 // If the elasticity tensor values have changed and the tensor is isotropic,
316 // use the old strain to calculate the old stress
318 _stress[_qp] = _elasticity_tensor[_qp] * (_elastic_strain_old[_qp] + elastic_strain_increment);
319 else
320 {
321 if (_damage_model)
322 _stress[_qp] = _undamaged_stress_old + _elasticity_tensor[_qp] * elastic_strain_increment;
323 else
324 _stress[_qp] = _stress_old[_qp] + _elasticity_tensor[_qp] * elastic_strain_increment;
325 }
326
327 computeAdmissibleState(model_number,
328 elastic_strain_increment,
329 combined_inelastic_strain_increment,
331
332 if (_fe_problem.currentlyComputingJacobian())
333 {
337 {
339 mooseAssert(A.isSymmetric(), "Tangent operator isn't symmetric");
340 _Jacobian_mult[_qp] = A.invSymm() * _elasticity_tensor[_qp];
341 }
342 else
344 }
345
346 _material_timestep_limit[_qp] = _models[0]->computeTimeStepLimit();
347
348 /* propagate internal variables, etc, to this timestep for those inelastic models where
349 * "updateState" is not called */
350 for (const auto i_rmm : make_range(_num_models))
351 if (i_rmm != model_number)
352 _models[i_rmm]->propagateQpStatefulProperties();
353}
const PertinentGeochemicalSystem model(database, {"H2O", "H+", "HCO3-", "O2(aq)", "Ca++", ">(s)FeOH", "radius_neg1", "radius_neg1.5"}, {"Calcite"}, {}, {"Calcite_asdf"}, {"CH4(aq)"}, {">(s)FeOCa+"}, "O2(aq)", "e-")
if(subdm)

Referenced by ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration().

◆ validParams()

InputParameters ComputeCreepPlasticityStress::validParams ( )
static

Definition at line 20 of file ComputeCreepPlasticityStress.C.

21{
23 params.addClassDescription("Compute state (stress and internal parameters such as inelastic "
24 "strains and internal parameters) using an Newton process for one "
25 "creep and one plasticity model");
26 params.addRequiredParam<MaterialName>("creep_model",
27 "Creep model that derives from PowerLawCreepStressUpdate.");
28 params.addRequiredParam<MaterialName>(
29 "plasticity_model", "Plasticity model that derives from IsotropicPlasticityStressUpdate.");
30
31 return params;
32}
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _absolute_tolerance

const Real ComputeMultipleInelasticStressBase::_absolute_tolerance
protectedinherited

◆ _all_models_isotropic

bool ComputeMultipleInelasticStressBase::_all_models_isotropic
protectedinherited

are all inelastic models inherently isotropic? (not the case for e.g. weak plane plasticity models)

Definition at line 179 of file ComputeMultipleInelasticStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::finiteStrainRotation(), and ComputeMultipleInelasticStressBase::initialSetup().

◆ _base_name

const std::string ComputeGeneralStressBase::_base_name
protectedinherited

Base name prepended to all material property names to allow for multi-material systems.

Definition at line 43 of file ComputeGeneralStressBase.h.

Referenced by ComputeCosseratLinearElasticStress::initialSetup(), and ComputeLinearElasticStress::initialSetup().

◆ _consistent_tangent_operator

std::vector<RankFourTensor> ComputeMultipleInelasticStressBase::_consistent_tangent_operator
protectedinherited

◆ _creep_model

PowerLawCreepStressUpdate* ComputeCreepPlasticityStress::_creep_model
protected

◆ _cycle_models

const bool ComputeMultipleInelasticStressBase::_cycle_models
protectedinherited

whether to cycle through the models, using only one model per timestep

Definition at line 157 of file ComputeMultipleInelasticStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration().

◆ _damage_model

DamageBaseTempl<false>* ComputeMultipleInelasticStressBase::_damage_model
protectedinherited

◆ _effective_creep_strain_increment

Real ComputeCreepPlasticityStress::_effective_creep_strain_increment
protected

◆ _effective_plastic_strain_increment

Real ComputeCreepPlasticityStress::_effective_plastic_strain_increment
protected

◆ _elastic_strain

MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_elastic_strain
protectedinherited

◆ _elastic_strain_old

const MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStressBase::_elastic_strain_old
protectedinherited

◆ _elasticity_tensor

const MaterialProperty<RankFourTensor>& ComputeFiniteStrainElasticStress::_elasticity_tensor
protectedinherited

◆ _elasticity_tensor_name

const std::string ComputeFiniteStrainElasticStress::_elasticity_tensor_name
protectedinherited

◆ _extra_stress

const MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_extra_stress
protectedinherited

Extra stress tensor.

Definition at line 53 of file ComputeGeneralStressBase.h.

Referenced by ComputeGeneralStressBase::computeQpProperties().

◆ _gc_block_restrict

BlockRestrictable* const GuaranteeConsumer::_gc_block_restrict
privateinherited

Access block restrictions of the object with this interface.

Definition at line 41 of file GuaranteeConsumer.h.

Referenced by GuaranteeConsumer::hasGuaranteedMaterialProperty().

◆ _gc_feproblem

FEProblemBase* const GuaranteeConsumer::_gc_feproblem
privateinherited

Reference to the FEProblemBase class.

Definition at line 38 of file GuaranteeConsumer.h.

Referenced by GuaranteeConsumer::hasGuaranteedMaterialProperty().

◆ _gc_params

const InputParameters& GuaranteeConsumer::_gc_params
privateinherited

Parameters of the object with this interface.

Definition at line 35 of file GuaranteeConsumer.h.

◆ _identity_symmetric_four

const RankFourTensor ComputeMultipleInelasticStressBase::_identity_symmetric_four
protectedinherited

◆ _inelastic_strain

MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStressBase::_inelastic_strain
protectedinherited

◆ _inelastic_strain_increment

std::array<RankTwoTensor, 2> ComputeCreepPlasticityStress::_inelastic_strain_increment
protected

◆ _inelastic_strain_old

const MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStressBase::_inelastic_strain_old
protectedinherited

◆ _inelastic_weights

std::vector<Real> ComputeMultipleInelasticStressBase::_inelastic_weights
protectedinherited

_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)

Definition at line 151 of file ComputeMultipleInelasticStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::initialSetup(), and ComputeMultipleInelasticStress::updateQpState().

◆ _initial_stress_fcn

std::vector<const Function *> ComputeGeneralStressBase::_initial_stress_fcn
protectedinherited

initial stress components

Definition at line 56 of file ComputeGeneralStressBase.h.

◆ _internal_solve_full_iteration_history

const bool ComputeMultipleInelasticStressBase::_internal_solve_full_iteration_history
protectedinherited

◆ _is_elasticity_tensor_guaranteed_isotropic

bool ComputeMultipleInelasticStressBase::_is_elasticity_tensor_guaranteed_isotropic
protectedinherited

◆ _Jacobian_mult

MaterialProperty<RankFourTensor>& ComputeGeneralStressBase::_Jacobian_mult
protectedinherited

derivative of stress w.r.t. strain (_dstress_dstrain)

Definition at line 59 of file ComputeGeneralStressBase.h.

Referenced by ComputeStrainIncrementBasedStress::computeQpJacobian(), FiniteStrainHyperElasticViscoPlastic::computeQpJacobian(), ComputeMultipleInelasticStressBase::computeQpJacobianMult(), ComputeMultipleInelasticCosseratStress::computeQpJacobianMult(), ComputeMultiPlasticityStress::computeQpStress(), FiniteStrainPlasticMaterial::computeQpStress(), ComputeCosseratLinearElasticStress::computeQpStress(), ComputeFiniteStrainElasticStress::computeQpStress(), ComputeLinearElasticPFFractureStress::computeQpStress(), ComputeLinearElasticStress::computeQpStress(), ComputeLinearViscoelasticStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStress(), ComputeSmearedCrackingStress::computeQpStress(), ComputeMultipleCrystalPlasticityStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration(), ComputeLinearElasticPFFractureStress::computeStrainSpectral(), ComputeLinearElasticPFFractureStress::computeStrainVolDev(), ComputeLinearElasticPFFractureStress::computeStressSpectral(), FiniteStrainUObasedCP::elasticTangentModuli(), FiniteStrainUObasedCP::elastoPlasticTangentModuli(), ComputeMultipleInelasticStressBase::finiteStrainRotation(), ComputeMultiPlasticityStress::postReturnMap(), FiniteStrainCrystalPlasticity::postSolveQp(), FiniteStrainCrystalPlasticity::preSolveQp(), and ComputeMultipleInelasticStressBase::updateQpStateSingleModel().

◆ _material_timestep_limit

MaterialProperty<Real>& ComputeMultipleInelasticStressBase::_material_timestep_limit
protectedinherited

◆ _max_iterations

const unsigned int ComputeMultipleInelasticStressBase::_max_iterations
protectedinherited

Input parameters associated with the recompute iteration to return the stress state to the yield surface.

Definition at line 118 of file ComputeMultipleInelasticStressBase.h.

Referenced by updateQpState(), and ComputeMultipleInelasticStress::updateQpState().

◆ _mechanical_strain

const MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_mechanical_strain
protectedinherited

◆ _models

std::vector<StressUpdateBase *> ComputeMultipleInelasticStressBase::_models
protectedinherited

The user supplied list of inelastic models to use in the simulation.

Users should take care to list creep models first and plasticity models last to allow for the case when a creep model relaxes the stress state inside of the yield surface in an iteration.

Definition at line 173 of file ComputeMultipleInelasticStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::computeAdmissibleState(), ComputeSmearedCrackingStress::computeQpStress(), initialSetup(), ComputeMultipleInelasticStressBase::initialSetup(), updateQpState(), ComputeMultipleInelasticStress::updateQpState(), and ComputeMultipleInelasticStressBase::updateQpStateSingleModel().

◆ _num_models

unsigned ComputeMultipleInelasticStressBase::_num_models
protectedinherited

◆ _perform_finite_strain_rotations

const bool ComputeMultipleInelasticStressBase::_perform_finite_strain_rotations
protectedinherited

◆ _plasticity_model

IsotropicPlasticityStressUpdate* ComputeCreepPlasticityStress::_plasticity_model
protected

◆ _relative_tolerance

const Real ComputeMultipleInelasticStressBase::_relative_tolerance
protectedinherited

◆ _rotation_increment

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStress::_rotation_increment
protectedinherited

◆ _rotation_total

MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStress::_rotation_total
protectedinherited

Rotation up to current step "n" to compute anisotropic elasticity tensor.

Definition at line 37 of file ComputeFiniteStrainElasticStress.h.

Referenced by ComputeFiniteStrainElasticStress::computeQpStress(), and ComputeFiniteStrainElasticStress::initQpStatefulProperties().

◆ _rotation_total_old

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStress::_rotation_total_old
protectedinherited

Rotation up to "n - 1" (previous) step to compute anisotropic elasticity tensor.

Definition at line 39 of file ComputeFiniteStrainElasticStress.h.

Referenced by ComputeFiniteStrainElasticStress::computeQpStress().

◆ _strain_increment

const MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStressBase::_strain_increment
protectedinherited

◆ _stress

MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_stress
protectedinherited

Stress material property.

Definition at line 48 of file ComputeGeneralStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::computeAdmissibleState(), ComputeMultipleInelasticCosseratStress::computeAdmissibleState(), ComputeGeneralStressBase::computeQpProperties(), ComputeMultiPlasticityStress::computeQpStress(), ComputeStrainIncrementBasedStress::computeQpStress(), FiniteStrainPlasticMaterial::computeQpStress(), AbaqusUMATStress::computeQpStress(), ComputeCosseratLinearElasticStress::computeQpStress(), ComputeFiniteStrainElasticStress::computeQpStress(), ComputeLinearElasticPFFractureStress::computeQpStress(), ComputeLinearElasticStress::computeQpStress(), ComputeLinearViscoelasticStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStress(), ComputeSmearedCrackingStress::computeQpStress(), ComputeMultipleCrystalPlasticityStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration(), ComputeLinearElasticPFFractureStress::computeStrainSpectral(), ComputeLinearElasticPFFractureStress::computeStrainVolDev(), ComputeLinearElasticPFFractureStress::computeStressSpectral(), computeTangentOperators(), ComputeMultipleInelasticStressBase::finiteStrainRotation(), FiniteStrainCrystalPlasticity::initQpStatefulProperties(), FiniteStrainUObasedCP::initQpStatefulProperties(), FiniteStrainHyperElasticViscoPlastic::initQpStatefulProperties(), ComputeGeneralStressBase::initQpStatefulProperties(), ComputeMultiPlasticityStress::postReturnMap(), FiniteStrainCrystalPlasticity::postSolveQp(), FiniteStrainUObasedCP::postSolveQp(), FiniteStrainHyperElasticViscoPlastic::postSolveQp(), ComputeSmearedCrackingStress::updateCrackingStateAndStress(), updateQpState(), ComputeMultipleInelasticStress::updateQpState(), and ComputeMultipleInelasticStressBase::updateQpStateSingleModel().

◆ _stress_old

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStress::_stress_old
protectedinherited

◆ _tangent_calculation_method

TangentCalculationMethod ComputeMultipleInelasticStressBase::_tangent_calculation_method
protectedinherited

◆ _tangent_computation_flag

std::vector<bool> ComputeMultipleInelasticStressBase::_tangent_computation_flag
protectedinherited

Flags to compute tangent during updateState call.

Definition at line 145 of file ComputeMultipleInelasticStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::computeAdmissibleState(), and ComputeMultipleInelasticStressBase::initialSetup().

◆ _tangent_operator_type

enum ComputeMultipleInelasticStressBase::TangentOperatorEnum ComputeMultipleInelasticStressBase::_tangent_operator_type
protectedinherited

◆ _undamaged_stress_old

RankTwoTensor ComputeMultipleInelasticStressBase::_undamaged_stress_old
protectedinherited

The documentation for this class was generated from the following files: