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");
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 ",
375 equivalent_slip_increment += (1.0 - (*_twin_volume_fraction_total)[
_qp]) *
384 std::vector<Real> & dslip_dtau)
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);
const MaterialProperty< Real > & _total_substructure_density_old
MaterialProperty< Real > & _total_substructure_density
Sessile substructure dislocation density across all slip systems.
static InputParameters validParams()
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.
MaterialProperty< std::vector< Real > > & _forest_dislocation_increment
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.
virtual void setMaterialVectorSize()
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
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 &)
const Real _initial_forest_dislocation_density
MaterialProperty< std::vector< Real > > & _slip_increment
Current slip increment material property.
const Real _forest_interaction_coefficient
const Real _rate_sensitivity_exponent
const Real _macro_reference_strain_rate
const Real _initial_substructure_density
const std::vector< Real > _lattice_friction
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.
Real _previous_substep_total_substructure_density
Real _total_substructure_density_before_update
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...
MaterialProperty< std::vector< Real > > & _forest_dislocations_removed_increment
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...
std::vector< Real > _previous_substep_forest_dislocations
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...
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 Real _macro_applied_strain_rate
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...
const std::vector< Real > _slip_generation_coefficient
void paramError(const std::string ¶m, Args... args) const
const std::vector< Real > _slip_activation_energy
std::vector< Real > _forest_dislocations_before_update
CrystalPlasticityHCPDislocationSlipBeyerleinUpdate computes the dislocation forest evolution for the ...
const VariableValue & _temperature
Coupled temperature variable.
std::vector< Real > _slip_resistance_before_update
Caching current slip resistance, dislocation density values before final update.
const MaterialProperty< std::vector< Real > > & _forest_dislocation_density_old
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 ...
CrystalPlasticityHCPDislocationSlipBeyerleinUpdate(const InputParameters ¶meters)
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)
Real _slip_incr_tol
Slip increment tolerance.
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 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.
virtual void calculateEquivalentSlipIncrement(RankTwoTensor &) override
virtual void cacheStateVariablesBeforeUpdate() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
const Real _substructure_hardening_coefficient
Substructure (debris) Taylor law hardening coefficient.
const Real _boltzman_constant
virtual void calculateSlipResistance() override
Calculates the sum of the contribution of the initial slip resistance and the forest and substructure...
MaterialProperty< Real > & _total_substructure_density_increment
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.
static InputParameters validParams()
void ErrorVector unsigned int
virtual void setMaterialVectorSize() override
const std::vector< Real > _proportionality_factor
MaterialProperty< std::vector< Real > > & _forest_dislocation_density
Slip forest dislocation densities.
bool isSubstructureDislocationDensityConverged()
Determine if the substructure (debris) dislocation density values have converged. ...