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
ComputeSmearedCrackingStress Class Reference

ComputeSmearedCrackingStress computes the stress for a finite strain material with smeared cracking. More...

#include <ComputeSmearedCrackingStress.h>

Inheritance diagram for ComputeSmearedCrackingStress:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 ComputeSmearedCrackingStress (const InputParameters &parameters)
 
virtual void initialSetup () override
 
virtual void initQpStatefulProperties () override
 
virtual void computeQpStress () override
 Compute the stress and store it in the _stress material property for the current quadrature point.
 
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  CrackedElasticityType { DIAGONAL , FULL }
 Enum defining the method used to adjust the elasticity tensor for cracking. More...
 
enum class  TangentOperatorEnum { elastic , nonlinear }
 what sort of Tangent operator to calculate More...
 

Protected Member Functions

void updateLocalElasticityTensor ()
 Update the local elasticity tensor (_local_elasticity_tensor) due to the effects of cracking.
 
virtual void updateCrackingStateAndStress ()
 Update all cracking-related state variables and the stress tensor due to cracking in all directions.
 
virtual unsigned int getNumKnownCrackDirs () const
 Get the number of known crack directions.
 
void computeCrackStrainAndOrientation (RealVectorValue &strain_in_crack_dir)
 Compute the crack strain in the crack coordinate system.
 
void updateStressTensorForCracking (RankTwoTensor &tensor, const RealVectorValue &sigma)
 Updates the full stress tensor to account for the effect of cracking using the provided stresses in the crack directions.
 
bool previouslyCracked ()
 Check to see whether there was cracking in any diretion in the previous time step.
 
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]).
 
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

enum ComputeSmearedCrackingStress::CrackedElasticityType _cracked_elasticity_type
 
MaterialProperty< RealVectorValue > & _crack_damage
 
const MaterialProperty< RealVectorValue > & _crack_damage_old
 
MaterialProperty< RealVectorValue > & _crack_flags
 Vector of values going from 1 to 0 as crack damage accumulates.
 
MaterialProperty< RankTwoTensor > & _crack_rotation
 
const MaterialProperty< RankTwoTensor > & _crack_rotation_old
 
MaterialProperty< RealVectorValue > & _crack_initiation_strain
 
const MaterialProperty< RealVectorValue > & _crack_initiation_strain_old
 
MaterialProperty< RealVectorValue > & _crack_max_strain
 
const MaterialProperty< RealVectorValue > & _crack_max_strain_old
 
RankFourTensor _local_elasticity_tensor
 
std::vector< SmearedCrackSofteningBase * > _softening_models
 The user-supplied list of softening models to be used in the 3 crack directions.
 
std::vector< Real > _local_elastic_vector
 Vector helper to update local elasticity tensor.
 
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 VariableValue_cracking_stress
 Input parameters for smeared crack models.
 
std::vector< unsigned int_prescribed_crack_directions
 User-prescribed cracking directions.
 
const unsigned int _max_cracks
 Maximum number of cracks permitted at a material point.
 
const Real _cracking_neg_fraction
 Defines transition to changed stiffness during unloading.
 
const Real _shear_retention_factor
 Controls the amount of shear retained.
 
const Real _max_stress_correction
 Controls the maximum amount that the damaged elastic stress is corrected to folow the release model during a time step.
 
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

ComputeSmearedCrackingStress computes the stress for a finite strain material with smeared cracking.

Definition at line 21 of file ComputeSmearedCrackingStress.h.

Member Enumeration Documentation

◆ CrackedElasticityType

Enum defining the method used to adjust the elasticity tensor for cracking.

Enumerator
DIAGONAL 
FULL 

Definition at line 99 of file ComputeSmearedCrackingStress.h.

◆ 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

◆ ComputeSmearedCrackingStress()

ComputeSmearedCrackingStress::ComputeSmearedCrackingStress ( const InputParameters parameters)

Definition at line 69 of file ComputeSmearedCrackingStress.C.

