www.mooseframework.org
ComputeMeanThermalExpansionEigenstrainBase.C
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
8 #include "Function.h"
9 
10 template <>
11 InputParameters
13 {
14  InputParameters params = validParams<ComputeThermalExpansionEigenstrainBase>();
15  params.addClassDescription("Base class for models that compute eigenstrain due to mean"
16  "thermal expansion as a function of temperature");
17  return params;
18 }
19 
21  const InputParameters & parameters)
23 {
24 }
25 
26 void
28  Real & instantaneous_cte)
29 {
30  const Real small = libMesh::TOLERANCE;
31 
32  const Real reference_temperature = referenceTemperature();
33  const Real & current_temp = _temperature[_qp];
34  const Real current_alphabar = meanThermalExpansionCoefficient(current_temp);
35  const Real thexp_current_temp = current_alphabar * (current_temp - reference_temperature);
36 
37  // Mean linear thermal expansion coefficient relative to the reference temperature
38  // evaluated at stress_free_temperature. This is
39  // \f$\bar{\alpha} = (\delta L(T_{sf}) / L) / (T_{sf} - T_{ref})\f$
40  // where \f$T_sf\f$ is the stress-free temperature and \f$T_{ref}\f$ is the reference temperature.
41  const Real alphabar_stress_free_temperature =
43  // Thermal expansion relative to the reference temperature evaluated at stress_free_temperature
44  // \f$(\delta L(T_sf) / L)\f$, where \f$T_sf\f$ is the stress-free temperature.
45  const Real thexp_stress_free_temperature =
46  alphabar_stress_free_temperature * (_stress_free_temperature[_qp] - referenceTemperature());
47 
48  // Per M. Niffenegger and K. Reichlin (2012), thermal_strain should be divided
49  // by (1.0 + thexp_stress_free_temperature) to account for the ratio of
50  // the length at the stress-free temperature to the length at the reference
51  // temperature. It can be neglected because it is very close to 1,
52  // but we include it for completeness here.
53 
54  thermal_strain =
55  (thexp_current_temp - thexp_stress_free_temperature) / (1.0 + thexp_stress_free_temperature);
56 
57  const Real dalphabar_dT = meanThermalExpansionCoefficientDerivative(current_temp);
58  const Real numerator = dalphabar_dT * (current_temp - reference_temperature) + current_alphabar;
59  const Real denominator =
60  1.0 +
61  alphabar_stress_free_temperature * (_stress_free_temperature[_qp] - reference_temperature);
62  if (denominator < small)
63  mooseError("Denominator too small in thermal strain calculation");
64  instantaneous_cte = numerator / denominator;
65 }
InputParameters validParams< ComputeMeanThermalExpansionEigenstrainBase >()
virtual Real meanThermalExpansionCoefficientDerivative(const Real temperature)=0
ComputeThermalExpansionEigenstrainBase is a base class for all models that compute eigenstrains due t...
virtual Real meanThermalExpansionCoefficient(const Real temperature)=0
ComputeMeanThermalExpansionEigenstrainBase(const InputParameters &parameters)
InputParameters validParams< ComputeThermalExpansionEigenstrainBase >()
virtual void computeThermalStrain(Real &thermal_strain, Real &instantaneous_cte) override