45 _has_temp(this->isParamValid(
"temperature")),
46 _temperature(this->_has_temp ? this->coupledValue(
"temperature") : this->_zero),
47 _coefficient(this->template getParam<Real>(
"coefficient")),
48 _n_exponent(this->template getParam<Real>(
"n_exponent")),
49 _m_exponent(this->template getParam<Real>(
"m_exponent")),
50 _activation_energy(this->template getParam<Real>(
"activation_energy")),
51 _gas_constant(this->template getParam<Real>(
"gas_constant")),
52 _start_time(this->template getParam<Real>(
"start_time")),
55 _hill_constants(this->template getMaterialPropertyByName<
std::vector<Real>>(this->_base_name +
57 _hill_tensor(this->_use_transformation
58 ? &this->template getMaterialPropertyByName<DenseMatrix<Real>>(
59 this->_base_name +
"hill_tensor")
62 _elasticity_tensor_name(this->_base_name +
"elasticity_tensor"),
64 this->template getGenericMaterialProperty<
RankFourTensor, is_ad>(_elasticity_tensor_name)),
65 _anisotropic_elasticity(this->template getParam<bool>(
"anisotropic_elasticity")),
67 this->isParamValid(
"creep_prefactor") ? &this->getFunction(
"creep_prefactor") : nullptr)
70 this->paramError(
"start_time",
71 "Start time must be equal to or greater than the Executioner start_time if a "
72 "non-integer m_exponent is used");
149 computeQsigmaChanged(qsigma_changed, stress_new, delta_gamma, stress_changed);
151 ElasticityTensorTools::toMooseVoigtNotation<is_ad>(_C, _elasticity_tensor[_qp]);
152 const unsigned int dimension = _C.n();
155 for (
unsigned int index_i = 0; index_i < dimension; index_i++)
156 for (
unsigned int index_j = 0; index_j < dimension; index_j++)
159 d_stress_d_inelasticStrainIncrement(index_i, index_j) =
162 d_stress_d_inelasticStrainIncrement(index_i, index_j) =
167 const Real & F = _hill_constants[_qp][0];
168 const Real & G = _hill_constants[_qp][1];
169 const Real &
H = _hill_constants[_qp][2];
170 const Real & L = _hill_constants[_qp][3];
171 const Real &
M = _hill_constants[_qp][4];
172 const Real & N = _hill_constants[_qp][5];
175 for (
unsigned int index_k = 0; index_k < 6; index_k++)
177 d_qsigma_d_inelasticStrainIncrement(index_k) =
178 F * (stress_changed(1, 1) - stress_changed(2, 2)) *
179 (d_stress_d_inelasticStrainIncrement(1, index_k) -
180 d_stress_d_inelasticStrainIncrement(2, index_k)) +
181 G * (stress_changed(2, 2) - stress_changed(0, 0)) *
182 (d_stress_d_inelasticStrainIncrement(2, index_k) -
183 d_stress_d_inelasticStrainIncrement(0, index_k)) +
184 H * (stress_changed(0, 0) - stress_changed(1, 1)) *
185 (d_stress_d_inelasticStrainIncrement(0, index_k) -
186 d_stress_d_inelasticStrainIncrement(1, index_k)) +
187 2.0 * L * stress_changed(1, 2) * d_stress_d_inelasticStrainIncrement(4, index_k) +
188 2.0 *
M * stress_changed(2, 0) * d_stress_d_inelasticStrainIncrement(5, index_k) +
189 2.0 * N * stress_changed(0, 1) * d_stress_d_inelasticStrainIncrement(3, index_k);
190 d_qsigma_d_inelasticStrainIncrement(index_k) /= qsigma_changed;
195 d_qsigma_d_sigma(0) = (
H * (stress_changed(0, 0) - stress_changed(1, 1)) -
196 G * (stress_changed(2, 2) - stress_changed(0, 0))) /
198 d_qsigma_d_sigma(1) = (F * (stress_changed(1, 1) - stress_changed(2, 2)) -
199 H * (stress_changed(0, 0) - stress_changed(1, 1))) /
201 d_qsigma_d_sigma(2) = (G * (stress_changed(2, 2) - stress_changed(0, 0)) -
202 F * (stress_changed(1, 1) - stress_changed(2, 2))) /
204 d_qsigma_d_sigma(3) = 2.0 * N * stress_changed(0, 1) / qsigma_changed;
205 d_qsigma_d_sigma(4) = 2.0 * L * stress_changed(1, 2) / qsigma_changed;
206 d_qsigma_d_sigma(5) = 2.0 *
M * stress_changed(0, 2) / qsigma_changed;
209 d_qsigma_d_inelasticStrainIncrement.dot(d_qsigma_d_sigma);
211 GenericReal<is_ad> creep_rate_derivative = _coefficient * d_qsigma_d_deltaGamma * _n_exponent *
212 pow(qsigma_changed, _n_exponent - 1.0) * _exponential *
215 if (_prefactor_function)
216 creep_rate_derivative *= _prefactor_function->value(_t, _q_point[_qp]);
218 return (creep_rate_derivative * _dt - 1.0);
232 if (!this->_use_transformation)
235 const Real & F = _hill_constants[_qp][0];
236 const Real & G = _hill_constants[_qp][1];
237 const Real &
H = _hill_constants[_qp][2];
238 const Real & L = _hill_constants[_qp][3];
239 const Real &
M = _hill_constants[_qp][4];
240 const Real & N = _hill_constants[_qp][5];
243 qsigma_square = F * (stress(1, 1) - stress(2, 2)) * (stress(1, 1) - stress(2, 2));
244 qsigma_square += G * (stress(2, 2) - stress(0, 0)) * (stress(2, 2) - stress(0, 0));
245 qsigma_square +=
H * (stress(0, 0) - stress(1, 1)) * (stress(0, 0) - stress(1, 1));
246 qsigma_square += 2 * L * stress(1, 2) * stress(1, 2);
247 qsigma_square += 2 *
M * stress(0, 2) * stress(0, 2);
248 qsigma_square += 2 * N * stress(0, 1) * stress(0, 1);
253 (*_hill_tensor)[_qp].vector_mult(Ms, stress_dev);
254 qsigma_square = Ms.dot(stress_dev);
257 if (qsigma_square == 0)
259 inelasticStrainIncrement.zero();
262 inelasticStrainIncrement, stress, stress_dev, delta_gamma);
264 this->_effective_inelastic_strain[_qp] = this->_effective_inelastic_strain_old[_qp];
272 if (!this->_use_transformation)
275 const Real & F = _hill_constants[_qp][0];
276 const Real & G = _hill_constants[_qp][1];
277 const Real &
H = _hill_constants[_qp][2];
278 const Real & L = _hill_constants[_qp][3];
279 const Real &
M = _hill_constants[_qp][4];
280 const Real & N = _hill_constants[_qp][5];
282 inelasticStrainIncrement(0, 0) =
283 prefactor * (
H * (stress(0, 0) - stress(1, 1)) - G * (stress(2, 2) - stress(0, 0)));
284 inelasticStrainIncrement(1, 1) =
285 prefactor * (F * (stress(1, 1) - stress(2, 2)) -
H * (stress(0, 0) - stress(1, 1)));
286 inelasticStrainIncrement(2, 2) =
287 prefactor * (G * (stress(2, 2) - stress(0, 0)) - F * (stress(1, 1) - stress(2, 2)));
289 inelasticStrainIncrement(0, 1) = inelasticStrainIncrement(1, 0) =
290 prefactor * 2.0 * N * stress(0, 1);
291 inelasticStrainIncrement(0, 2) = inelasticStrainIncrement(2, 0) =
292 prefactor * 2.0 *
M * stress(0, 2);
293 inelasticStrainIncrement(1, 2) = inelasticStrainIncrement(2, 1) =
294 prefactor * 2.0 * L * stress(1, 2);
300 (*_hill_tensor)[_qp].vector_mult(Ms, stress_dev);
302 for (
unsigned int i = 0; i < 6; i++)
303 inelastic_strain_increment(i) = Ms(i) * prefactor;
305 inelasticStrainIncrement(0, 0) = inelastic_strain_increment(0);
306 inelasticStrainIncrement(1, 1) = inelastic_strain_increment(1);
307 inelasticStrainIncrement(2, 2) = inelastic_strain_increment(2);
309 inelasticStrainIncrement(0, 1) = inelasticStrainIncrement(1, 0) = inelastic_strain_increment(3);
310 inelasticStrainIncrement(1, 2) = inelasticStrainIncrement(2, 1) = inelastic_strain_increment(4);
311 inelasticStrainIncrement(0, 2) = inelasticStrainIncrement(2, 0) = inelastic_strain_increment(5);
315 inelasticStrainIncrement, stress, stress_dev, delta_gamma);
317 this->_effective_inelastic_strain[_qp] = this->_effective_inelastic_strain_old[_qp] + delta_gamma;
364 const Real & F = _hill_constants[_qp][0];
365 const Real & G = _hill_constants[_qp][1];
366 const Real &
H = _hill_constants[_qp][2];
367 const Real & L = _hill_constants[_qp][3];
368 const Real &
M = _hill_constants[_qp][4];
369 const Real & N = _hill_constants[_qp][5];
371 if (!this->_use_transformation)
373 qsigma_square = F * (stress_new(1) - stress_new(2)) * (stress_new(1) - stress_new(2));
374 qsigma_square += G * (stress_new(2) - stress_new(0)) * (stress_new(2) - stress_new(0));
375 qsigma_square +=
H * (stress_new(0) - stress_new(1)) * (stress_new(0) - stress_new(1));
376 qsigma_square += 2 * L * stress_new(4) * stress_new(4);
377 qsigma_square += 2 *
M * stress_new(5) * stress_new(5);
378 qsigma_square += 2 * N * stress_new(3) * stress_new(3);
383 (*_hill_tensor)[_qp].vector_mult(Ms, stress_new);
384 qsigma_square = Ms.dot(stress_new);
389 if (!_anisotropic_elasticity)
390 qsigma_changed = qsigma - 1.5 * _two_shear_modulus * delta_gamma;
394 stress(0, 0) = stress_new(0);
395 stress(1, 1) = stress_new(1);
396 stress(2, 2) = stress_new(2);
397 stress(0, 1) = stress(1, 0) = stress_new(3);
398 stress(1, 2) = stress(2, 1) = stress_new(4);
399 stress(0, 2) = stress(2, 0) = stress_new(5);
402 b(0) =
H * (stress(0, 0) - stress(1, 1)) - G * (stress(2, 2) - stress(0, 0));
403 b(1) = F * (stress(1, 1) - stress(2, 2)) -
H * (stress(0, 0) - stress(1, 1));
404 b(2) = G * (stress(2, 2) - stress(0, 0)) - F * (stress(1, 1) - stress(2, 2));
405 b(3) = 2.0 * N * stress(0, 1);
406 b(4) = 2.0 * L * stress(1, 2);
407 b(5) = 2.0 *
M * stress(0, 2);
410 inelasticStrainIncrement(0, 0) = delta_gamma *
b(0) / qsigma;
411 inelasticStrainIncrement(1, 1) = delta_gamma *
b(1) / qsigma;
412 inelasticStrainIncrement(2, 2) = delta_gamma *
b(2) / qsigma;
413 inelasticStrainIncrement(0, 1) = inelasticStrainIncrement(1, 0) = delta_gamma *
b(3) / qsigma;
414 inelasticStrainIncrement(1, 2) = inelasticStrainIncrement(2, 1) = delta_gamma *
b(4) / qsigma;
415 inelasticStrainIncrement(0, 2) = inelasticStrainIncrement(2, 0) = delta_gamma *
b(5) / qsigma;
417 stress_changed = stress - _elasticity_tensor[_qp] * inelasticStrainIncrement;
420 qsigma_square_changed = F * (stress_changed(1, 1) - stress_changed(2, 2)) *
421 (stress_changed(1, 1) - stress_changed(2, 2));
422 qsigma_square_changed += G * (stress_changed(2, 2) - stress_changed(0, 0)) *
423 (stress_changed(2, 2) - stress_changed(0, 0));
424 qsigma_square_changed +=
H * (stress_changed(0, 0) - stress_changed(1, 1)) *
425 (stress_changed(0, 0) - stress_changed(1, 1));
426 qsigma_square_changed += 2 * L * stress_changed(1, 2) * stress_changed(1, 2);
427 qsigma_square_changed += 2 *
M * stress_changed(0, 2) * stress_changed(0, 2);
428 qsigma_square_changed += 2 * N * stress_changed(0, 1) * stress_changed(0, 1);
429 qsigma_changed = sqrt(qsigma_square_changed);