71 _cracking_stress(coupledValue("cracking_stress")),
72 _max_cracks(getParam<unsigned int>("max_cracks")),
73 _cracking_neg_fraction(getParam<Real>("cracking_neg_fraction")),
74 _shear_retention_factor(getParam<Real>("shear_retention_factor")),
75 _max_stress_correction(getParam<Real>("max_stress_correction")),
77 getParam<MooseEnum>("cracked_elasticity_type").getEnum<CrackedElasticityType>()),
78 _crack_damage(declareProperty<RealVectorValue>(_base_name + "crack_damage")),
79 _crack_damage_old(getMaterialPropertyOld<RealVectorValue>(_base_name + "crack_damage")),
80 _crack_flags(declareProperty<RealVectorValue>(_base_name + "crack_flags")),
81 _crack_rotation(declareProperty<RankTwoTensor>(_base_name + "crack_rotation")),
82 _crack_rotation_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "crack_rotation")),
84 declareProperty<RealVectorValue>(_base_name + "crack_initiation_strain")),
86 getMaterialPropertyOld<RealVectorValue>(_base_name + "crack_initiation_strain")),
87 _crack_max_strain(declareProperty<RealVectorValue>(_base_name + "crack_max_strain")),
88 _crack_max_strain_old(getMaterialPropertyOld<RealVectorValue>(_base_name + "crack_max_strain"))
89{
90 MultiMooseEnum prescribed_crack_directions =
91 getParam<MultiMooseEnum>("prescribed_crack_directions");
92 if (prescribed_crack_directions.size() > 0)
93 {
94 if (prescribed_crack_directions.size() > 3)
95 mooseError("A maximum of three crack directions may be specified");
96 for (unsigned int i = 0; i < prescribed_crack_directions.size(); ++i)
97 {
98 for (unsigned int j = 0; j < i; ++j)
99 if (prescribed_crack_directions[i] == prescribed_crack_directions[j])
100 mooseError("Entries in 'prescribed_crack_directions' cannot be repeated");
102 static_cast<unsigned int>(prescribed_crack_directions.get(i)));
103 }
104
105 // Fill in the last remaining direction if 2 are specified
106 if (_prescribed_crack_directions.size() == 2)
107 {
108 std::set<unsigned int> available_dirs = {0, 1, 2};
109 for (auto dir : _prescribed_crack_directions)
110 if (available_dirs.erase(dir) != 1)
111 mooseError("Invalid prescribed crack direction:" + Moose::stringify(dir));
112 if (available_dirs.size() != 1)
113 mooseError("Error in finding remaining available crack direction");
114 _prescribed_crack_directions.push_back(*available_dirs.begin());
115 }
116 }
117 if (!isParamSetByUser("cracked_elasticity_type"))
118 paramWarning(
119 "cracked_elasticity_type",
120 "Defaulting to the legacy option of 'DIAGONAL', but the 'FULL' option is preferred");
121
122 _local_elastic_vector.resize(9);
123}
void mooseError(Args &&... args)
const std::string _base_name
Base name prepended to all material property names to allow for multi-material systems.
ComputeMultipleInelasticStress computes the stress, the consistent tangent operator (or an approximat...
const Real _cracking_neg_fraction
Defines transition to changed stiffness during unloading.
const VariableValue & _cracking_stress
Input parameters for smeared crack models.
MaterialProperty< RealVectorValue > & _crack_max_strain
std::vector< unsigned int > _prescribed_crack_directions
User-prescribed cracking directions.
const MaterialProperty< RealVectorValue > & _crack_initiation_strain_old
MaterialProperty< RealVectorValue > & _crack_damage
std::vector< Real > _local_elastic_vector
Vector helper to update local elasticity tensor.
const MaterialProperty< RealVectorValue > & _crack_damage_old
MaterialProperty< RankTwoTensor > & _crack_rotation
const unsigned int _max_cracks
Maximum number of cracks permitted at a material point.
MaterialProperty< RealVectorValue > & _crack_initiation_strain
const MaterialProperty< RankTwoTensor > & _crack_rotation_old
MaterialProperty< RealVectorValue > & _crack_flags
Vector of values going from 1 to 0 as crack damage accumulates.
const Real _shear_retention_factor
Controls the amount of shear retained.
const MaterialProperty< RealVectorValue > & _crack_max_strain_old
const Real _max_stress_correction
Controls the maximum amount that the damaged elastic stress is corrected to folow the release model d...
unsigned int get(unsigned int i) const
unsigned int size() const
std::string stringify(const T &t)
if(subdm)

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(), ComputeCreepPlasticityStress::updateQpState(), ComputeMultipleInelasticStress::updateQpState(), and ComputeMultipleInelasticStressBase::updateQpStateSingleModel().

◆ computeCrackStrainAndOrientation()

void ComputeSmearedCrackingStress::computeCrackStrainAndOrientation ( RealVectorValue &  strain_in_crack_dir)
protected

Compute the crack strain in the crack coordinate system.

Also computes the crack orientations, and stores in _crack_rotation.

Parameters
strain_in_crack_dirComputed strains in crack directions

Definition at line 488 of file ComputeSmearedCrackingStress.C.

490{
491 // The rotation tensor is ordered such that directions for pre-existing cracks appear first
492 // in the list of columns. For example, if there is one existing crack, its direction is in the
493 // first column in the rotation tensor.
494 const unsigned int num_known_dirs = getNumKnownCrackDirs();
495
496 if (num_known_dirs == 0)
497 {
498 std::vector<Real> eigval(3, 0.0);
499 RankTwoTensor eigvec;
500
502
503 // If the elastic strain is beyond the cracking strain, save the eigen vectors as
504 // the rotation tensor. Reverse their order so that the third principal strain
505 // (most tensile) will correspond to the first crack.
506 _crack_rotation[_qp].fillColumn(0, eigvec.column(2));
507 _crack_rotation[_qp].fillColumn(1, eigvec.column(1));
508 _crack_rotation[_qp].fillColumn(2, eigvec.column(0));
509
510 strain_in_crack_dir(0) = eigval[2];
511 strain_in_crack_dir(1) = eigval[1];
512 strain_in_crack_dir(2) = eigval[0];
513 }
514 else if (num_known_dirs == 1)
515 {
516 // This is easily the most complicated case.
517 // 1. Rotate the elastic strain to the orientation associated with the known
518 // crack.
519 // 2. Extract the lower 2x2 block into a separate tensor.
520 // 3. Run the eigen solver on the result.
521 // 4. Update the rotation tensor to reflect the effect of the 2 eigenvectors.
522
523 // 1.
524 const RankTwoTensor & R = _crack_rotation[_qp];
525 RankTwoTensor ePrime(_elastic_strain[_qp]);
526 ePrime.rotate(R.transpose()); // elastic strain in crack coordinates
527
528 // 2.
529 ColumnMajorMatrix e2x2(2, 2);
530 e2x2(0, 0) = ePrime(1, 1);
531 e2x2(1, 0) = ePrime(2, 1);
532 e2x2(0, 1) = ePrime(1, 2);
533 e2x2(1, 1) = ePrime(2, 2);
534
535 // 3.
536 ColumnMajorMatrix e_val2x1(2, 1);
537 ColumnMajorMatrix e_vec2x2(2, 2);
538 e2x2.eigen(e_val2x1, e_vec2x2);
539
540 // 4.
541 RankTwoTensor eigvec(
542 1.0, 0.0, 0.0, 0.0, e_vec2x2(0, 1), e_vec2x2(1, 1), 0.0, e_vec2x2(0, 0), e_vec2x2(1, 0));
543
544 _crack_rotation[_qp] = _crack_rotation_old[_qp] * eigvec; // Roe implementation
545
546 strain_in_crack_dir(0) = ePrime(0, 0);
547 strain_in_crack_dir(1) = e_val2x1(1, 0);
548 strain_in_crack_dir(2) = e_val2x1(0, 0);
549 }
550 else if (num_known_dirs == 2 || num_known_dirs == 3)
551 {
552 // Rotate to cracked orientation and pick off the strains in the rotated
553 // coordinate directions.
554 const RankTwoTensor & R = _crack_rotation[_qp];
555 RankTwoTensor ePrime(_elastic_strain[_qp]);
556 ePrime.rotate(R.transpose()); // elastic strain in crack coordinates
557
558 strain_in_crack_dir(0) = ePrime(0, 0);
559 strain_in_crack_dir(1) = ePrime(1, 1);
560 strain_in_crack_dir(2) = ePrime(2, 2);
561 }
562 else
563 mooseError("Invalid number of known crack directions");
564}
const double R
MaterialProperty< RankTwoTensor > & _elastic_strain
Elastic strain material property.
virtual unsigned int getNumKnownCrackDirs() const
Get the number of known crack directions.
libMesh::VectorValue< T > column(const unsigned int i) const
void symmetricEigenvaluesEigenvectors(std::vector< T > &eigvals, RankTwoTensorTempl< T > &eigvecs) const

Referenced by updateCrackingStateAndStress().

◆ 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 ComputeCreepPlasticityStress::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 ComputeSmearedCrackingStress::computeQpStress ( )
overridevirtual

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

Reimplemented from ComputeMultipleInelasticStressBase.

Definition at line 218 of file ComputeSmearedCrackingStress.C.

219{
220 bool force_elasticity_rotation = false;
221
222 if (!previouslyCracked())
224 else
225 {
227
228 // Propagate behavior from the (now inactive) inelastic models
230 for (auto model : _models)
231 {
232 model->setQp(_qp);
233 model->propagateQpStatefulProperties();
234 }
235
236 // Since the other inelastic models are inactive, they will not limit the time step
237 _material_timestep_limit[_qp] = std::numeric_limits<Real>::max();
238
239 // update _local_elasticity_tensor based on cracking state in previous time step
241
242 // Calculate stress in intermediate configuration
244
246 force_elasticity_rotation = true;
247 }
248
249 // compute crack status and adjust stress
251
253 {
254 finiteStrainRotation(force_elasticity_rotation);
256 }
257}
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-")
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
MaterialProperty< 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 ...
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
old value of inelastic strain
virtual void updateCrackingStateAndStress()
Update all cracking-related state variables and the stress tensor due to cracking in all directions.
void updateLocalElasticityTensor()
Update the local elasticity tensor (_local_elasticity_tensor) due to the effects of cracking.
bool previouslyCracked()
Check to see whether there was cracking in any diretion in the previous time step.

◆ 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}
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 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...

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

