35 _temperature(_temperature_buffer),
36 _use_old_temperature(this->template getParam<bool>(
"use_old_temperature")),
37 _temperature_old(this->_fe_problem.isTransient() ? this->coupledValueOld(
"temperature")
39 _deigenstrain_dT((is_ad || this->isCoupledConstant(
"temperature"))
42 _eigenstrain_name, this->coupledName(
"temperature"))),
43 _stress_free_temperature(this->coupledValue(
"stress_free_temperature")),
44 _temperature_prop(this->template coupledGenericValue<is_ad>(
"temperature")),
45 _mean_thermal_expansion_coefficient(
46 this->isParamValid(
"mean_thermal_expansion_coefficient_name")
47 ? &this->template declareProperty<Real>(this->template getParam<MaterialPropertyName>(
48 "mean_thermal_expansion_coefficient_name"))
53 "use_old_temperature",
54 "The old state of the temperature variable is only available in a transient simulation.");
93 _eigenstrain[_qp].zero();
94 const auto thermal_strain = computeThermalStrain();
98 _eigenstrain[_qp].addIa(thermal_strain);
99 if (_mean_thermal_expansion_coefficient)
101 if (_temperature[_qp] == _stress_free_temperature[_qp])
102 (*_mean_thermal_expansion_coefficient)[_qp] = 0.0;
105 thermal_strain / (_temperature[_qp] - _stress_free_temperature[_qp]));
110 _eigenstrain[_qp].addIa(thermal_strain.value());
111 if (_mean_thermal_expansion_coefficient)
113 if (_temperature[_qp].value() == _stress_free_temperature[_qp])
114 (*_mean_thermal_expansion_coefficient)[_qp] = 0.0;
116 (*_mean_thermal_expansion_coefficient)[_qp] =
117 thermal_strain.value() / (_temperature[_qp].value() - _stress_free_temperature[_qp]);
119 if (_deigenstrain_dT)
121 (*_deigenstrain_dT)[_qp].zero();
122 if (!_use_old_temperature)
123 (*_deigenstrain_dT)[_qp].addIa(thermal_strain.derivatives());