www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
ComputeMultipleInelasticStress Class Reference

ComputeMultipleInelasticStress 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 <ComputeMultipleInelasticStress.h>

Inheritance diagram for ComputeMultipleInelasticStress:
[legend]

Public Member Functions

 ComputeMultipleInelasticStress (const InputParameters &parameters)
 
virtual void initialSetup () override
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Types

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

Protected Member Functions

virtual void initQpStatefulProperties () override
 
virtual void computeQpStress () override
 Compute the stress and store it in the _stress material property for the current quadrature point. More...
 
virtual void computeQpStressIntermediateConfiguration ()
 Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration to the new configuration. More...
 
virtual void finiteStrainRotation (const bool force_elasticity_rotation=false)
 Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration. More...
 
virtual void updateQpState (RankTwoTensor &elastic_strain_increment, RankTwoTensor &combined_inelastic_strain_increment)
 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]). More...
 
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]) More...
 
virtual void computeQpJacobianMult ()
 Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[...] computed by the inelastic models, compute _Jacobian_mult[_qp]. More...
 
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. More...
 
virtual void computeQpProperties () override
 
bool hasGuaranteedMaterialProperty (const MaterialPropertyName &prop, Guarantee guarantee)
 

Protected Attributes

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

Private Attributes

const InputParameters & _gc_params
 Parameters of the object with this interface. More...
 
FEProblemBase *const _gc_feproblem
 Reference to the FEProblemBase class. More...
 
BlockRestrictable *const _gc_block_restrict
 Access block restrictions of the object with this interface. More...
 

Detailed Description

ComputeMultipleInelasticStress 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 to call the recompute iterative materials of a number of specified inelastic models that inherit from StressUpdateBase. It iterates over the specified inelastic models until the change in stress is within a user-specified tolerance, in order to produce the stress, the consistent tangent operator and the elastic and inelastic strains for the time increment.

Definition at line 38 of file ComputeMultipleInelasticStress.h.

Member Enumeration Documentation

◆ TangentOperatorEnum

what sort of Tangent operator to calculate

Enumerator
elastic 
nonlinear 

Definition at line 143 of file ComputeMultipleInelasticStress.h.

143 { elastic, nonlinear } _tangent_operator_type;

Constructor & Destructor Documentation

◆ ComputeMultipleInelasticStress()

ComputeMultipleInelasticStress::ComputeMultipleInelasticStress ( const InputParameters &  parameters)

Definition at line 77 of file ComputeMultipleInelasticStress.C.

79  _max_iterations(parameters.get<unsigned int>("max_iterations")),
80  _relative_tolerance(parameters.get<Real>("relative_tolerance")),
81  _absolute_tolerance(parameters.get<Real>("absolute_tolerance")),
82  _internal_solve_full_iteration_history(getParam<bool>("internal_solve_full_iteration_history")),
83  _perform_finite_strain_rotations(getParam<bool>("perform_finite_strain_rotations")),
84  _elastic_strain_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "elastic_strain")),
85  _strain_increment(getMaterialProperty<RankTwoTensor>(_base_name + "strain_increment")),
86  _inelastic_strain(declareProperty<RankTwoTensor>(_base_name + "combined_inelastic_strain")),
88  getMaterialPropertyOld<RankTwoTensor>(_base_name + "combined_inelastic_strain")),
89  _tangent_operator_type(getParam<MooseEnum>("tangent_operator").getEnum<TangentOperatorEnum>()),
90  _num_models(getParam<std::vector<MaterialName>>("inelastic_models").size()),
93  _inelastic_weights(isParamValid("combined_inelastic_strain_weights")
94  ? getParam<std::vector<Real>>("combined_inelastic_strain_weights")
95  : std::vector<Real>(_num_models, true)),
97  _cycle_models(getParam<bool>("cycle_models")),
98  _matl_timestep_limit(declareProperty<Real>("matl_timestep_limit")),
99  _identity_symmetric_four(RankFourTensor::initIdentitySymmetricFour),
100  _all_models_isotropic(true),
101  _damage_model(isParamValid("damage_model")
102  ? dynamic_cast<DamageBase *>(&getMaterial("damage_model"))
103  : nullptr)
104 {
105  if (_inelastic_weights.size() != _num_models)
106  mooseError(
107  "ComputeMultipleInelasticStress: combined_inelastic_strain_weights must contain the same "
108  "number of entries as inelastic_models ",
109  _inelastic_weights.size(),
110  " ",
111  _num_models);
112 }

Member Function Documentation

◆ computeAdmissibleState()

void ComputeMultipleInelasticStress::computeAdmissibleState ( unsigned  model_number,
RankTwoTensor elastic_strain_increment,
RankTwoTensor inelastic_strain_increment,
RankFourTensor consistent_tangent_operator 
)
protectedvirtual

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 466 of file ComputeMultipleInelasticStress.C.