◆ 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 computeQpStress().

◆ getInelasticModelNames()

std::vector< MaterialName > ComputeMultipleInelasticStress::getInelasticModelNames ( )
overrideprotectedvirtualinherited

Implements ComputeMultipleInelasticStressBase.

Definition at line 36 of file ComputeMultipleInelasticStress.C.

37{
38 return getParam<std::vector<MaterialName>>("inelastic_models");
39}

◆ getNumKnownCrackDirs()

unsigned int ComputeSmearedCrackingStress::getNumKnownCrackDirs ( ) const
protectedvirtual

Get the number of known crack directions.

This includes cracks in prescribed directions (even if not yet active) and active cracks in other directions.

Returns
number of known crack directions

Definition at line 567 of file ComputeSmearedCrackingStress.C.

568{
569 unsigned int num_known_dirs = 0;
570 for (unsigned int i = 0; i < 3; ++i)
571 {
572 if (_crack_damage_old[_qp](i) > 0.0 || _prescribed_crack_directions.size() >= i + 1)
573 ++num_known_dirs;
574 }
575 return num_known_dirs;
576}
virtual unsigned int size() const override final

Referenced by computeCrackStrainAndOrientation().

◆ 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}
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(), initialSetup(), ComputeLagrangianStressBase::initialSetup(), ComputeStVenantKirchhoffStress::initialSetup(), and CriticalTimeStep::initialSetup().

◆ initialSetup()

void ComputeSmearedCrackingStress::initialSetup ( )
overridevirtual

Reimplemented from ComputeMultipleInelasticStressBase.

Definition at line 189 of file ComputeSmearedCrackingStress.C.

190{
192
194 mooseError("ComputeSmearedCrackingStress requires that the elasticity tensor be "
195 "guaranteed isotropic");
196
197 std::vector<MaterialName> soft_matls = getParam<std::vector<MaterialName>>("softening_models");
198 for (auto soft_matl : soft_matls)
199 {
201 dynamic_cast<SmearedCrackSofteningBase *>(&getMaterialByName(soft_matl));
202 if (scsb)
203 _softening_models.push_back(scsb);
204 else
205 paramError("softening_models", "Model " + soft_matl + " is not a softening model");
206 }
207 if (_softening_models.size() == 1)
208 {
209 // Reuse the same model in all 3 directions
212 }
213 else if (_softening_models.size() != 3)
214 paramError("softening_models", "Either 1 or 3 softening models must be specified");
215}
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
std::vector< SmearedCrackSofteningBase * > _softening_models
The user-supplied list of softening models to be used in the 3 crack directions.
bool hasGuaranteedMaterialProperty(const MaterialPropertyName &prop, Guarantee guarantee)
SmearedCrackSofteningBase is the base class for a set of models that define the softening behavior of...

◆ initQpStatefulProperties()

void ComputeSmearedCrackingStress::initQpStatefulProperties ( )
overridevirtual

Reimplemented from ComputeMultipleInelasticStressBase.

Definition at line 126 of file ComputeSmearedCrackingStress.C.

