https://mooseframework.inl.gov
Loading...
Searching...
No Matches
CrystalPlasticityHCPDislocationSlipBeyerleinUpdate.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
11#include "libmesh/int_range.h"
12
14
17{
19 params.addClassDescription("Two-term dislocation slip model for hexagonal close packed crystals "
20 "from Beyerline and Tome");
21
22 params.set<MooseEnum>("crystal_lattice_type") = "HCP";
23 params.suppressParameter<MooseEnum>("crystal_lattice_type");
24
25 params.addCoupledVar("temperature", "The name of the temperature variable");
27 "initial_forest_dislocation_density",
28 "initial_forest_dislocation_density>0",
29 "The initial density of the forest dislocations, in 1/mm^2, assumed "
30 "to be split evenly among all slip systems");
32 "initial_substructure_density",
33 "initial_substructure_density>0",
34 "The initial total density of the sessile dislocations, in 1/mm^2");
35
36 params.addParam<unsigned int>(
37 "slip_system_modes",
38 1,
39 "Number of different types of slip systems in this HCP crystal, e.g. for a material with "
40 "basal<a>, prismatic<a>, and pyramidal<a> active slip systems, this number would be 3");
41 params.addParam<std::vector<unsigned int>>(
42 "number_slip_systems_per_mode",
43 std::vector<unsigned int>(),
44 "The number of slip systems per each slip system type. The sum of the entries of the vector "
45 "given here must equal the value given for the total number of slip systems.");
46 params.addParam<std::vector<Real>>(
47 "lattice_friction_per_mode",
48 std::vector<Real>(),
49 "Value of the lattice friction for each type of the slip system, units of MPa. The order "
50 "must be consistent with the number of slip systems per type vector.");
51
52 params.addParam<std::vector<Real>>(
53 "effective_shear_modulus_per_mode",
54 std::vector<Real>(),
55 "Effective isotropic shear modulus value, mu, in MPa. The order "
56 "must be consistent with the number of slip systems per type vector.");
57
58 params.addParam<std::vector<Real>>(
59 "burgers_vector_per_mode",
60 std::vector<Real>(),
61 "Value of the Burgers vector, b, for each type of the slip system, units of mm. The order "
62 "must "
63 "be consistent with the number of slip systems per type vector.");
64 params.addParam<std::vector<Real>>(
65 "slip_generation_coefficient_per_mode",
66 std::vector<Real>(),
67 "Slip dislocation generation coefficient value for each type of the slip system, k_1, units "
68 "of 1/mm. The order "
69 "must be consistent with the number of slip systems per type vector.");
70 params.addParam<std::vector<Real>>(
71 "normalized_slip_activiation_energy_per_mode",
72 std::vector<Real>(),
73 "Value of the slip dislocation attraction activation energy for each type of the slip "
74 "system, g, dimensionless. The order must be consistent with the number of slip systems per "
75 "type vector.");
76 params.addParam<std::vector<Real>>(
77 "slip_energy_proportionality_factor_per_mode",
78 std::vector<Real>(),
79 "Value of the the dislocation slip attraction energy proportionality factor for each type of "
80 "the slip system, D, units of MPa. The order must be consistent with the number of slip "
81 "systems "
82 "per type vector.");
83 params.addParam<std::vector<Real>>(
84 "substructure_rate_coefficient_per_mode",
85 std::vector<Real>(),
86 "Material-independent rate constant that accounts for locking of slip dislocations in "
87 "sessile substructure dislocation segments, q, dimensionless. This value is often determined "
88 "through dislocation dynamics calculations. The order must be consistent with the number of "
89 "slip systems per type vector.");
90
91 params.addParam<Real>("gamma_o", 1.0e-3, "Reference strain rate on each slip system, in 1/s");
92 params.addParam<Real>("strain_rate_sensitivity_exponent",
93 0.05,
94 "The strain rate sensitivity exponent for the power law relationship of "
95 "resolved shear stress");
96 params.addParam<Real>("forest_interaction_parameter",
97 0.9,
98 "Forest dislocation interaction parameter, Chi, dimensionless.");
99 params.addParam<Real>("Boltzman_constant", 1.38065e-20, "Boltzman constant, in MPa-mm^3/K");
100 params.addRangeCheckedParam<Real>("applied_strain_rate",
101 1.0e-4,
102 "applied_strain_rate<=1.0e-3 & applied_strain_rate>=1.0e-5",
103 "Value of the applied macroscopic strain rate and should "
104 "correspond to the simulation loading conditions, in 1/s.");
105 params.addParam<Real>("reference_macroscopic_strain_rate",
106 1.0e7,
107 "Value of the reference macroscopic strain rate for the thermal "
108 "dislocation attraction, in 1/s.");
109 params.addParam<Real>("substructure_hardening_coefficient",
110 0.086,
111 "Value of the coefficient for the expanded Taylor hardening substructure "
112 "hardening relation, set to recover the Taylor hardening law for low "
113 "substructure densities, k_{sub}, dimensionless.");
114 params.addParam<std::vector<Real>>(
115 "Hall_Petch_like_constant_per_mode",
116 std::vector<Real>(),
117 "The microstructure Hall-Petch like coefficient value used to capture the influence of grain "
118 "size on slip system resistance in the absence of twin dislocations, dimensionless");
119 params.addRequiredRangeCheckedParam<Real>(
120 "grain_size", "grain_size>0", "Value of the crystal grain size, in mm");
121
122 params.addParam<MaterialPropertyName>(
123 "total_twin_volume_fraction",
124 "Total twin volume fraction, if twinning is considered in the simulation");
125
126 return params;
127}
128
132
133 _temperature(coupledValue("temperature")),
134 _forest_dislocation_density(
135 declareProperty<std::vector<Real>>(_base_name + "forest_dislocation_density")),
136 _forest_dislocation_density_old(
137 getMaterialPropertyOld<std::vector<Real>>(_base_name + "forest_dislocation_density")),
138 _forest_dislocation_increment(
139 declareProperty<std::vector<Real>>(_base_name + "forest_dislocation_increment")),
140 _forest_dislocations_removed_increment(
141 declareProperty<std::vector<Real>>(_base_name + "_forest_dislocations_removed_increment")),
142 _initial_forest_dislocation_density(getParam<Real>("initial_forest_dislocation_density")),
143 _total_substructure_density(declareProperty<Real>(_base_name + "total_substructure_density")),
144 _total_substructure_density_old(
145 getMaterialPropertyOld<Real>(_base_name + "total_substructure_density")),
146 _total_substructure_density_increment(
147 declareProperty<Real>(_base_name + "total_substructure_increment")),
148 _initial_substructure_density(getParam<Real>("initial_substructure_density")),
149
150 _slip_system_modes(getParam<unsigned int>("slip_system_modes")),
151 _number_slip_systems_per_mode(
152 getParam<std::vector<unsigned int>>("number_slip_systems_per_mode")),
153 _lattice_friction(getParam<std::vector<Real>>("lattice_friction_per_mode")),
154
155 _reference_strain_rate(getParam<Real>("gamma_o")),
156 _rate_sensitivity_exponent(getParam<Real>("strain_rate_sensitivity_exponent")),
157
158 _burgers_vector(getParam<std::vector<Real>>("burgers_vector_per_mode")),
159 _slip_generation_coefficient(
160 getParam<std::vector<Real>>("slip_generation_coefficient_per_mode")),
161 _slip_activation_energy(
162 getParam<std::vector<Real>>("normalized_slip_activiation_energy_per_mode")),
163 _proportionality_factor(
164 getParam<std::vector<Real>>("slip_energy_proportionality_factor_per_mode")),
165 _forest_interaction_coefficient(getParam<Real>("forest_interaction_parameter")),
166 _boltzman_constant(getParam<Real>("Boltzman_constant")),
167 _macro_applied_strain_rate(getParam<Real>("applied_strain_rate")),
168 _macro_reference_strain_rate(getParam<Real>("reference_macroscopic_strain_rate")),
169
170 _shear_modulus(getParam<std::vector<Real>>("effective_shear_modulus_per_mode")),
171 _substructure_rate_coefficient(
172 getParam<std::vector<Real>>("substructure_rate_coefficient_per_mode")),
173 _substructure_hardening_coefficient(getParam<Real>("substructure_hardening_coefficient")),
174 _hallpetch_like_coefficient(getParam<std::vector<Real>>("Hall_Petch_like_constant_per_mode")),
175 _grain_size(getParam<Real>("grain_size")),
176
177 // Twinning contributions, if used
178 _include_twinning_in_Lp(parameters.isParamValid("total_twin_volume_fraction")),
179 _twin_volume_fraction_total(_include_twinning_in_Lp
180 ? &getMaterialPropertyOld<Real>("total_twin_volume_fraction")
181 : nullptr)
182{
183 // resize local caching vectors used for substepping
188
189 // check that the number of slip systems is equal to the sum of the types of slip system
191 paramError("number_slip_systems_per_mode",
192 "The size the number of slip systems per mode is not equal to the number of slip "
193 "system types.");
194
195 // Check that the number of slip mode dependent parameters is given matches the number of slip
196 // modes
198 paramError("burgers_vector_per_mode",
199 "Please ensure that the size of burgers_vector_per_mode equals the value supplied "
200 "for slip_system_modes");
201
203 paramError("slip_generation_coefficient_per_mode",
204 "Please ensure that the size of slip_generation_coefficient_per_mode equals the "
205 "value supplied for slip_system_modes");
206
208 paramError("normalized_slip_activiation_energy_per_mode",
209 "Please ensure that the size of normalized_slip_activiation_energy_per_mode equals "
210 "the value supplied for slip_system_modes");
211
213 paramError("slip_energy_proportionality_factor_per_mode",
214 "Please ensure that the size of slip_energy_proportionality_factor_per_mode equals "
215 "the value supplied for slip_system_modes");
216
218 paramError("effective_shear_modulus_per_mode",
219 "Please ensure that the size of effective_shear_modulus_per_mode equals the "
220 "value supplied for slip_system_modes");
221
223 paramError("substructure_rate_coefficient_per_mode",
224 "Please ensure that the size of substructure_rate_coefficient_per_mode equals the "
225 "value supplied for slip_system_modes");
226
228 paramError("Hall_Petch_like_constant_per_mode",
229 "Please ensure that the size of Hall_Petch_like_constant_per_mode equals the value "
230 "supplied for slip_system_modes");
231
233 paramError("lattice_friction_per_mode",
234 "Please ensure that the size of lattice_friction_per_mode equals the value supplied "
235 "for slip_system_modes");
236
237 unsigned int sum = 0;
238 for (const auto i : make_range(_slip_system_modes))
240 if (sum != _number_slip_systems)
241 paramError("slip_system_modes",
242 "The number of slip systems and the sum of the slip systems in each of the slip "
243 "system modes are not equal");
244}
245
246void
248{
250
251 // Resize constitutive-model specific material properties
253
254 // Set constitutive-model specific initial values from parameters
255 const Real forest_density_per_system = _initial_forest_dislocation_density / _number_slip_systems;
256 for (const auto i : make_range(_number_slip_systems))
257 {
258 _forest_dislocation_density[_qp][i] = forest_density_per_system;
260 _slip_increment[_qp][i] = 0.0;
261 }
262
263 // Set initial resistance from lattice friction, which is type dependent
264 DenseVector<Real> lattice_resistance(_number_slip_systems, 0.0);
265 unsigned int slip_mode = 0;
266 unsigned int counter_adjustment = 0;
267 for (const auto i : make_range(_number_slip_systems))
268 {
269 if ((i - counter_adjustment) < _number_slip_systems_per_mode[slip_mode])
270 lattice_resistance(i) = _lattice_friction[slip_mode];
271 else
272 {
273 counter_adjustment += _number_slip_systems_per_mode[slip_mode];
274 ++slip_mode;
275 lattice_resistance(i) = _lattice_friction[slip_mode];
276 }
277 }
278
279 calculateGrainSizeResistance(lattice_resistance);
280
281 for (const auto i : make_range(_number_slip_systems))
282 _slip_resistance[_qp][i] = lattice_resistance(i);
283
286}
287
288void
297
298void
300 DenseVector<Real> & lattice_resistance)
301{
302 unsigned int slip_mode = 0;
303 unsigned int counter_adjustment = 0;
304 for (const auto i : make_range(_number_slip_systems))
305 {
306 Real hallpetch_burgers_term = 0.0;
307 if ((i - counter_adjustment) < _number_slip_systems_per_mode[slip_mode])
308 hallpetch_burgers_term = _hallpetch_like_coefficient[slip_mode] * _shear_modulus[slip_mode] *
309 std::sqrt(_burgers_vector[slip_mode]);
310 else
311 {
312 counter_adjustment += _number_slip_systems_per_mode[slip_mode];
313 ++slip_mode;
314 hallpetch_burgers_term = _hallpetch_like_coefficient[slip_mode] * _shear_modulus[slip_mode] *
315 std::sqrt(_burgers_vector[slip_mode]);
316 }
317 lattice_resistance(i) += hallpetch_burgers_term / std::sqrt(_grain_size);
318 }
319}
320
321void
333
334void
341
342bool
344{
345 for (const auto i : make_range(_number_slip_systems))
346 {
347 Real driving_force = std::abs(_tau[_qp][i] / _slip_resistance[_qp][i]);
348 if (driving_force < _zero_tol)
349 _slip_increment[_qp][i] = 0.0;
350 else
351 {
352 _slip_increment[_qp][i] =
353 _reference_strain_rate * std::pow(driving_force, (1.0 / _rate_sensitivity_exponent));
354 if (_tau[_qp][i] < 0.0)
355 _slip_increment[_qp][i] *= -1.0;
356 }
357 if (std::abs(_slip_increment[_qp][i]) * _substep_dt > _slip_incr_tol)
358 {
360 mooseWarning("Maximum allowable slip increment exceeded ",
361 std::abs(_slip_increment[_qp][i]) * _substep_dt);
362 return false;
363 }
364 }
365 return true;
366}
367
368void
370 RankTwoTensor & equivalent_slip_increment)
371{
373 {
374 for (const auto i : make_range(_number_slip_systems))
375 equivalent_slip_increment += (1.0 - (*_twin_volume_fraction_total)[_qp]) *
377 }
378 else // if no twinning volume fraction material property supplied, use base class
380}
381
382void
384 std::vector<Real> & dslip_dtau)
385{
386 for (const auto i : make_range(_number_slip_systems))
387 {
388 if (MooseUtils::absoluteFuzzyEqual(_tau[_qp][i], 0.0))
389 dslip_dtau[i] = 0.0;
390 else
391 dslip_dtau[i] = _slip_increment[_qp][i] /
393 }
394}
395
396bool
411
412bool
414{
415 bool converged_flag = true;
416
417 Real substructure_diff =
419
420 if (_previous_substep_total_substructure_density < _zero_tol && substructure_diff > _zero_tol)
421 converged_flag = false;
424 converged_flag = false;
425
426 return converged_flag;
427}
428
429void
436
437void
444
445void
451
452void
454{
455 DenseVector<Real> k1_term(_number_slip_systems);
456 DenseVector<Real> k2_term(_number_slip_systems);
457
458 const Real temperature_strain_term =
461
462 // solve first for the coefficients, which depend on the given slip mode
463 unsigned int slip_mode = 0;
464 unsigned int counter_adjustment = 0;
465 for (const auto i : make_range(_number_slip_systems))
466 {
467 Real interaction_term = 0.0;
468 Real volume_term = 0.0;
469 if ((i - counter_adjustment) < _number_slip_systems_per_mode[slip_mode])
470 {
471 k1_term(i) = _slip_generation_coefficient[slip_mode];
472 interaction_term = _forest_interaction_coefficient * _burgers_vector[slip_mode] /
473 _slip_activation_energy[slip_mode];
474 volume_term =
475 _proportionality_factor[slip_mode] * Utility::pow<3>(_burgers_vector[slip_mode]);
476 }
477 else
478 {
479 counter_adjustment += _number_slip_systems_per_mode[slip_mode];
480 ++slip_mode;
481
482 k1_term(i) = _slip_generation_coefficient[slip_mode];
483 interaction_term = _forest_interaction_coefficient * _burgers_vector[slip_mode] /
484 _slip_activation_energy[slip_mode];
485 volume_term =
486 _proportionality_factor[slip_mode] * Utility::pow<3>(_burgers_vector[slip_mode]);
487 }
488 k2_term(i) = interaction_term * k1_term(i) * (1.0 - temperature_strain_term / volume_term);
489 }
490
491 for (const auto i : make_range(_number_slip_systems))
492 {
493 const Real abs_slip_increment = std::abs(_slip_increment[_qp][i]);
494 Real generated_dislocations = 0.0;
495
496 if (_forest_dislocation_density[_qp][i] > 0.0)
497 generated_dislocations = k1_term(i) * std::sqrt(_forest_dislocation_density[_qp][i]) *
498 abs_slip_increment * _substep_dt;
499
501 k2_term(i) * _forest_dislocation_density[_qp][i] * abs_slip_increment * _substep_dt;
502
504 generated_dislocations - _forest_dislocations_removed_increment[_qp][i];
505 }
506}
507
508void
510{
511 // calculate the generation coefficient, which depends on the slip mode
512 DenseVector<Real> generation_term(_number_slip_systems, 0.0);
513
514 unsigned int slip_mode = 0;
515 unsigned int counter_adjustment = 0;
516 for (const auto i : make_range(_number_slip_systems))
517 {
518 if ((i - counter_adjustment) < _number_slip_systems_per_mode[slip_mode])
519 generation_term(i) = _substructure_rate_coefficient[slip_mode] * _burgers_vector[slip_mode];
520 else
521 {
522 counter_adjustment += _number_slip_systems_per_mode[slip_mode];
523 ++slip_mode;
524 generation_term(i) = _substructure_rate_coefficient[slip_mode] * _burgers_vector[slip_mode];
525 }
526 }
527
528 // perform the summing calculation over all slip systems
530 const Real sqrt_substructures = std::sqrt(_total_substructure_density[_qp]);
531
532 for (const auto i : make_range(_number_slip_systems))
534 generation_term(i) * sqrt_substructures * _forest_dislocations_removed_increment[_qp][i];
535}
536
537void
539{
540 DenseVector<Real> forest_hardening(_number_slip_systems, 0.0);
541 DenseVector<Real> substructure_hardening(_number_slip_systems, 0.0);
542 DenseVector<Real> lattice_resistance(_number_slip_systems, 0.0);
543
544 unsigned int slip_mode = 0;
545 unsigned int counter_adjustment = 0;
546 for (const auto i : make_range(_number_slip_systems))
547 {
548 Real burgers = 0.0;
549 Real shear_modulus = 0.0;
550 if ((i - counter_adjustment) < _number_slip_systems_per_mode[slip_mode])
551 {
552 burgers = _burgers_vector[slip_mode];
553 shear_modulus = _shear_modulus[slip_mode];
554 lattice_resistance(i) = _lattice_friction[slip_mode];
555 }
556 else
557 {
558 counter_adjustment += _number_slip_systems_per_mode[slip_mode];
559 ++slip_mode;
560 burgers = _burgers_vector[slip_mode];
561 shear_modulus = _shear_modulus[slip_mode];
562 lattice_resistance(i) = _lattice_friction[slip_mode];
563 }
564
565 // forest dislocation hardening
566 if (_forest_dislocation_density[_qp][i] > 0.0)
567 forest_hardening(i) = _forest_interaction_coefficient * burgers * shear_modulus *
568 std::sqrt(_forest_dislocation_density[_qp][i]);
569 else
570 forest_hardening(i) = 0.0;
571
572 // substructure dislocation hardening
574 {
575 const Real spacing_term = burgers * std::sqrt(_total_substructure_density[_qp]);
576 substructure_hardening(i) = _substructure_hardening_coefficient * shear_modulus *
577 spacing_term * std::log10(1.0 / spacing_term);
578 }
579 else
580 substructure_hardening(i) = 0.0;
581 }
582
583 calculateGrainSizeResistance(lattice_resistance);
584
585 // have the constant initial value, while it's not a function of temperature, sum
586 for (const auto i : make_range(_number_slip_systems))
588 lattice_resistance(i) + forest_hardening(i) + substructure_hardening(i);
589}
590
591bool
599
600bool
617
618bool
registerMooseObject("SolidMechanicsApp", CrystalPlasticityHCPDislocationSlipBeyerleinUpdate)
void ErrorVector unsigned int
CrystalPlasticityHCPDislocationSlipBeyerleinUpdate computes the dislocation forest evolution for the ...
virtual void calculateSlipResistance() override
Calculates the sum of the contribution of the initial slip resistance and the forest and substructure...
const std::vector< Real > _substructure_rate_coefficient
Substructure (debris) dislocation generation rate coefficient.
bool calculateSubstructureDislocationDensity()
Calculates the current value of the incremented substructure dislocations.
const std::vector< Real > _shear_modulus
Forest hardening coefficients, Eqns. 3.19.
const std::vector< Real > _burgers_vector
Coefficients for slip dislocation evolution, Eqns 3.6 and 3.8.
virtual void setSubstepConstitutiveVariableValues() override
This virtual method is called to set the current constitutive internal state variable value to that o...
std::vector< Real > _previous_substep_slip_resistance
Stores the slip system resistance, dislocation densities from the previous substep.
std::vector< Real > _slip_resistance_before_update
Caching current slip resistance, dislocation density values before final update.
virtual void updateSubstepConstitutiveVariableValues() override
Stores the current value of the constitutive internal state variables into a separate material proper...
const Real _substructure_hardening_coefficient
Substructure (debris) Taylor law hardening coefficient.
virtual void setInitialConstitutiveVariableValues() override
This virtual method is called to set the constitutive internal state variables current value and the ...
virtual bool areConstitutiveStateVariablesConverged() override
Determines if the state variables, e.g.
virtual void calculateConstitutiveSlipDerivative(std::vector< Real > &dslip_dtau) override
This virtual method is called to find the derivative of the slip increment with respect to the applie...
virtual bool calculateSlipRate() override
This virtual method is called to calculate the slip system slip increment based on the constitutive m...
virtual void calculateGrainSizeResistance(DenseVector< Real > &lattice_resistance)
Calculates the influence of the grain size on the slip system resistance, in the case where twin boun...
MaterialProperty< Real > & _total_substructure_density
Sessile substructure dislocation density across all slip systems.
virtual void initQpStatefulProperties() override
initializes the stateful properties such as PK2 stress, resolved shear stress, plastic deformation gr...
const Real _grain_size
Value of the grain size, either average or associated with a particular block.
const unsigned int _slip_system_modes
The number of the different slip systems types to consider in the simulation, which is dependent on t...
const MaterialProperty< Real > *const _twin_volume_fraction_total
User-defined material property name for the total volume fraction of twins in a twinning propagation ...
const bool _include_twinning_in_Lp
Flag to include the total twin volume fraction in the plastic velocity gradient calculation,...
bool calculateForestDislocationDensity()
Calculate the current value of the incremented forest dislocation density on each slip system.
const Real _reference_strain_rate
Power-law slip rate calculation coefficients, from Wang et al IJP 49(2013)36-52.
bool isSubstructureDislocationDensityConverged()
Determine if the substructure (debris) dislocation density values have converged.
virtual bool updateStateVariables() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
virtual void calculateStateVariableEvolutionRateComponent() override
Following the constitutive model for HCP structures proposed by Beyerlein and Tome.
void calculateSubstructureDensityEvolutionIncrement()
Computes the evolution of the total substructure dislocations, using the nomenclature introduced in C...
virtual void cacheStateVariablesBeforeUpdate() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
const std::vector< Real > _hallpetch_like_coefficient
Microscale Hall-Petch like coefficient, used to capture the effect of the grain size on the slip syst...
void calculateForestDislocationEvolutionIncrement()
Computes the evolution increment of the forest (glide) dislocations on each slip system,...
const std::vector< unsigned int > _number_slip_systems_per_mode
The number of slip systems per type, stored as a vector.
MaterialProperty< std::vector< Real > > & _forest_dislocation_density
Slip forest dislocation densities.
virtual void calculateEquivalentSlipIncrement(RankTwoTensor &)
const unsigned int _number_slip_systems
Maximum number of active slip systems for the crystalline material being modeled.
MaterialProperty< std::vector< Real > > & _slip_resistance
Slip system resistance.
Real _rel_state_var_tol
Internal variable update equation tolerance.
const bool _print_convergence_message
Flag to print to console warning messages on stress, constitutive model convergence.
MaterialProperty< std::vector< Real > > & _slip_increment
Current slip increment material property.
Real _substep_dt
Substepping time step value used within the inheriting constitutive models.
virtual void initQpStatefulProperties() override
initializes the stateful properties such as PK2 stress, resolved shear stress, plastic deformation gr...
Real _zero_tol
Residual tolerance when variable value is zero. Default 1e-12.
MaterialProperty< std::vector< RankTwoTensor > > & _flow_direction
Real _resistance_tol
Tolerance for change in slip system resistance over an increment.
MaterialProperty< std::vector< Real > > & _tau
Resolved shear stress on each slip system.
virtual bool isConstitutiveStateVariableConverged(const std::vector< Real > &current_var, const std::vector< Real > &var_before_update, const std::vector< Real > &previous_substep_var, const Real &tolerance)
Check if a typical state variable, e.g.
const MaterialProperty< std::vector< Real > > & _slip_resistance_old
void suppressParameter(const std::string &name)
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, 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 addCoupledVar(const std::string &name, const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
unsigned int _qp
virtual void resize(const std::size_t size) override final
void paramError(const std::string &param, Args... args) const
void mooseWarning(Args &&... args) const