470 {
471  const bool jac = _fe_problem.currentlyComputingJacobian();
472  if (_damage_model)
473  _models[model_number]->updateState(elastic_strain_increment,
474  inelastic_strain_increment,
475  _rotation_increment[_qp],
476  _stress[_qp],
478  _elasticity_tensor[_qp],
479  _elastic_strain_old[_qp],
480  (jac && _tangent_computation_flag[model_number]),
481  consistent_tangent_operator);
482  else
483  _models[model_number]->updateState(elastic_strain_increment,
484  inelastic_strain_increment,
485  _rotation_increment[_qp],
486  _stress[_qp],
487  _stress_old[_qp],
488  _elasticity_tensor[_qp],
489  _elastic_strain_old[_qp],
490  (jac && _tangent_computation_flag[model_number]),
491  consistent_tangent_operator);
492 
493  if (jac && !_tangent_computation_flag[model_number])
494  {
496  consistent_tangent_operator.zero();
497  else
498  consistent_tangent_operator = _elasticity_tensor[_qp];
499  }
500 }

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

◆ computeQpJacobianMult()

void ComputeMultipleInelasticStress::computeQpJacobianMult ( )
protectedvirtual

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 393 of file ComputeMultipleInelasticStress.C.

394 {
398  {
400  for (unsigned i_rmm = 0; i_rmm < _num_models; ++i_rmm)
401  A += _consistent_tangent_operator[i_rmm];
402  mooseAssert(A.isSymmetric(), "Tangent operator isn't symmetric");
403  _Jacobian_mult[_qp] = A.invSymm() * _elasticity_tensor[_qp];
404  }
405  else
406  {
407  const RankFourTensor E_inv = _elasticity_tensor[_qp].invSymm();
409  for (unsigned i_rmm = 1; i_rmm < _num_models; ++i_rmm)
410  _Jacobian_mult[_qp] = _consistent_tangent_operator[i_rmm] * E_inv * _Jacobian_mult[_qp];
411  }
412 }

Referenced by updateQpState().

◆ computeQpProperties()

void ComputeStressBase::computeQpProperties ( )
overrideprotectedvirtualinherited

Definition at line 50 of file ComputeStressBase.C.

51 {
53 
54  // Add in extra stress
55  _stress[_qp] += _extra_stress[_qp];
56 }

◆ computeQpStress()

void ComputeMultipleInelasticStress::computeQpStress ( )
overrideprotectedvirtual

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 187 of file ComputeMultipleInelasticStress.C.

188 {
189  if (_damage_model)
190  {
192  _damage_model->setQp(_qp);
194  }
196 
197  if (_damage_model)
198  {
199  _damage_model->setQp(_qp);
204 
205  const Real damage_timestep_limit = _damage_model->computeTimeStepLimit();
206  if (_matl_timestep_limit[_qp] > damage_timestep_limit)
207  _matl_timestep_limit[_qp] = damage_timestep_limit;
208  }
209 
212 }

Referenced by ComputeMultipleInelasticCosseratStress::computeQpStress().

◆ computeQpStressIntermediateConfiguration()

void ComputeMultipleInelasticStress::computeQpStressIntermediateConfiguration ( )
protectedvirtual

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

Definition at line 215 of file ComputeMultipleInelasticStress.C.

216 {
217  RankTwoTensor elastic_strain_increment;
218  RankTwoTensor combined_inelastic_strain_increment;
219 
220  if (_num_models == 0)
221  {
223 
224  // If the elasticity tensor values have changed and the tensor is isotropic,
225  // use the old strain to calculate the old stress
228  else
229  {
230  if (_damage_model)
232  else
233  _stress[_qp] = _stress_old[_qp] + _elasticity_tensor[_qp] * _strain_increment[_qp];
234  }
235  if (_fe_problem.currentlyComputingJacobian())
237 
238  _matl_timestep_limit[_qp] = std::numeric_limits<Real>::max();
239  }
240  else
241  {
242  if (_num_models == 1 || _cycle_models)
243  updateQpStateSingleModel((_t_step - 1) % _num_models,
244  elastic_strain_increment,
245  combined_inelastic_strain_increment);
246  else
247  updateQpState(elastic_strain_increment, combined_inelastic_strain_increment);
248 
249  _elastic_strain[_qp] = _elastic_strain_old[_qp] + elastic_strain_increment;
250  _inelastic_strain[_qp] = _inelastic_strain_old[_qp] + combined_inelastic_strain_increment;
251  }
252 }

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

◆ finiteStrainRotation()

void ComputeMultipleInelasticStress::finiteStrainRotation ( const bool  force_elasticity_rotation = false)
protectedvirtual

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 255 of file ComputeMultipleInelasticStress.C.