127{
129
130 _crack_damage[_qp] = 0.0;
131
132 _crack_initiation_strain[_qp] = 0.0;
133 _crack_max_strain[_qp](0) = 0.0;
134
135 switch (_prescribed_crack_directions.size())
136 {
137 case 0:
138 {
140 break;
141 }
142 case 1:
143 {
144 _crack_rotation[_qp].zero();
146 {
147 case 0:
148 {
149 _crack_rotation[_qp](0, 0) = 1.0;
150 _crack_rotation[_qp](1, 1) = 1.0;
151 _crack_rotation[_qp](2, 2) = 1.0;
152 break;
153 }
154 case 1:
155 {
156 _crack_rotation[_qp](1, 0) = 1.0;
157 _crack_rotation[_qp](0, 1) = 1.0;
158 _crack_rotation[_qp](2, 2) = 1.0;
159 break;
160 }
161 case 2:
162 {
163 _crack_rotation[_qp](2, 0) = 1.0;
164 _crack_rotation[_qp](0, 1) = 1.0;
165 _crack_rotation[_qp](1, 2) = 1.0;
166 break;
167 }
168 }
169 break;
170 }
171 case 2:
172 {
173 mooseError("Number of prescribed crack directions cannot be 2");
174 break;
175 }
176 case 3:
177 {
178 for (unsigned int i = 0; i < _prescribed_crack_directions.size(); ++i)
179 {
180 RealVectorValue crack_dir_vec;
181 crack_dir_vec(_prescribed_crack_directions[i]) = 1.0;
182 _crack_rotation[_qp].fillColumn(i, crack_dir_vec);
183 }
184 }
185 }
186}
static RankTwoTensorTempl Identity()
VectorValue< Real > RealVectorValue

◆ previouslyCracked()

bool ComputeSmearedCrackingStress::previouslyCracked ( )
protected

Check to see whether there was cracking in any diretion in the previous time step.

Returns
true if cracked, false if not cracked

Definition at line 605 of file ComputeSmearedCrackingStress.C.

606{
607 for (unsigned int i = 0; i < 3; ++i)
608 if (_crack_damage_old[_qp](i) > 0.0)
609 return true;
610 return false;
611}

Referenced by computeQpStress().

◆ updateCrackingStateAndStress()

void ComputeSmearedCrackingStress::updateCrackingStateAndStress ( )
protectedvirtual

Update all cracking-related state variables and the stress tensor due to cracking in all directions.

Definition at line 373 of file ComputeSmearedCrackingStress.C.

374{
375 const Real youngs_modulus =
377
378 const Real poissons_ratio =
380
381 Real cracking_stress = _cracking_stress[_qp];
382
383 if (cracking_stress > 0)
384 {
385 // Initializing crack states
387
388 for (unsigned i = 0; i < 3; ++i)
389 {
392 _crack_damage[_qp](i) = _crack_damage_old[_qp](i);
393 }
394
395 // Compute crack orientations: updated _crack_rotation[_qp] based on current strain
396 RealVectorValue strain_in_crack_dir;
397 computeCrackStrainAndOrientation(strain_in_crack_dir);
398
399 for (unsigned i = 0; i < 3; ++i)
400 {
401 if (strain_in_crack_dir(i) > _crack_max_strain[_qp](i))
402 _crack_max_strain[_qp](i) = strain_in_crack_dir(i);
403 }
404
405 // Check for new cracks.
406 // Rotate stress to cracked orientation.
407 const RankTwoTensor & R = _crack_rotation[_qp];
408 RankTwoTensor sigmaPrime(_stress[_qp]);
409 sigmaPrime.rotate(R.transpose()); // stress in crack coordinates
410
411 unsigned int num_cracks = 0;
412 for (unsigned int i = 0; i < 3; ++i)
413 {
414 if (_crack_damage_old[_qp](i) > 0.0)
415 ++num_cracks;
416 }
417
418 bool cracked(false);
419 RealVectorValue sigma;
420 mooseAssert(_softening_models.size() == 3, "Must have 3 softening models");
421 for (unsigned int i = 0; i < 3; ++i)
422 {
423 sigma(i) = sigmaPrime(i, i);
424
425 Real stiffness_ratio = 1.0 - _crack_damage[_qp](i);
426
427 const bool pre_existing_crack = (_crack_damage_old[_qp](i) > 0.0);
428 const bool met_stress_criterion = (sigma(i) > cracking_stress);
429 const bool loading_existing_crack = (strain_in_crack_dir(i) >= _crack_max_strain[_qp](i));
430 const bool allowed_to_crack = (pre_existing_crack || num_cracks < _max_cracks);
431 bool new_crack = false;
432
433 cracked |= pre_existing_crack;
434
435 // Adjustments for newly created cracks
436 if (met_stress_criterion && !pre_existing_crack && allowed_to_crack)
437 {
438 new_crack = true;
439 ++num_cracks;
440
441 // Assume Poisson's ratio drops to zero for this direction. Stiffness is then Young's
442 // modulus.
443 _crack_initiation_strain[_qp](i) = cracking_stress / youngs_modulus;
444
445 if (_crack_max_strain[_qp](i) < _crack_initiation_strain[_qp](i))
447 }
448
449 // Update stress and stiffness ratio according to specified crack release model
450 if (new_crack || (pre_existing_crack && loading_existing_crack))
451 {
452 cracked = true;
453 _softening_models[i]->computeCrackingRelease(sigma(i),
454 stiffness_ratio,
455 strain_in_crack_dir(i),
457 _crack_max_strain[_qp](i),
458 cracking_stress,
459 youngs_modulus,
460 poissons_ratio);
461 _crack_damage[_qp](i) = 1.0 - stiffness_ratio;
462 }
463
464 else if (cracked && _cracking_neg_fraction > 0 &&
465 _crack_initiation_strain[_qp](i) * _cracking_neg_fraction > strain_in_crack_dir(i) &&
466 -_crack_initiation_strain[_qp](i) * _cracking_neg_fraction < strain_in_crack_dir(i))
467 {
469 const Real Eo = cracking_stress / _crack_initiation_strain[_qp](i);
470 const Real Ec = Eo * (1.0 - _crack_damage_old[_qp](i));
471 const Real a = (Ec - Eo) / (4.0 * etr);
472 const Real b = 0.5 * (Ec + Eo);
473 const Real c = 0.25 * (Ec - Eo) * etr;
474 sigma(i) = (a * strain_in_crack_dir(i) + b) * strain_in_crack_dir(i) + c;
475 }
476 }
477
478 if (cracked)
480 }
481
482 _crack_flags[_qp](0) = 1.0 - _crack_damage[_qp](2);
483 _crack_flags[_qp](1) = 1.0 - _crack_damage[_qp](1);
484 _crack_flags[_qp](2) = 1.0 - _crack_damage[_qp](0);
485}
void updateStressTensorForCracking(RankTwoTensor &tensor, const RealVectorValue &sigma)
Updates the full stress tensor to account for the effect of cracking using the provided stresses in t...
void computeCrackStrainAndOrientation(RealVectorValue &strain_in_crack_dir)
Compute the crack strain in the crack coordinate system.
T getIsotropicYoungsModulus(const RankFourTensorTempl< T > &elasticity_tensor)
Get the Young's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must b...
T getIsotropicPoissonsRatio(const RankFourTensorTempl< T > &elasticity_tensor)
Get the Poisson's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Referenced by computeQpStress().

