11 #include "libmesh/int_range.h" 20 "Twinning propagation model based on Kalidindi's treatment of twinning in a FCC material");
22 "initial_total_twin_volume_fraction",
24 "The initial sum of the twin volume fraction across all twin systems in the crystal, if " 25 "any. This value is distributed evenly across all twin systems in the crystal.");
27 "twin_reference_strain_rate",
29 "twin_reference_strain_rate>0",
30 "The reference strain rate, gamma_o, for the power law plastic slip law " 31 "due to twin propagation.");
33 "twin_strain_rate_sensitivity_exponent",
35 "twin_strain_rate_sensitivity_exponent>0",
36 "The strain rate sensitivity exponent for twin propagation power law " 37 "strain rate calculation");
39 "characteristic_twin_shear",
41 "characteristic_twin_shear>0",
42 "The amount of shear that is associated with a twin in this cubic structure");
44 "initial_twin_lattice_friction",
46 "initial_twin_lattice_friction>=0",
47 "The initial value of the lattice friction for twin propogation, often " 48 "calculated as a fraction of the Peierls strength");
50 "non_coplanar_coefficient_twin_hardening",
52 "non_coplanar_coefficient_twin_hardening>=0",
53 "The factor to apply to the hardening of non-coplanar twin systems " 54 "strength as a function of the volume fraction of twins");
56 "coplanar_coefficient_twin_hardening",
58 "coplanar_coefficient_twin_hardening>=0",
59 "Hardening coefficient for coplanar twin systems strength as a function of " 60 "the volume fraction of twins");
62 "non_coplanar_twin_hardening_exponent",
64 "non_coplanar_twin_hardening_exponent>=0",
65 "Parameter used to increase the hardening of non-coplanar twin systems such that the " 66 "propagation of twins on conplanar systems is favored at early deformation stages.");
68 "upper_limit_twin_volume_fraction",
70 "upper_limit_twin_volume_fraction>0&upper_limit_twin_volume_fraction<=1",
71 "The maximumum amount of twinning volume fraction allowed");
80 _total_twin_volume_fraction(declareProperty<
Real>(_base_name +
"total_volume_fraction_twins")),
81 _total_twin_volume_fraction_old(
82 getMaterialPropertyOld<
Real>(_base_name +
"total_volume_fraction_twins")),
83 _initial_total_twin_volume_fraction(getParam<
Real>(
"initial_total_twin_volume_fraction")),
84 _twin_volume_fraction(
85 declareProperty<
std::vector<
Real>>(_base_name +
"twin_system_volume_fraction")),
86 _twin_volume_fraction_old(
87 getMaterialPropertyOld<
std::vector<
Real>>(_base_name +
"twin_system_volume_fraction")),
88 _twin_volume_fraction_increment(
89 declareProperty<
std::vector<
Real>>(_base_name +
"twin_system_volume_fraction_increment")),
90 _reference_strain_rate(getParam<
Real>(
"twin_reference_strain_rate")),
91 _rate_sensitivity_exponent(getParam<
Real>(
"twin_strain_rate_sensitivity_exponent")),
92 _characteristic_twin_shear(getParam<
Real>(
"characteristic_twin_shear")),
93 _twin_initial_lattice_friction(getParam<
Real>(
"initial_twin_lattice_friction")),
94 _non_coplanar_coefficient_twin_hardening(
95 getParam<
Real>(
"non_coplanar_coefficient_twin_hardening")),
96 _coplanar_coefficient_twin_hardening(getParam<
Real>(
"coplanar_coefficient_twin_hardening")),
97 _noncoplanar_exponent(getParam<
Real>(
"non_coplanar_twin_hardening_exponent")),
98 _limit_twin_volume_fraction(getParam<
Real>(
"upper_limit_twin_volume_fraction")),
101 _previous_substep_twin_resistance(_number_slip_systems, 0.0),
102 _previous_substep_twin_volume_fraction(_number_slip_systems, 0.0),
103 _twin_resistance_before_update(_number_slip_systems, 0.0),
104 _twin_volume_fraction_before_update(_number_slip_systems, 0.0)
118 const Real twin_volume_fraction_per_system =
157 Real total_twin_volume_fraction = 0.0;
178 mooseWarning(
"Maximum allowable plastic slip increment due to twinning exceeded the " 179 "user-defined tolerance on twin system ",
183 " when the increment tolerance is set at ",
198 std::vector<Real> & dslip_dtau)
200 Real total_twin_volume_fraction = 0.0;
206 std::fill(dslip_dtau.begin(), dslip_dtau.end(), 0.0);
283 mooseWarning(
"A negative twin volume fraction value was computed: ",
297 mooseWarning(
"Maximum allowable twin volume fraction limit exceeded with a value of ",
299 " when the limit is set as ",
301 " with a user-set tolerance value of ",
320 twin_hardening_increment(i) = 0.0;
335 twin_hardening_increment(i) +=
346 if (twin_hardening_increment(i) <= 0.0)
virtual void setMaterialVectorSize()
const Real _coplanar_coefficient_twin_hardening
CrystalPlasticityTwinningKalidindiUpdate(const InputParameters ¶meters)
virtual void initQpStatefulProperties() override
initializes the stateful properties such as PK2 stress, resolved shear stress, plastic deformation gr...
bool calculateTwinVolumeFraction()
Calculate the current value of the twin volume fraction from the incremented twin volume fraction on ...
const Real _non_coplanar_coefficient_twin_hardening
MaterialProperty< std::vector< Real > > & _slip_increment
Current slip increment material property.
const Real _limit_twin_volume_fraction
const Real _initial_total_twin_volume_fraction
virtual void initQpStatefulProperties() override
initializes the stateful properties such as PK2 stress, resolved shear stress, plastic deformation gr...
std::vector< Real > _twin_volume_fraction_before_update
MaterialProperty< std::vector< Real > > & _slip_resistance
Slip system resistance.
static InputParameters validParams()
std::vector< Real > _previous_substep_twin_resistance
Stores the twin system resistance, twin volume fractions from the previous substep.
void mooseWarning(Args &&... args) const
virtual void cacheStateVariablesBeforeUpdate() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
virtual void resize(const std::size_t size) override final
Real _substep_dt
Substepping time step value used within the inheriting constitutive models.
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 Real _characteristic_twin_shear
Coefficients for twin dislocation propagation.
const MaterialProperty< std::vector< Real > > & _slip_resistance_old
CrystalPlasticityTwinningKalidindiUpdate uses the multiplicative decomposition of the deformation gra...
const Real _rate_sensitivity_exponent
void calculateTwinResistance()
Calculates the resistance to twin propagation, following Kalidindi IJP 17 (2001) 837-860 eqn 22...
const MaterialProperty< std::vector< Real > > & _twin_volume_fraction_old
Real _rel_state_var_tol
Internal variable update equation tolerance.
std::vector< Real > _twin_resistance_before_update
Caching current twin resistance, twin volume fractions values before final update.
virtual void setMaterialVectorSize() override
virtual void calculateStateVariableEvolutionRateComponent() override
Following the constitutive model contributions to plastic shear due to deformation twinning propagati...
virtual bool calculateSlipRate() override
Despite the misnomer which results from the inheriting class structure, Calculates the twin shear inc...
virtual void setInitialConstitutiveVariableValues() override
This virtual method is called to set the constitutive internal state variables current value and the ...
MaterialProperty< std::vector< Real > > & _twin_volume_fraction_increment
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool relativeFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
MaterialProperty< Real > & _total_twin_volume_fraction
Total volume fraction of twins across all twin systems.
MaterialProperty< std::vector< Real > > & _tau
Resolved shear stress on each slip system.
virtual void setSubstepConstitutiveVariableValues() override
This virtual method is called to set the current constitutive internal state variable value to that o...
IntRange< T > make_range(T beg, T end)
Real _slip_incr_tol
Slip increment tolerance.
std::vector< Real > _previous_substep_twin_volume_fraction
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.
virtual bool areConstitutiveStateVariablesConverged() override
Determines if all the state variables have converged.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
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 updateStateVariables() override
Finalizes the values of the state variables and slip system resistance for the current timestep after...
const Real _reference_strain_rate
Power-law slip rate calculation coefficients, from Kalidindi IJP 17 (2001), 837-860.
Real _resistance_tol
Tolerance for change in slip system resistance over an increment.
registerMooseObject("SolidMechanicsApp", CrystalPlasticityTwinningKalidindiUpdate)
MooseUnits pow(const MooseUnits &, int)
MaterialProperty< std::vector< Real > > & _twin_volume_fraction
Twin volume fraction per twin system.
static InputParameters validParams()
const Real _twin_initial_lattice_friction
virtual void updateSubstepConstitutiveVariableValues() override
Stores the current value of the constitutive internal state variables into a separate material proper...
std::vector< RealVectorValue > _slip_plane_normal
const Real _noncoplanar_exponent