11#include "libmesh/int_range.h"
19 params.
addClassDescription(
"Two-term dislocation slip model for hexagonal close packed crystals "
20 "from Beyerline and Tome");
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");
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.");
47 "lattice_friction_per_mode",
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.");
53 "effective_shear_modulus_per_mode",
55 "Effective isotropic shear modulus value, mu, in MPa. The order "
56 "must be consistent with the number of slip systems per type vector.");
59 "burgers_vector_per_mode",
61 "Value of the Burgers vector, b, for each type of the slip system, units of mm. The order "
63 "be consistent with the number of slip systems per type vector.");
65 "slip_generation_coefficient_per_mode",
67 "Slip dislocation generation coefficient value for each type of the slip system, k_1, units "
69 "must be consistent with the number of slip systems per type vector.");
71 "normalized_slip_activiation_energy_per_mode",
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 "
77 "slip_energy_proportionality_factor_per_mode",
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 "
84 "substructure_rate_coefficient_per_mode",
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.");
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",
94 "The strain rate sensitivity exponent for the power law relationship of "
95 "resolved shear stress");
96 params.
addParam<Real>(
"forest_interaction_parameter",
98 "Forest dislocation interaction parameter, Chi, dimensionless.");
99 params.
addParam<Real>(
"Boltzman_constant", 1.38065e-20,
"Boltzman constant, in MPa-mm^3/K");
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",
107 "Value of the reference macroscopic strain rate for the thermal "
108 "dislocation attraction, in 1/s.");
109 params.
addParam<Real>(
"substructure_hardening_coefficient",
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.");
115 "Hall_Petch_like_constant_per_mode",
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");
122 params.
addParam<MaterialPropertyName>(
123 "total_twin_volume_fraction",
124 "Total twin volume fraction, if twinning is considered in the simulation");
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")),
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")),
155 _reference_strain_rate(getParam<Real>(
"gamma_o")),
156 _rate_sensitivity_exponent(getParam<Real>(
"strain_rate_sensitivity_exponent")),
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")),
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")),
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")
192 "The size the number of slip systems per mode is not equal to the number of slip "
199 "Please ensure that the size of burgers_vector_per_mode equals the value supplied "
200 "for slip_system_modes");
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");
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");
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");
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");
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");
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");
234 "Please ensure that the size of lattice_friction_per_mode equals the value supplied "
235 "for slip_system_modes");
237 unsigned int sum = 0;
242 "The number of slip systems and the sum of the slip systems in each of the slip "
243 "system modes are not equal");
265 unsigned int slip_mode = 0;
266 unsigned int counter_adjustment = 0;
300 DenseVector<Real> & lattice_resistance)
302 unsigned int slip_mode = 0;
303 unsigned int counter_adjustment = 0;
306 Real hallpetch_burgers_term = 0.0;
317 lattice_resistance(i) += hallpetch_burgers_term / std::sqrt(
_grain_size);
360 mooseWarning(
"Maximum allowable slip increment exceeded ",
384 std::vector<Real> & dslip_dtau)
388 if (MooseUtils::absoluteFuzzyEqual(
_tau[
_qp][i], 0.0))
415 bool converged_flag =
true;
417 Real substructure_diff =
420 if (_previous_substep_total_substructure_density < _zero_tol && substructure_diff >
_zero_tol)
421 converged_flag =
false;
424 converged_flag =
false;
426 return converged_flag;
458 const Real temperature_strain_term =
463 unsigned int slip_mode = 0;
464 unsigned int counter_adjustment = 0;
467 Real interaction_term = 0.0;
468 Real volume_term = 0.0;
488 k2_term(i) = interaction_term * k1_term(i) * (1.0 - temperature_strain_term / volume_term);
494 Real generated_dislocations = 0.0;
514 unsigned int slip_mode = 0;
515 unsigned int counter_adjustment = 0;
544 unsigned int slip_mode = 0;
545 unsigned int counter_adjustment = 0;
549 Real shear_modulus = 0.0;
570 forest_hardening(i) = 0.0;
577 spacing_term * std::log10(1.0 / spacing_term);
580 substructure_hardening(i) = 0.0;
588 lattice_resistance(i) + forest_hardening(i) + substructure_hardening(i);
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.
virtual void calculateEquivalentSlipIncrement(RankTwoTensor &) override
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...
MaterialProperty< std::vector< Real > > & _forest_dislocation_increment
std::vector< Real > _previous_substep_slip_resistance
Stores the slip system resistance, dislocation densities from the previous substep.
const MaterialProperty< Real > & _total_substructure_density_old
const std::vector< Real > _slip_activation_energy
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.
const VariableValue & _temperature
Coupled temperature variable.
const Real _boltzman_constant
virtual void setInitialConstitutiveVariableValues() override
This virtual method is called to set the constitutive internal state variables current value and the ...
std::vector< Real > _previous_substep_forest_dislocations
CrystalPlasticityHCPDislocationSlipBeyerleinUpdate(const InputParameters ¶meters)
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...
Real _previous_substep_total_substructure_density
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< std::vector< Real > > & _forest_dislocations_removed_increment
const Real _forest_interaction_coefficient
const MaterialProperty< std::vector< Real > > & _forest_dislocation_density_old
const Real _rate_sensitivity_exponent
const Real _initial_substructure_density
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 Real _initial_forest_dislocation_density
const Real _macro_applied_strain_rate
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 std::vector< Real > _slip_generation_coefficient
const std::vector< Real > _lattice_friction
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 Real _macro_reference_strain_rate
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.
static InputParameters validParams()
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.
MaterialProperty< Real > & _total_substructure_density_increment
const std::vector< Real > _proportionality_factor
virtual void setMaterialVectorSize() override
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.
std::vector< Real > _forest_dislocations_before_update
MaterialProperty< std::vector< Real > > & _forest_dislocation_density
Slip forest dislocation densities.
Real _total_substructure_density_before_update
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.
virtual void setMaterialVectorSize()
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.
Real _slip_incr_tol
Slip increment tolerance.
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.
static InputParameters validParams()
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 > ¤t_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
virtual void resize(const std::size_t size) override final
void paramError(const std::string ¶m, Args... args) const
void mooseWarning(Args &&... args) const