◆ updateLocalElasticityTensor()

void ComputeSmearedCrackingStress::updateLocalElasticityTensor ( )
protected

Update the local elasticity tensor (_local_elasticity_tensor) due to the effects of cracking.

Definition at line 260 of file ComputeSmearedCrackingStress.C.

261{
262 const Real youngs_modulus =
264
265 bool cracking_locally_active = false;
266
267 const Real cracking_stress = _cracking_stress[_qp];
268
269 if (cracking_stress > 0)
270 {
271 RealVectorValue stiffness_ratio_local(1.0, 1.0, 1.0);
272 const RankTwoTensor & R = _crack_rotation_old[_qp];
274 ePrime.rotate(R.transpose());
275
276 for (unsigned int i = 0; i < 3; ++i)
277 {
278 // Update elasticity tensor based on crack status of the end of last time step
279 if (_crack_damage_old[_qp](i) > 0.0)
280 {
281 if (_cracking_neg_fraction == 0.0 && MooseUtils::absoluteFuzzyLessThan(ePrime(i, i), 0.0))
282 stiffness_ratio_local(i) = 1.0;
283 else if (_cracking_neg_fraction > 0.0 &&
284 ePrime(i, i) < _crack_initiation_strain_old[_qp](i) * _cracking_neg_fraction &&
286 {
288 const Real Eo = cracking_stress / _crack_initiation_strain_old[_qp](i);
289 const Real Ec = Eo * (1.0 - _crack_damage_old[_qp](i));
290 const Real a = (Ec - Eo) / (4 * etr);
291 const Real b = (Ec + Eo) / 2;
292 // Compute the ratio of the current transition stiffness to the original stiffness
293 stiffness_ratio_local(i) = (2.0 * a * etr + b) / Eo;
294 cracking_locally_active = true;
295 }
296 else
297 {
298 stiffness_ratio_local(i) = (1.0 - _crack_damage_old[_qp](i));
299 cracking_locally_active = true;
300 }
301 }
302 }
303
304 if (cracking_locally_active)
305 {
306 // Update the elasticity tensor in the crack coordinate system
308 {
309 const bool c0_coupled = MooseUtils::absoluteFuzzyEqual(stiffness_ratio_local(0), 1.0);
310 const bool c1_coupled = MooseUtils::absoluteFuzzyEqual(stiffness_ratio_local(1), 1.0);
311 const bool c2_coupled = MooseUtils::absoluteFuzzyEqual(stiffness_ratio_local(2), 1.0);
312
313 const Real c01 = (c0_coupled && c1_coupled ? 1.0 : 0.0);
314 const Real c02 = (c0_coupled && c2_coupled ? 1.0 : 0.0);
315 const Real c12 = (c1_coupled && c2_coupled ? 1.0 : 0.0);
316
317 const Real c01_shear_retention = (c0_coupled && c1_coupled ? 1.0 : _shear_retention_factor);
318 const Real c02_shear_retention = (c0_coupled && c2_coupled ? 1.0 : _shear_retention_factor);
319 const Real c12_shear_retention = (c1_coupled && c2_coupled ? 1.0 : _shear_retention_factor);
320
321 _local_elastic_vector[0] = (c0_coupled ? _elasticity_tensor[_qp](0, 0, 0, 0)
322 : stiffness_ratio_local(0) * youngs_modulus);
323 _local_elastic_vector[1] = _elasticity_tensor[_qp](0, 0, 1, 1) * c01;
324 _local_elastic_vector[2] = _elasticity_tensor[_qp](0, 0, 2, 2) * c02;
325 _local_elastic_vector[3] = (c1_coupled ? _elasticity_tensor[_qp](1, 1, 1, 1)
326 : stiffness_ratio_local(1) * youngs_modulus);
327 _local_elastic_vector[4] = _elasticity_tensor[_qp](1, 1, 2, 2) * c12;
328 _local_elastic_vector[5] = (c2_coupled ? _elasticity_tensor[_qp](2, 2, 2, 2)
329 : stiffness_ratio_local(2) * youngs_modulus);
330 _local_elastic_vector[6] = _elasticity_tensor[_qp](1, 2, 1, 2) * c12_shear_retention;
331 _local_elastic_vector[7] = _elasticity_tensor[_qp](0, 2, 0, 2) * c02_shear_retention;
332 _local_elastic_vector[8] = _elasticity_tensor[_qp](0, 1, 0, 1) * c01_shear_retention;
333 }
334 else // _cracked_elasticity_type == CrackedElasticityType::FULL
335 {
336 const Real & c0 = stiffness_ratio_local(0);
337 const Real & c1 = stiffness_ratio_local(1);
338 const Real & c2 = stiffness_ratio_local(2);
339
340 const Real c01 = c0 * c1;
341 const Real c02 = c0 * c2;
342 const Real c12 = c1 * c2;
343
344 const Real c01_shear_retention = std::max(c01, _shear_retention_factor);
345 const Real c02_shear_retention = std::max(c02, _shear_retention_factor);
346 const Real c12_shear_retention = std::max(c12, _shear_retention_factor);
347
348 _local_elastic_vector[0] = _elasticity_tensor[_qp](0, 0, 0, 0) * c0;
349 _local_elastic_vector[1] = _elasticity_tensor[_qp](0, 0, 1, 1) * c01;
350 _local_elastic_vector[2] = _elasticity_tensor[_qp](0, 0, 2, 2) * c02;
351 _local_elastic_vector[3] = _elasticity_tensor[_qp](1, 1, 1, 1) * c1;
352 _local_elastic_vector[4] = _elasticity_tensor[_qp](1, 1, 2, 2) * c12;
353 _local_elastic_vector[5] = _elasticity_tensor[_qp](2, 2, 2, 2) * c2;
354 _local_elastic_vector[6] = _elasticity_tensor[_qp](1, 2, 1, 2) * c12_shear_retention;
355 _local_elastic_vector[7] = _elasticity_tensor[_qp](0, 2, 0, 2) * c02_shear_retention;
356 _local_elastic_vector[8] = _elasticity_tensor[_qp](0, 1, 0, 1) * c01_shear_retention;
357 }
358
359 // Filling with 9 components is sufficient because these are the only nonzero entries
360 // for isotropic or orthotropic materials.
363
364 // Rotate the modified elasticity tensor back into global coordinates
366 }
367 }
368 if (!cracking_locally_active)
370}
void fillFromInputVector(const std::vector< T > &input, FillMethod fill_method)
void rotate(const TypeTensor< T > &R)

Referenced by computeQpStress().

◆ updateQpState()

void ComputeMultipleInelasticStress::updateQpState ( RankTwoTensor elastic_strain_increment,
RankTwoTensor combined_inelastic_strain_increment 
)
overrideprotectedvirtualinherited

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. This is a weighted sum of all the inelastic strains computed by all the plastic models during the Picard iterative scheme. The weights are dictated by the user using _inelastic_weights

Implements ComputeMultipleInelasticStressBase.

Definition at line 42 of file ComputeMultipleInelasticStress.C.

44{
46 {
47 _console << std::endl
48 << "iteration output for ComputeMultipleInelasticStress solve:"
49 << " time=" << _t << " int_pt=" << _qp << std::endl;
50 }
51 Real l2norm_delta_stress;
52 Real first_l2norm_delta_stress = 1.0;
53 unsigned int counter = 0;
54
55 std::vector<RankTwoTensor> inelastic_strain_increment;
56 inelastic_strain_increment.resize(_num_models);
57
58 for (const auto i_rmm : index_range(_models))
59 inelastic_strain_increment[i_rmm].zero();
60
61 RankTwoTensor stress_max, stress_min;
62
63 do
64 {
65 for (const auto i_rmm : index_range(_models))
66 {
67 _models[i_rmm]->setQp(_qp);
68
69 // initially assume the strain is completely elastic
70 elastic_strain_increment = _strain_increment[_qp];
71 // and subtract off all inelastic strain increments calculated so far
72 // except the one that we're about to calculate
73 for (const auto j_rmm : make_range(_num_models))
74 if (i_rmm != j_rmm)
75 elastic_strain_increment -= inelastic_strain_increment[j_rmm];
76
77 // form the trial stress, with the check for changed elasticity constants
79 _stress[_qp] =
80 _elasticity_tensor[_qp] * (_elastic_strain_old[_qp] + elastic_strain_increment);
81 else
82 {
83 if (_damage_model)
84 _stress[_qp] = _undamaged_stress_old + _elasticity_tensor[_qp] * elastic_strain_increment;
85 else
86 _stress[_qp] = _stress_old[_qp] + _elasticity_tensor[_qp] * elastic_strain_increment;
87 }
88
89 // given a trial stress (_stress[_qp]) and a strain increment (elastic_strain_increment)
90 // let the i^th model produce an admissible stress (as _stress[_qp]), and decompose
91 // the strain increment into an elastic part (elastic_strain_increment) and an
92 // inelastic part (inelastic_strain_increment[i_rmm])
94 elastic_strain_increment,
95 inelastic_strain_increment[i_rmm],
97
98 if (i_rmm == 0)
99 {
100 stress_max = _stress[_qp];
101 stress_min = _stress[_qp];
102 }
103 else
104 {
105 for (const auto i : make_range(Moose::dim))
106 for (const auto j : make_range(Moose::dim))
107 if (_stress[_qp](i, j) > stress_max(i, j))
108 stress_max(i, j) = _stress[_qp](i, j);
109 else if (stress_min(i, j) > _stress[_qp](i, j))
110 stress_min(i, j) = _stress[_qp](i, j);
111 }
112 }
113
114 // now check convergence in the stress:
115 // once the change in stress is within tolerance after each recompute material
116 // consider the stress to be converged
117 l2norm_delta_stress = (stress_max - stress_min).L2norm();
118 if (counter == 0 && l2norm_delta_stress > 0.0)
119 first_l2norm_delta_stress = l2norm_delta_stress;
120
122 {
123 _console << "stress iteration number = " << counter << "\n"
124 << " relative l2 norm delta stress = "
125 << (0 == first_l2norm_delta_stress ? 0
126 : l2norm_delta_stress / first_l2norm_delta_stress)
127 << "\n"
128 << " stress convergence relative tolerance = " << _relative_tolerance << "\n"
129 << " absolute l2 norm delta stress = " << l2norm_delta_stress << "\n"
130 << " stress convergence absolute tolerance = " << _absolute_tolerance << std::endl;
131 }
132 ++counter;
133 } while (counter < _max_iterations && l2norm_delta_stress > _absolute_tolerance &&
134 (l2norm_delta_stress / first_l2norm_delta_stress) > _relative_tolerance &&
135 _num_models != 1);
136
137 if (counter == _max_iterations && l2norm_delta_stress > _absolute_tolerance &&
138 (l2norm_delta_stress / first_l2norm_delta_stress) > _relative_tolerance)
139 throw MooseException("Max stress iteration hit during ComputeMultipleInelasticStress solve!");
140
141 combined_inelastic_strain_increment.zero();
142 for (const auto i_rmm : make_range(_num_models))
143 combined_inelastic_strain_increment +=
144 _inelastic_weights[i_rmm] * inelastic_strain_increment[i_rmm];
145
146 if (_fe_problem.currentlyComputingJacobian())
148
149 _material_timestep_limit[_qp] = 0.0;
150 for (const auto i_rmm : make_range(_num_models))
151 _material_timestep_limit[_qp] += 1.0 / _models[i_rmm]->computeTimeStepLimit();
152
153 if (MooseUtils::absoluteFuzzyEqual(_material_timestep_limit[_qp], 0.0))
154 _material_timestep_limit[_qp] = std::numeric_limits<Real>::max();
155 else
157}
for(PetscInt i=0;i< nvars;++i)
unsigned int dim
std::vector< Real > _inelastic_weights
_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)
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[....
T L2norm(const RankTwoTensorTempl< T > &r2tensor)
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}

