https://mooseframework.inl.gov
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");
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 
131  : CrystalPlasticityStressUpdateBase(parameters),
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
197  if (_burgers_vector.size() != _slip_system_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 
217  if (_shear_modulus.size() != _slip_system_modes)
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 
246 void
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 
288 void
290 {
292 
293  // Resize non-stateful material properties
296 }
297 
298 void
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 
321 void
323 {
326 
329 
332 }
333 
334 void
336 {
340 }
341 
342 bool
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] =
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 
368 void
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 
382 void
384  std::vector<Real> & dslip_dtau)
385 {
386  for (const auto i : make_range(_number_slip_systems))
387  {
389  dslip_dtau[i] = 0.0;
390  else
391  dslip_dtau[i] = _slip_increment[_qp][i] /
392  (_rate_sensitivity_exponent * std::abs(_tau[_qp][i])) * _substep_dt;
393  }
394 }
395 
396 bool
398 {
408  return true;
409  return false;
410 }
411 
412 bool
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 
429 void
431 {
435 }
436 
437 void
439 {
443 }
444 
445 void
447 {
450 }
451 
452 void
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 
508 void
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 
537 void
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
573  if (_total_substructure_density[_qp] > 0.0)
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))
587  _slip_resistance[_qp][i] =
588  lattice_resistance(i) + forest_hardening(i) + substructure_hardening(i);
589 }
590 
591 bool
593 {
595  return true;
596  else
597  return false;
598 }
599 
600 bool
602 {
603  for (const auto i : make_range(_number_slip_systems))
604  {
608  else
611 
612  if (_forest_dislocation_density[_qp][i] < 0.0)
613  return false;
614  }
615  return true;
616 }
617 
618 bool
620 {
624  else
627 
628  if (_total_substructure_density[_qp] < 0.0)
629  return false;
630 
631  return true;
632 }
MaterialProperty< Real > & _total_substructure_density
Sessile substructure dislocation density across all slip systems.
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...
virtual bool areConstitutiveStateVariablesConverged() override
Determines if the state variables, e.g.
bool calculateSubstructureDislocationDensity()
Calculates the current value of the incremented substructure dislocations.
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
registerMooseObject("SolidMechanicsApp", CrystalPlasticityHCPDislocationSlipBeyerleinUpdate)
virtual bool updateStateVariables() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
bool calculateForestDislocationDensity()
Calculate the current value of the incremented forest dislocation density on each slip system...
virtual bool calculateSlipRate() override
This virtual method is called to calculate the slip system slip increment based on the constitutive m...
const std::vector< Real > _shear_modulus
Forest hardening coefficients, Eqns. 3.19.
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
virtual void updateSubstepConstitutiveVariableValues() override
Stores the current value of the constitutive internal state variables into a separate material proper...
virtual void initQpStatefulProperties() override
initializes the stateful properties such as PK2 stress, resolved shear stress, plastic deformation gr...
const unsigned int _slip_system_modes
The number of the different slip systems types to consider in the simulation, which is dependent on t...
virtual void calculateEquivalentSlipIncrement(RankTwoTensor &)
MaterialProperty< std::vector< Real > > & _slip_increment
Current slip increment material property.
T & set(const std::string &name, bool quiet_mode=false)
MaterialProperty< std::vector< Real > > & _slip_resistance
Slip system resistance.
const std::vector< Real > _burgers_vector
Coefficients for slip dislocation evolution, Eqns 3.6 and 3.8.
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...
const Real _reference_strain_rate
Power-law slip rate calculation coefficients, from Wang et al IJP 49(2013)36-52.
void mooseWarning(Args &&... args) const
virtual void resize(const std::size_t size) override final
virtual void initQpStatefulProperties() override
initializes the stateful properties such as PK2 stress, resolved shear stress, plastic deformation gr...
void suppressParameter(const std::string &name)
Real _substep_dt
Substepping time step value used within the inheriting constitutive models.
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...
unsigned int _qp
std::vector< Real > _previous_substep_slip_resistance
Stores the slip system resistance, dislocation densities from the previous substep.
const unsigned int _number_slip_systems
Maximum number of active slip systems for the crystalline material being modeled. ...
Real _zero_tol
Residual tolerance when variable value is zero. Default 1e-12.
const MaterialProperty< std::vector< Real > > & _slip_resistance_old
const std::vector< unsigned int > _number_slip_systems_per_mode
The number of slip systems per type, stored as a vector.
MaterialProperty< std::vector< RankTwoTensor > > & _flow_direction
Real _rel_state_var_tol
Internal variable update equation tolerance.
virtual void setSubstepConstitutiveVariableValues() override
This virtual method is called to set the current constitutive internal state variable value to that o...
void paramError(const std::string &param, Args... args) const
CrystalPlasticityHCPDislocationSlipBeyerleinUpdate computes the dislocation forest evolution for the ...
void addCoupledVar(const std::string &name, const std::string &doc_string)
std::vector< Real > _slip_resistance_before_update
Caching current slip resistance, dislocation density values before final update.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void calculateSubstructureDensityEvolutionIncrement()
Computes the evolution of the total substructure dislocations, using the nomenclature introduced in C...
virtual void setInitialConstitutiveVariableValues() override
This virtual method is called to set the constitutive internal state variables current value and the ...
MaterialProperty< std::vector< Real > > & _tau
Resolved shear stress on each slip system.
const Real _grain_size
Value of the grain size, either average or associated with a particular block.
IntRange< T > make_range(T beg, T end)
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 bool _print_convergence_message
Flag to print to console warning messages on stress, constitutive model convergence.
void calculateForestDislocationEvolutionIncrement()
Computes the evolution increment of the forest (glide) dislocations on each slip system, from equation 3.6 in Beyerlein and Tome IJP 24 (2008) 5, 867-895, and using the increment approach shown in Ardeljan et al.
virtual void calculateStateVariableEvolutionRateComponent() override
Following the constitutive model for HCP structures proposed by Beyerlein and Tome.
void addClassDescription(const std::string &doc_string)
virtual void cacheStateVariablesBeforeUpdate() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
const Real _substructure_hardening_coefficient
Substructure (debris) Taylor law hardening coefficient.
virtual void calculateSlipResistance() override
Calculates the sum of the contribution of the initial slip resistance and the forest and substructure...
Real _resistance_tol
Tolerance for change in slip system resistance over an increment.
const bool _include_twinning_in_Lp
Flag to include the total twin volume fraction in the plastic velocity gradient calculation, per Kalidindi IJP (2001).
MooseUnits pow(const MooseUnits &, int)
const std::vector< Real > _substructure_rate_coefficient
Substructure (debris) dislocation generation rate coefficient.
void ErrorVector unsigned int
MaterialProperty< std::vector< Real > > & _forest_dislocation_density
Slip forest dislocation densities.
bool isSubstructureDislocationDensityConverged()
Determine if the substructure (debris) dislocation density values have converged. ...