www.mooseframework.org
ADViscoplasticityStressUpdateBase.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
13 
14 template <ComputeStage compute_stage>
15 InputParameters
17 {
18  InputParameters params = ADStressUpdateBase<compute_stage>::validParams();
20  params.addClassDescription("Base class used to calculate viscoplastic responses to be used in "
21  "ADComputeMultiplePorousInelasticStress");
22  params.addParam<Real>("max_inelastic_increment",
23  1.0e-4,
24  "The maximum inelastic strain increment allowed in a time step");
25  params.addParam<std::string>(
26  "inelastic_strain_name",
27  "viscoplasticity",
28  "Name of the material property that stores the effective inelastic strain");
29  params.addParam<bool>("verbose", false, "Flag to output verbose information");
30  params.addParam<MaterialPropertyName>(
31  "porosity_name", "porosity", "Name of porosity material property");
32  params.addParam<std::string>("total_strain_base_name", "Base name for the total strain");
33 
34  params.addParamNamesToGroup("inelastic_strain_name", "Advanced");
35  return params;
36 }
37 
38 template <ComputeStage compute_stage>
40  const InputParameters & parameters)
41  : ADStressUpdateBase<compute_stage>(parameters),
42  ADSingleVariableReturnMappingSolution<compute_stage>(parameters),
43  _total_strain_base_name(isParamValid("total_strain_base_name")
44  ? getParam<std::string>("total_strain_base_name") + "_"
45  : ""),
46  _strain_increment(
47  getADMaterialProperty<RankTwoTensor>(_total_strain_base_name + "strain_increment")),
48  _effective_inelastic_strain(declareADProperty<Real>(
49  _base_name + "effective_" + getParam<std::string>("inelastic_strain_name"))),
50  _effective_inelastic_strain_old(getMaterialPropertyOld<Real>(
51  _base_name + "effective_" + getParam<std::string>("inelastic_strain_name"))),
52  _inelastic_strain(declareADProperty<RankTwoTensor>(
53  _base_name + getParam<std::string>("inelastic_strain_name"))),
54  _inelastic_strain_old(getMaterialPropertyOld<RankTwoTensor>(
55  _base_name + getParam<std::string>("inelastic_strain_name"))),
56  _max_inelastic_increment(getParam<Real>("max_inelastic_increment")),
57  _intermediate_porosity(0.0),
58  _porosity_old(getMaterialPropertyOld<Real>(getParam<MaterialPropertyName>("porosity_name"))),
59  _verbose(getParam<bool>("verbose")),
60  _derivative(0.0)
61 {
62 }
63 
64 template <ComputeStage compute_stage>
65 void
67 {
68  _effective_inelastic_strain[_qp] = 0.0;
69  _inelastic_strain[_qp].zero();
70 }
71 
72 template <ComputeStage compute_stage>
73 void
75 {
76  _effective_inelastic_strain[_qp] = _effective_inelastic_strain_old[_qp];
77  _inelastic_strain[_qp] = _inelastic_strain_old[_qp];
78 }
79 
80 template <ComputeStage compute_stage>
81 Real
83  const ADReal & /*effective_trial_stress*/, const ADReal & gauge_stress)
84 {
85  // Use gauge stress for relative tolerance criteria, defined as:
86  // std::abs(residual / gauge_stress) <= _relative_tolerance
87  return MetaPhysicL::raw_value(gauge_stress);
88 }
89 
90 template <ComputeStage compute_stage>
91 Real
93 {
94  const Real scalar_inelastic_strain_incr =
95  MetaPhysicL::raw_value(_effective_inelastic_strain[_qp]) -
96  _effective_inelastic_strain_old[_qp];
97 
98  if (!scalar_inelastic_strain_incr)
99  return std::numeric_limits<Real>::max();
100 
101  return _dt * _max_inelastic_increment / scalar_inelastic_strain_incr;
102 }
103 
104 template <ComputeStage compute_stage>
105 void
107  std::stringstream * iter_output, const unsigned int total_it)
108 {
109  if (iter_output)
110  {
111  *iter_output << "At element " << _current_elem->id() << " _qp=" << _qp << " Coordinates "
112  << _q_point[_qp] << " block=" << _current_elem->subdomain_id() << '\n';
113  }
115  total_it);
116 }
117 
118 template <ComputeStage compute_stage>
119 void
121  const ADRankTwoTensor & elastic_strain_increment)
122 {
123  // Subtract elastic strain from strain increment to find all inelastic strain increments
124  // calculated so far except the one that we're about to calculate
125  const ADRankTwoTensor inelastic_volumetric_increment =
126  _strain_increment[_qp] - elastic_strain_increment;
127 
128  // Calculate intermdiate porosity from all inelastic strain increments calculated so far except
129  // the one that we're about to calculate
130  _intermediate_porosity =
131  (1.0 - _porosity_old[_qp]) * inelastic_volumetric_increment.trace() + _porosity_old[_qp];
132 }
133 
134 // explicit instantiation is required for AD base classes
ADViscoplasticityStressUpdateBase.h
ADViscoplasticityStressUpdateBase::updateIntermediatePorosity
void updateIntermediatePorosity(const ADRankTwoTensor &elastic_strain_increment)
Definition: ADViscoplasticityStressUpdateBase.C:120
ADViscoplasticityStressUpdateBase::validParams
static InputParameters validParams()
Definition: ADViscoplasticityStressUpdateBase.C:16
ADViscoplasticityStressUpdateBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: ADViscoplasticityStressUpdateBase.C:66
ADSingleVariableReturnMappingSolution::validParams
static InputParameters validParams()
Definition: ADSingleVariableReturnMappingSolution.C:32
ADViscoplasticityStressUpdateBase::propagateQpStatefulProperties
virtual void propagateQpStatefulProperties() override
If updateState is not called during a timestep, this will be.
Definition: ADViscoplasticityStressUpdateBase.C:74
ADViscoplasticityStressUpdateBase::outputIterationSummary
void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it) override
Output summary information for the convergence history of the model.
Definition: ADViscoplasticityStressUpdateBase.C:106
ADStressUpdateBase
ADStressUpdateBase is a material that is not called by MOOSE because of the compute=false flag set in...
Definition: ADComputeMultipleInelasticStress.h:28
defineADLegacyParams
defineADLegacyParams(ADViscoplasticityStressUpdateBase)
adBaseClass
adBaseClass(ADViscoplasticityStressUpdateBase)
ADViscoplasticityStressUpdateBase::ADViscoplasticityStressUpdateBase
ADViscoplasticityStressUpdateBase(const InputParameters &parameters)
Definition: ADViscoplasticityStressUpdateBase.C:39
ADViscoplasticityStressUpdateBase
Definition: ADViscoplasticityStressUpdateBase.h:32
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
ADViscoplasticityStressUpdateBase::computeTimeStepLimit
virtual Real computeTimeStepLimit() override
Compute the limiting value of the time step for this material.
Definition: ADViscoplasticityStressUpdateBase.C:92
ADViscoplasticityStressUpdateBase::computeReferenceResidual
virtual Real computeReferenceResidual(const ADReal &effective_trial_stress, const ADReal &scalar_effective_inelastic_strain) override
Compute a reference quantity to be used for checking relative convergence.
Definition: ADViscoplasticityStressUpdateBase.C:82
ADSingleVariableReturnMappingSolution::outputIterationSummary
virtual void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it)
Output summary information for the convergence history of the model.
Definition: ADSingleVariableReturnMappingSolution.C:416
ADSingleVariableReturnMappingSolution
Base class that provides capability for Newton return mapping iterations on a single variable.
Definition: ADSingleVariableReturnMappingSolution.h:32
ADStressUpdateBase::validParams
static InputParameters validParams()
Definition: ADStressUpdateBase.C:19