Referenced by ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration().

◆ updateStressTensorForCracking()

void ComputeSmearedCrackingStress::updateStressTensorForCracking ( RankTwoTensor tensor,
const RealVectorValue &  sigma 
)
protected

Updates the full stress tensor to account for the effect of cracking using the provided stresses in the crack directions.

The tensor is rotated into the crack coordinates, modified, and rotated back.

Parameters
tensorStress tensor to be updated
sigmaVector of stresses in crack directions

Definition at line 579 of file ComputeSmearedCrackingStress.C.

581{
582 // Get transformation matrix
583 const RankTwoTensor & R = _crack_rotation[_qp];
584 // Rotate to crack frame
585 tensor.rotate(R.transpose());
586
587 // Reset stress if cracked
588 for (unsigned int i = 0; i < 3; ++i)
589 if (_crack_damage[_qp](i) > 0.0)
590 {
591 const Real stress_correction_ratio = (tensor(i, i) - sigma(i)) / tensor(i, i);
592 if (stress_correction_ratio > _max_stress_correction)
593 tensor(i, i) *= (1.0 - _max_stress_correction);
594 else if (stress_correction_ratio < -_max_stress_correction)
595 tensor(i, i) *= (1.0 + _max_stress_correction);
596 else
597 tensor(i, i) = sigma(i);
598 }
599
600 // Rotate back to global frame
601 tensor.rotate(R);
602}
void rotate(const RankTwoTensorTempl< T > &R)