256 {
257  _elastic_strain[_qp] =
258  _rotation_increment[_qp] * _elastic_strain[_qp] * _rotation_increment[_qp].transpose();
259  _stress[_qp] = _rotation_increment[_qp] * _stress[_qp] * _rotation_increment[_qp].transpose();
260  _inelastic_strain[_qp] =
261  _rotation_increment[_qp] * _inelastic_strain[_qp] * _rotation_increment[_qp].transpose();
262 
263  if (force_elasticity_rotation ||
267  _Jacobian_mult[_qp].rotate(_rotation_increment[_qp]);
268 }

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

◆ hasGuaranteedMaterialProperty()

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

Definition at line 28 of file GuaranteeConsumer.C.

30 {
31  if (!_gc_feproblem->startedInitialSetup())
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
38  const auto & ids = (_gc_block_restrict && _gc_block_restrict->blockRestricted())
39  ? _gc_block_restrict->blockIDs()
40  : _gc_feproblem->mesh().meshSubdomains();
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 }

Referenced by ComputeFiniteStrainElasticStress::initialSetup(), ComputeSmearedCrackingStress::initialSetup(), ComputeLinearElasticPFFractureStress::initialSetup(), CriticalTimeStep::initialSetup(), and initialSetup().

◆ initialSetup()

void ComputeMultipleInelasticStress::initialSetup ( )
overridevirtual

Reimplemented in ComputeSmearedCrackingStress.

Definition at line 122 of file ComputeMultipleInelasticStress.C.

123 {
126 
127  std::vector<MaterialName> models = getParam<std::vector<MaterialName>>("inelastic_models");
128 
129  for (unsigned int i = 0; i < _num_models; ++i)
130  {
131  StressUpdateBase * rrr = dynamic_cast<StressUpdateBase *>(&getMaterialByName(models[i]));
132 
133  if (rrr)
134  {
135  _models.push_back(rrr);
138  mooseError("Model " + models[i] +
139  " requires an isotropic elasticity tensor, but the one supplied is not "
140  "guaranteed isotropic");
141  }
142  else
143  mooseError("Model " + models[i] + " is not compatible with ComputeMultipleInelasticStress");
144  }
145 
146  // Check if tangent calculation methods are consistent. If all models have
147  // TangentOperatorEnum::ELASTIC or tangent_operator is set by the user as elasic, then the tangent
148  // is never calculated: J_tot = C. If PARTIAL and NONE models are present, utilize PARTIAL
149  // formulation: J_tot = (I + J_1 + ... J_N)^-1 C. If FULL and NONE models are present, utilize
150  // FULL formulation: J_tot = J_1 * C^-1 * J_2 * C^-1 * ... J_N * C. If PARTIAL and FULL models are
151  // present, error out.
152 
154  {
155  bool full_present = false;
156  bool partial_present = false;
157  for (unsigned int i = 0; i < _num_models; ++i)
158  {
159  if (_models[i]->getTangentCalculationMethod() == TangentCalculationMethod::FULL)
160  {
161  full_present = true;
162  _tangent_computation_flag[i] = true;
164  }
165  else if (_models[i]->getTangentCalculationMethod() == TangentCalculationMethod::PARTIAL)
166  {
167  partial_present = true;
168  _tangent_computation_flag[i] = true;
170  }
171  }
172  if (full_present && partial_present)
173  mooseError("In ",
174  _name,
175  ": Models that calculate the full tangent operator and the partial tangent "
176  "operator are being combined. Either set tangent_operator to elastic, implement "
177  "the corrent tangent formulations, or use different models.");
178  }
179 
180  if (isParamValid("damage_model") && !_damage_model)
181  paramError("damage_model",
182  "Damage Model " + _damage_model->name() +
183  " is not compatible with ComputeMultipleInelasticStress");
184 }

Referenced by ComputeSmearedCrackingStress::initialSetup().

◆ initQpStatefulProperties()

void ComputeMultipleInelasticStress::initQpStatefulProperties ( )
overrideprotectedvirtual

◆ updateQpState()

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

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

Definition at line 271 of file ComputeMultipleInelasticStress.C.

273 {
275  {
276  _console << std::endl
277  << "iteration output for ComputeMultipleInelasticStress solve:"
278  << " time=" << _t << " int_pt=" << _qp << std::endl;
279  }
280  Real l2norm_delta_stress;
281  Real first_l2norm_delta_stress = 1.0;
282  unsigned int counter = 0;
283 
284  std::vector<RankTwoTensor> inelastic_strain_increment;
285  inelastic_strain_increment.resize(_num_models);
286 
287  for (unsigned i_rmm = 0; i_rmm < _models.size(); ++i_rmm)
288  inelastic_strain_increment[i_rmm].zero();
289 
290  RankTwoTensor stress_max, stress_min;
291 
292  do
293  {
294  for (unsigned i_rmm = 0; i_rmm < _num_models; ++i_rmm)
295  {
296  _models[i_rmm]->setQp(_qp);
297 
298  // initially assume the strain is completely elastic
299  elastic_strain_increment = _strain_increment[_qp];
300  // and subtract off all inelastic strain increments calculated so far
301  // except the one that we're about to calculate
302  for (unsigned j_rmm = 0; j_rmm < _num_models; ++j_rmm)
303  if (i_rmm != j_rmm)
304  elastic_strain_increment -= inelastic_strain_increment[j_rmm];
305 
306  // form the trial stress, with the check for changed elasticity constants
308  _stress[_qp] =
309  _elasticity_tensor[_qp] * (_elastic_strain_old[_qp] + elastic_strain_increment);
310  else
311  {
312  if (_damage_model)
313  _stress[_qp] = _undamaged_stress_old + _elasticity_tensor[_qp] * elastic_strain_increment;
314  else
315  _stress[_qp] = _stress_old[_qp] + _elasticity_tensor[_qp] * elastic_strain_increment;
316  }
317 
318  // given a trial stress (_stress[_qp]) and a strain increment (elastic_strain_increment)
319  // let the i^th model produce an admissible stress (as _stress[_qp]), and decompose
320  // the strain increment into an elastic part (elastic_strain_increment) and an
321  // inelastic part (inelastic_strain_increment[i_rmm])
323  elastic_strain_increment,
324  inelastic_strain_increment[i_rmm],
326 
327  if (i_rmm == 0)
328  {
329  stress_max = _stress[_qp];
330  stress_min = _stress[_qp];
331  }
332  else
333  {
334  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
335  {
336  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
337  {
338  if (_stress[_qp](i, j) > stress_max(i, j))
339  stress_max(i, j) = _stress[_qp](i, j);
340  else if (stress_min(i, j) > _stress[_qp](i, j))
341  stress_min(i, j) = _stress[_qp](i, j);
342  }
343  }
344  }
345  }
346 
347  // now check convergence in the stress:
348  // once the change in stress is within tolerance after each recompute material
349  // consider the stress to be converged
350  l2norm_delta_stress = (stress_max - stress_min).L2norm();
351  if (counter == 0 && l2norm_delta_stress > 0.0)
352  first_l2norm_delta_stress = l2norm_delta_stress;
353 
355  {
356  _console << "stress iteration number = " << counter << "\n"
357  << " relative l2 norm delta stress = "
358  << (0 == first_l2norm_delta_stress ? 0
359  : l2norm_delta_stress / first_l2norm_delta_stress)
360  << "\n"
361  << " stress convergence relative tolerance = " << _relative_tolerance << "\n"
362  << " absolute l2 norm delta stress = " << l2norm_delta_stress << "\n"
363  << " stress convergence absolute tolerance = " << _absolute_tolerance << std::endl;
364  }
365  ++counter;
366  } while (counter < _max_iterations && l2norm_delta_stress > _absolute_tolerance &&
367  (l2norm_delta_stress / first_l2norm_delta_stress) > _relative_tolerance &&
368  _num_models != 1);
369 
370  if (counter == _max_iterations && l2norm_delta_stress > _absolute_tolerance &&
371  (l2norm_delta_stress / first_l2norm_delta_stress) > _relative_tolerance)
372  throw MooseException("Max stress iteration hit during ComputeMultipleInelasticStress solve!");
373 
374  combined_inelastic_strain_increment.zero();
375  for (unsigned i_rmm = 0; i_rmm < _num_models; ++i_rmm)
376  combined_inelastic_strain_increment +=
377  _inelastic_weights[i_rmm] * inelastic_strain_increment[i_rmm];
378 
379  if (_fe_problem.currentlyComputingJacobian())
381 
382  _matl_timestep_limit[_qp] = 0.0;
383  for (unsigned i_rmm = 0; i_rmm < _num_models; ++i_rmm)
384  _matl_timestep_limit[_qp] += 1.0 / _models[i_rmm]->computeTimeStepLimit();
385 
386  if (MooseUtils::absoluteFuzzyEqual(_matl_timestep_limit[_qp], 0.0))
387  _matl_timestep_limit[_qp] = std::numeric_limits<Real>::max();
388  else
389  _matl_timestep_limit[_qp] = 1.0 / _matl_timestep_limit[_qp];
390 }

Referenced by computeQpStressIntermediateConfiguration().

◆ updateQpStateSingleModel()

void ComputeMultipleInelasticStress::updateQpStateSingleModel ( unsigned  model_number,
RankTwoTensor elastic_strain_increment,
RankTwoTensor combined_inelastic_strain_increment 
)
protectedvirtual

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 415 of file ComputeMultipleInelasticStress.C.

419 {
420  for (auto model : _models)
421  model->setQp(_qp);
422 
423  elastic_strain_increment = _strain_increment[_qp];
424 
425  // If the elasticity tensor values have changed and the tensor is isotropic,
426  // use the old strain to calculate the old stress
428  _stress[_qp] = _elasticity_tensor[_qp] * (_elastic_strain_old[_qp] + elastic_strain_increment);
429  else
430  {
431  if (_damage_model)
432  _stress[_qp] = _undamaged_stress_old + _elasticity_tensor[_qp] * elastic_strain_increment;
433  else
434  _stress[_qp] = _stress_old[_qp] + _elasticity_tensor[_qp] * elastic_strain_increment;
435  }
436 
437  computeAdmissibleState(model_number,
438  elastic_strain_increment,
439  combined_inelastic_strain_increment,
441 
442  if (_fe_problem.currentlyComputingJacobian())
443  {
447  {
449  mooseAssert(A.isSymmetric(), "Tangent operator isn't symmetric");
450  _Jacobian_mult[_qp] = A.invSymm() * _elasticity_tensor[_qp];
451  }
452  else
454  }
455 
456  _matl_timestep_limit[_qp] = _models[0]->computeTimeStepLimit();
457 
458  /* propagate internal variables, etc, to this timestep for those inelastic models where
459  * "updateState" is not called */
460  for (unsigned i_rmm = 0; i_rmm < _num_models; ++i_rmm)
461  if (i_rmm != model_number)
462  _models[i_rmm]->propagateQpStatefulProperties();
463 }

Referenced by computeQpStressIntermediateConfiguration().

◆ validParams()

InputParameters ComputeMultipleInelasticStress::validParams ( )
static

Definition at line 21 of file ComputeMultipleInelasticStress.C.

22 {
23  InputParameters params = ComputeFiniteStrainElasticStress::validParams();
24  params.addClassDescription("Compute state (stress and internal parameters such as plastic "
25  "strains and internal parameters) using an iterative process. "
26  "Combinations of creep models and plastic models may be used.");
27  params.addParam<unsigned int>("max_iterations",
28  30,
29  "Maximum number of the stress update "
30  "iterations over the stress change after all "
31  "update materials are called");
32  params.addParam<Real>("relative_tolerance",
33  1e-5,
34  "Relative convergence tolerance for the stress "
35  "update iterations over the stress change "
36  "after all update materials are called");
37  params.addParam<Real>("absolute_tolerance",
38  1e-5,
39  "Absolute convergence tolerance for the stress "
40  "update iterations over the stress change "
41  "after all update materials are called");
42  params.addParam<bool>(
43  "internal_solve_full_iteration_history",
44  false,
45  "Set to true to output stress update iteration information over the stress change");
46  params.addParam<bool>("perform_finite_strain_rotations",
47  true,
48  "Tensors are correctly rotated in "
49  "finite-strain simulations. For "
50  "optimal performance you can set "
51  "this to 'false' if you are only "
52  "ever using small strains");
53  MooseEnum tangent_operator("elastic nonlinear", "nonlinear");
54  params.addParam<MooseEnum>(
55  "tangent_operator",
56  tangent_operator,
57  "Type of tangent operator to return. 'elastic': return the "
58  "elasticity tensor. 'nonlinear': return the full, general consistent tangent "
59  "operator.");
60  params.addRequiredParam<std::vector<MaterialName>>(
61  "inelastic_models",
62  "The material objects to use to calculate stress and inelastic strains. "
63  "Note: specify creep models first and plasticity models second.");
64  params.addParam<std::vector<Real>>("combined_inelastic_strain_weights",
65  "The combined_inelastic_strain Material Property is a "
66  "weighted sum of the model inelastic strains. This parameter "
67  "is a vector of weights, of the same length as "
68  "inelastic_models. Default = '1 1 ... 1'. This "
69  "parameter is set to 1 if the number of models = 1");
70  params.addParam<bool>(
71  "cycle_models", false, "At timestep N use only inelastic model N % num_models.");
72  params.addParam<MaterialName>("damage_model", "Name of the damage model");
73 
74  return params;
75 }

Referenced by ComputeSmearedCrackingStress::validParams(), and ComputeMultipleInelasticCosseratStress::validParams().

Member Data Documentation

◆ _absolute_tolerance

const Real ComputeMultipleInelasticStress::_absolute_tolerance
protected

Definition at line 124 of file ComputeMultipleInelasticStress.h.

Referenced by updateQpState().

◆ _all_models_isotropic

bool ComputeMultipleInelasticStress::_all_models_isotropic
protected

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

Definition at line 183 of file ComputeMultipleInelasticStress.h.

Referenced by finiteStrainRotation(), and initialSetup().

◆ _base_name

const std::string ComputeStressBase::_base_name
protectedinherited

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

Definition at line 45 of file ComputeStressBase.h.

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

◆ _consistent_tangent_operator

std::vector<RankFourTensor> ComputeMultipleInelasticStress::_consistent_tangent_operator
protected

the consistent tangent operators computed by each plastic model

Definition at line 158 of file ComputeMultipleInelasticStress.h.

Referenced by ComputeMultipleInelasticCosseratStress::computeQpJacobianMult(), computeQpJacobianMult(), updateQpState(), and updateQpStateSingleModel().

◆ _cycle_models

const bool ComputeMultipleInelasticStress::_cycle_models
protected

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

Definition at line 161 of file ComputeMultipleInelasticStress.h.

Referenced by computeQpStressIntermediateConfiguration().

◆ _damage_model

DamageBase* ComputeMultipleInelasticStress::_damage_model
protected

◆ _elastic_strain

MaterialProperty<RankTwoTensor>& ComputeStressBase::_elastic_strain
protectedinherited

◆ _elastic_strain_old

const MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStress::_elastic_strain_old
protected

◆ _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 37 of file ComputeFiniteStrainElasticStress.h.

Referenced by ComputeFiniteStrainElasticStress::initialSetup(), ComputeSmearedCrackingStress::initialSetup(), and initialSetup().

◆ _extra_stress

const MaterialProperty<RankTwoTensor>& ComputeStressBase::_extra_stress
protectedinherited

Extra stress tensor.

Definition at line 55 of file ComputeStressBase.h.

Referenced by ComputeStressBase::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 ComputeMultipleInelasticStress::_identity_symmetric_four
protected

Rank four symmetric identity tensor.

Definition at line 168 of file ComputeMultipleInelasticStress.h.

Referenced by computeQpJacobianMult(), and updateQpStateSingleModel().

◆ _inelastic_strain

MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStress::_inelastic_strain
protected

The sum of the inelastic strains that come from the plastic models.

Definition at line 137 of file ComputeMultipleInelasticStress.h.

Referenced by ComputeSmearedCrackingStress::computeQpStress(), computeQpStressIntermediateConfiguration(), finiteStrainRotation(), and initQpStatefulProperties().

◆ _inelastic_strain_old

const MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStress::_inelastic_strain_old
protected

old value of inelastic strain

Definition at line 140 of file ComputeMultipleInelasticStress.h.

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

◆ _inelastic_weights

const std::vector<Real> ComputeMultipleInelasticStress::_inelastic_weights
protected

_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)

Definition at line 155 of file ComputeMultipleInelasticStress.h.

Referenced by ComputeMultipleInelasticStress(), and updateQpState().

◆ _initial_stress_fcn

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

initial stress components

Definition at line 58 of file ComputeStressBase.h.

◆ _internal_solve_full_iteration_history

const bool ComputeMultipleInelasticStress::_internal_solve_full_iteration_history
protected

Definition at line 125 of file ComputeMultipleInelasticStress.h.

Referenced by updateQpState().

◆ _is_elasticity_tensor_guaranteed_isotropic

bool ComputeMultipleInelasticStress::_is_elasticity_tensor_guaranteed_isotropic
protected

is the elasticity tensor guaranteed to be isotropic?

Definition at line 180 of file ComputeMultipleInelasticStress.h.

Referenced by computeQpStressIntermediateConfiguration(), finiteStrainRotation(), initialSetup(), updateQpState(), and updateQpStateSingleModel().

◆ _Jacobian_mult

MaterialProperty<RankFourTensor>& ComputeStressBase::_Jacobian_mult
protectedinherited

◆ _matl_timestep_limit

MaterialProperty<Real>& ComputeMultipleInelasticStress::_matl_timestep_limit
protected

◆ _max_iterations

const unsigned int ComputeMultipleInelasticStress::_max_iterations
protected

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

Definition at line 122 of file ComputeMultipleInelasticStress.h.

Referenced by updateQpState().

◆ _mechanical_strain

const MaterialProperty<RankTwoTensor>& ComputeStressBase::_mechanical_strain
protectedinherited

◆ _models

std::vector<StressUpdateBase *> ComputeMultipleInelasticStress::_models
protected

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 177 of file ComputeMultipleInelasticStress.h.

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

◆ _num_models

const unsigned ComputeMultipleInelasticStress::_num_models
protected

◆ _perform_finite_strain_rotations

const bool ComputeMultipleInelasticStress::_perform_finite_strain_rotations
protected

after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rotation_increment

Definition at line 129 of file ComputeMultipleInelasticStress.h.

Referenced by ComputeSmearedCrackingStress::computeQpStress(), ComputeMultipleInelasticCosseratStress::computeQpStress(), computeQpStress(), computeQpStressIntermediateConfiguration(), updateQpState(), and updateQpStateSingleModel().

◆ _relative_tolerance

const Real ComputeMultipleInelasticStress::_relative_tolerance
protected

Definition at line 123 of file ComputeMultipleInelasticStress.h.

Referenced by updateQpState().

◆ _rotation_increment

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStress::_rotation_increment
protectedinherited

◆ _strain_increment

const MaterialProperty<RankTwoTensor>& ComputeMultipleInelasticStress::_strain_increment
protected

◆ _stress

MaterialProperty<RankTwoTensor>& ComputeStressBase::_stress
protectedinherited

Stress material property.

Definition at line 50 of file ComputeStressBase.h.

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

◆ _stress_old

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStress::_stress_old
protectedinherited

Old state of the stress tensor material property.

Definition at line 45 of file ComputeFiniteStrainElasticStress.h.

Referenced by computeAdmissibleState(), computeQpStress(), computeQpStressIntermediateConfiguration(), updateQpState(), and updateQpStateSingleModel().

◆ _tangent_calculation_method

TangentCalculationMethod ComputeMultipleInelasticStress::_tangent_calculation_method
protected

Calculation method for the tangent modulus.

Definition at line 152 of file ComputeMultipleInelasticStress.h.

Referenced by computeAdmissibleState(), computeQpJacobianMult(), finiteStrainRotation(), initialSetup(), and updateQpStateSingleModel().

◆ _tangent_computation_flag

std::vector<bool> ComputeMultipleInelasticStress::_tangent_computation_flag
protected

Flags to compute tangent during updateState call.

Definition at line 149 of file ComputeMultipleInelasticStress.h.

Referenced by computeAdmissibleState(), and initialSetup().

◆ _tangent_operator_type

enum ComputeMultipleInelasticStress::TangentOperatorEnum ComputeMultipleInelasticStress::_tangent_operator_type
protected

◆ _undamaged_stress_old

RankTwoTensor ComputeMultipleInelasticStress::_undamaged_stress_old
protected

The documentation for this class was generated from the following files:
ComputeFiniteStrainElasticStress::_elasticity_tensor
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
Definition: ComputeFiniteStrainElasticStress.h:39
ComputeMultipleInelasticStress::_inelastic_weights
const std::vector< Real > _inelastic_weights
_inelastic_strain = sum_i (_inelastic_weights_i * inelastic_strain_from_model_i)
Definition: ComputeMultipleInelasticStress.h:155
ComputeMultipleInelasticStress::_cycle_models
const bool _cycle_models
whether to cycle through the models, using only one model per timestep
Definition: ComputeMultipleInelasticStress.h:161
ComputeMultipleInelasticStress::_all_models_isotropic
bool _all_models_isotropic
are all inelastic models inherently isotropic? (not the case for e.g. weak plane plasticity models)
Definition: ComputeMultipleInelasticStress.h:183
ComputeStressBase::_stress
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
Definition: ComputeStressBase.h:50
ComputeFiniteStrainElasticStress::_elasticity_tensor_name
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
Definition: ComputeFiniteStrainElasticStress.h:37
TangentCalculationMethod::FULL
ComputeStressBase::_extra_stress
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.
Definition: ComputeStressBase.h:55
ComputeMultipleInelasticStress::_num_models
const unsigned _num_models
number of plastic models
Definition: ComputeMultipleInelasticStress.h:146
DamageBase::computeTimeStepLimit
virtual Real computeTimeStepLimit()
Compute the limiting value of the time step for this material.
Definition: DamageBase.C:51
ComputeMultipleInelasticStress::updateQpStateSingleModel
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,...
Definition: ComputeMultipleInelasticStress.C:415
ComputeStressBase::_Jacobian_mult
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
Definition: ComputeStressBase.h:61
ComputeMultipleInelasticStress::_inelastic_strain_old
const MaterialProperty< RankTwoTensor > & _inelastic_strain_old
old value of inelastic strain
Definition: ComputeMultipleInelasticStress.h:140
TangentCalculationMethod::ELASTIC
ComputeFiniteStrainElasticStress::_rotation_increment
const MaterialProperty< RankTwoTensor > & _rotation_increment
Rotation increment material property.
Definition: ComputeFiniteStrainElasticStress.h:43
ComputeMultipleInelasticStress::_is_elasticity_tensor_guaranteed_isotropic
bool _is_elasticity_tensor_guaranteed_isotropic
is the elasticity tensor guaranteed to be isotropic?
Definition: ComputeMultipleInelasticStress.h:180
ComputeMultipleInelasticStress::_tangent_computation_flag
std::vector< bool > _tangent_computation_flag
Flags to compute tangent during updateState call.
Definition: ComputeMultipleInelasticStress.h:149
ComputeMultipleInelasticStress::_models
std::vector< StressUpdateBase * > _models
The user supplied list of inelastic models to use in the simulation.
Definition: ComputeMultipleInelasticStress.h:177
counter
static unsigned int counter
Definition: ContactPenetrationAuxAction.C:17
ComputeMultipleInelasticStress::_perform_finite_strain_rotations
const bool _perform_finite_strain_rotations
after updateQpState, rotate the stress, elastic_strain, inelastic_strain and Jacobian_mult using _rot...
Definition: ComputeMultipleInelasticStress.h:129
GuaranteeConsumer::_gc_block_restrict
BlockRestrictable *const _gc_block_restrict
Access block restrictions of the object with this interface.
Definition: GuaranteeConsumer.h:41
ComputeMultipleInelasticStress::TangentOperatorEnum::elastic
ComputeStressBase::computeQpStress
virtual void computeQpStress()=0
Compute the stress and store it in the _stress material property for the current quadrature point.
ComputeMultipleInelasticStress::_elastic_strain_old
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
Strain tensors.
Definition: ComputeMultipleInelasticStress.h:132
DamageBase::updateStressForDamage
virtual void updateStressForDamage(RankTwoTensor &stress_new)=0
Update the current stress tensor for effects of damage.
ComputeMultipleInelasticStress::_undamaged_stress_old
RankTwoTensor _undamaged_stress_old
Definition: ComputeMultipleInelasticStress.h:188
ComputeMultipleInelasticStress::_internal_solve_full_iteration_history
const bool _internal_solve_full_iteration_history
Definition: ComputeMultipleInelasticStress.h:125
ComputeMultipleInelasticStress::_consistent_tangent_operator
std::vector< RankFourTensor > _consistent_tangent_operator
the consistent tangent operators computed by each plastic model
Definition: ComputeMultipleInelasticStress.h:158
ComputeMultipleInelasticStress::_inelastic_strain
MaterialProperty< RankTwoTensor > & _inelastic_strain
The sum of the inelastic strains that come from the plastic models.
Definition: ComputeMultipleInelasticStress.h:137
ComputeMultipleInelasticStress::_identity_symmetric_four
const RankFourTensor _identity_symmetric_four
Rank four symmetric identity tensor.
Definition: ComputeMultipleInelasticStress.h:168
ComputeMultipleInelasticStress::_strain_increment
const MaterialProperty< RankTwoTensor > & _strain_increment
Definition: ComputeMultipleInelasticStress.h:133
GuaranteeConsumer::_gc_feproblem
FEProblemBase *const _gc_feproblem
Reference to the FEProblemBase class.
Definition: GuaranteeConsumer.h:38
ComputeMultipleInelasticStress::_damage_model
DamageBase * _damage_model
Pointer to the damage model.
Definition: ComputeMultipleInelasticStress.h:186
StressUpdateBase::isIsotropic
virtual bool isIsotropic()
Is the implmented model isotropic? The safe default is 'false'.
Definition: StressUpdateBase.h:112
ComputeStressBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: ComputeStressBase.C:43
ComputeStressBase::_base_name
const std::string _base_name
Base name prepended to all material property names to allow for multi-material systems.
Definition: ComputeStressBase.h:45
ComputeMultipleInelasticStress::_absolute_tolerance
const Real _absolute_tolerance
Definition: ComputeMultipleInelasticStress.h:124
ComputeMultipleInelasticStress::finiteStrainRotation
virtual void finiteStrainRotation(const bool force_elasticity_rotation=false)
Rotate _elastic_strain, _stress, _inelastic_strain, and _Jacobian_mult to the new configuration.
Definition: ComputeMultipleInelasticStress.C:255
ComputeMultipleInelasticStress::computeQpStressIntermediateConfiguration
virtual void computeQpStressIntermediateConfiguration()
Compute the stress for the current QP, but do not rotate tensors from the intermediate configuration ...
Definition: ComputeMultipleInelasticStress.C:215
ComputeFiniteStrainElasticStress::ComputeFiniteStrainElasticStress
ComputeFiniteStrainElasticStress(const InputParameters &parameters)
Definition: ComputeFiniteStrainElasticStress.C:24
ComputeFiniteStrainElasticStress::_stress_old
const MaterialProperty< RankTwoTensor > & _stress_old
Old state of the stress tensor material property.
Definition: ComputeFiniteStrainElasticStress.h:45
ComputeMultipleInelasticStress::updateQpState
virtual void updateQpState(RankTwoTensor &elastic_strain_increment, RankTwoTensor &combined_inelastic_strain_increment)
Given the _strain_increment[_qp], iterate over all of the user-specified recompute materials in order...
Definition: ComputeMultipleInelasticStress.C:271
DamageBase::computeUndamagedOldStress
virtual void computeUndamagedOldStress(RankTwoTensor &stress_old)=0
ComputeStressBase::_elastic_strain
MaterialProperty< RankTwoTensor > & _elastic_strain
Elastic strain material property.
Definition: ComputeStressBase.h:52
ComputeMultipleInelasticStress::computeAdmissibleState
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...
Definition: ComputeMultipleInelasticStress.C:466
DamageBase::updateJacobianMultForDamage
virtual void updateJacobianMultForDamage(RankFourTensor &jacobian_mult)=0
Update the material constitutive matrix.
GuaranteeConsumer::hasGuaranteedMaterialProperty
bool hasGuaranteedMaterialProperty(const MaterialPropertyName &prop, Guarantee guarantee)
Definition: GuaranteeConsumer.C:28
ComputeMultipleInelasticStress::_matl_timestep_limit
MaterialProperty< Real > & _matl_timestep_limit
Definition: ComputeMultipleInelasticStress.h:163
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
StressUpdateBase
StressUpdateBase is a material that is not called by MOOSE because of the compute=false flag set in t...
Definition: StressUpdateBase.h:52
ComputeMultipleInelasticStress::computeQpJacobianMult
virtual void computeQpJacobianMult()
Using _elasticity_tensor[_qp] and the consistent tangent operators, _consistent_tangent_operator[....
Definition: ComputeMultipleInelasticStress.C:393
TangentCalculationMethod::PARTIAL
ComputeFiniteStrainElasticStress::validParams
static InputParameters validParams()
Definition: ComputeFiniteStrainElasticStress.C:17
ComputeMultipleInelasticStress::_tangent_calculation_method
TangentCalculationMethod _tangent_calculation_method
Calculation method for the tangent modulus.
Definition: ComputeMultipleInelasticStress.h:152
RankTwoTensorTempl< Real >
DamageBase::updateDamage
virtual void updateDamage()
Update the internal variable(s) that evolve the damage.
Definition: DamageBase.C:46
ComputeMultipleInelasticStress::_tangent_operator_type
enum ComputeMultipleInelasticStress::TangentOperatorEnum _tangent_operator_type
DamageBase::finiteStrainRotation
virtual void finiteStrainRotation(const RankTwoTensor &rotation_increment)
Perform any necessary rotation of internal variables for finite strain.
Definition: DamageBase.C:57
ComputeMultipleInelasticStress::_max_iterations
const unsigned int _max_iterations
Input parameters associated with the recompute iteration to return the stress state to the yield surf...
Definition: ComputeMultipleInelasticStress.h:122
DamageBase::setQp
void setQp(unsigned int qp)
Sets the value of the member variable _qp for use in inheriting classes.
Definition: DamageBase.C:40
RankTwoScalarTools::L2norm
T L2norm(const RankTwoTensorTempl< T > &r2tensor)
Definition: RankTwoScalarTools.h:98
StressUpdateBase::requiresIsotropicTensor
virtual bool requiresIsotropicTensor()=0
Does the model require the elasticity tensor to be isotropic?
ComputeMultipleInelasticStress::_relative_tolerance
const Real _relative_tolerance
Definition: ComputeMultipleInelasticStress.h:123
Guarantee::ISOTROPIC