Referenced by updateCrackingStateAndStress().

◆ validParams()

InputParameters ComputeSmearedCrackingStress::validParams ( )
static

Definition at line 18 of file ComputeSmearedCrackingStress.C.

19{
21 params.addClassDescription("Compute stress using a fixed smeared cracking model");
22 params.addRequiredParam<std::vector<MaterialName>>(
23 "softening_models",
24 "The material objects used to compute softening behavior for loading a crack."
25 "Either 1 or 3 models must be specified. If a single model is specified, it is"
26 "used for all directions. If 3 models are specified, they will be used for the"
27 "3 crack directions in sequence");
29 "cracking_stress",
30 "The stress threshold beyond which cracking occurs. Negative values prevent cracking.");
31 MultiMooseEnum direction("x y z");
33 "prescribed_crack_directions", direction, "Prescribed directions of first cracks");
34 params.addParam<unsigned int>(
35 "max_cracks", 3, "The maximum number of cracks allowed at a material point.");
36 params.addRangeCheckedParam<Real>("cracking_neg_fraction",
37 0,
38 "cracking_neg_fraction <= 1 & cracking_neg_fraction >= 0",
39 "The fraction of the cracking strain at which "
40 "a transition begins during decreasing "
41 "strain to the original stiffness.");
42 params.addParam<Real>(
43 "max_stress_correction",
44 1.0,
45 "Maximum permitted correction to the predicted stress as a ratio of the "
46 "stress change to the predicted stress from the previous step's damage level. "
47 "Values less than 1 will improve robustness, but not be as accurate.");
48
50 "shear_retention_factor",
51 0.0,
52 "shear_retention_factor>=0 & shear_retention_factor<=1.0",
53 "Fraction of original shear stiffness to be retained after cracking");
54 params.set<std::vector<MaterialName>>("inelastic_models") = {};
55
56 MooseEnum crackedElasticityType("DIAGONAL FULL", "DIAGONAL");
57 crackedElasticityType.addDocumentation(
58 "DIAGONAL", "Zero out terms coupling with directions orthogonal to a crack (legacy)");
59 crackedElasticityType.addDocumentation(
60 "FULL", "Consistently scale all entries based on damage (recommended)");
61 params.addParam<MooseEnum>(
62 "cracked_elasticity_type",
63 crackedElasticityType,
64 "Method to modify the local elasticity tensor to account for cracking");
65
66 return params;
67}
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, 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

◆ _crack_damage

MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_damage
protected

◆ _crack_damage_old

const MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_damage_old
protected

◆ _crack_flags

MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_flags
protected

Vector of values going from 1 to 0 as crack damage accumulates.

Legacy property for backward compatibility – remove in the future.

Definition at line 108 of file ComputeSmearedCrackingStress.h.

Referenced by updateCrackingStateAndStress().

◆ _crack_initiation_strain

MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_initiation_strain
protected

◆ _crack_initiation_strain_old

const MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_initiation_strain_old
protected

◆ _crack_max_strain

MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_max_strain
protected

◆ _crack_max_strain_old

const MaterialProperty<RealVectorValue>& ComputeSmearedCrackingStress::_crack_max_strain_old
protected

Definition at line 122 of file ComputeSmearedCrackingStress.h.

Referenced by updateCrackingStateAndStress().

◆ _crack_rotation

MaterialProperty<RankTwoTensor>& ComputeSmearedCrackingStress::_crack_rotation
protected

◆ _crack_rotation_old

const MaterialProperty<RankTwoTensor>& ComputeSmearedCrackingStress::_crack_rotation_old
protected

◆ _cracked_elasticity_type

enum ComputeSmearedCrackingStress::CrackedElasticityType ComputeSmearedCrackingStress::_cracked_elasticity_type
protected

◆ _cracking_neg_fraction

const Real ComputeSmearedCrackingStress::_cracking_neg_fraction
protected

Defines transition to changed stiffness during unloading.

Definition at line 88 of file ComputeSmearedCrackingStress.h.

Referenced by updateCrackingStateAndStress(), and updateLocalElasticityTensor().

◆ _cracking_stress

const VariableValue& ComputeSmearedCrackingStress::_cracking_stress
protected

Input parameters for smeared crack models.

Threshold at which cracking initiates if tensile stress exceeds it

Definition at line 79 of file ComputeSmearedCrackingStress.h.

Referenced by updateCrackingStateAndStress(), and updateLocalElasticityTensor().

◆ _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

◆ _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

Name of the elasticity tensor material property.

Definition at line 33 of file ComputeFiniteStrainElasticStress.h.

Referenced by ComputeFiniteStrainElasticStress::computeQpStress(), ComputeMultipleInelasticStressBase::initialSetup(), and initialSetup().

◆ _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_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

◆ _local_elastic_vector

std::vector<Real> ComputeSmearedCrackingStress::_local_elastic_vector
protected

Vector helper to update local elasticity tensor.

Definition at line 133 of file ComputeSmearedCrackingStress.h.

Referenced by ComputeSmearedCrackingStress(), and updateLocalElasticityTensor().

◆ _local_elasticity_tensor

RankFourTensor ComputeSmearedCrackingStress::_local_elasticity_tensor
protected

Definition at line 126 of file ComputeSmearedCrackingStress.h.

Referenced by computeQpStress(), and updateLocalElasticityTensor().

◆ _material_timestep_limit

MaterialProperty<Real>& ComputeMultipleInelasticStressBase::_material_timestep_limit
protectedinherited

◆ _max_cracks

const unsigned int ComputeSmearedCrackingStress::_max_cracks
protected

Maximum number of cracks permitted at a material point.

Definition at line 85 of file ComputeSmearedCrackingStress.h.

Referenced by updateCrackingStateAndStress().

◆ _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 ComputeCreepPlasticityStress::updateQpState(), and ComputeMultipleInelasticStress::updateQpState().

◆ _max_stress_correction

const Real ComputeSmearedCrackingStress::_max_stress_correction
protected

Controls the maximum amount that the damaged elastic stress is corrected to folow the release model during a time step.

Definition at line 95 of file ComputeSmearedCrackingStress.h.

Referenced by updateStressTensorForCracking().

◆ _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(), computeQpStress(), ComputeCreepPlasticityStress::initialSetup(), ComputeMultipleInelasticStressBase::initialSetup(), ComputeCreepPlasticityStress::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

◆ _prescribed_crack_directions

std::vector<unsigned int> ComputeSmearedCrackingStress::_prescribed_crack_directions
protected

User-prescribed cracking directions.

Definition at line 82 of file ComputeSmearedCrackingStress.h.

Referenced by ComputeSmearedCrackingStress(), getNumKnownCrackDirs(), and initQpStatefulProperties().

◆ _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().

◆ _shear_retention_factor

const Real ComputeSmearedCrackingStress::_shear_retention_factor
protected

Controls the amount of shear retained.

Definition at line 91 of file ComputeSmearedCrackingStress.h.

Referenced by updateLocalElasticityTensor().

◆ _softening_models

std::vector<SmearedCrackSofteningBase *> ComputeSmearedCrackingStress::_softening_models
protected

The user-supplied list of softening models to be used in the 3 crack directions.

Definition at line 130 of file ComputeSmearedCrackingStress.h.

Referenced by initialSetup(), and updateCrackingStateAndStress().

◆ _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(), computeQpStress(), ComputeMultipleCrystalPlasticityStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration(), ComputeLinearElasticPFFractureStress::computeStrainSpectral(), ComputeLinearElasticPFFractureStress::computeStrainVolDev(), ComputeLinearElasticPFFractureStress::computeStressSpectral(), ComputeCreepPlasticityStress::computeTangentOperators(), ComputeMultipleInelasticStressBase::finiteStrainRotation(), FiniteStrainCrystalPlasticity::initQpStatefulProperties(), FiniteStrainUObasedCP::initQpStatefulProperties(), FiniteStrainHyperElasticViscoPlastic::initQpStatefulProperties(), ComputeGeneralStressBase::initQpStatefulProperties(), ComputeMultiPlasticityStress::postReturnMap(), FiniteStrainCrystalPlasticity::postSolveQp(), FiniteStrainUObasedCP::postSolveQp(), FiniteStrainHyperElasticViscoPlastic::postSolveQp(), updateCrackingStateAndStress(), ComputeCreepPlasticityStress::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: