# Copyright 2019 TerraPower, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Inconel X750
"""
import numpy
from armi.utils.units import getTc
from armi.materials.material import Material
[docs]class InconelX750(Material):
name = "InconelX750"
propertyValidTemperature = {
"heat capacity": ((-18.0, 1093.0), "C"),
"linear expansion": ((21.1, 982.2), "C"),
"linear expansion percent": ((21.1, 982.2), "C"),
"thermal conductivity": ((-156.7, 871.1), "C"),
}
references = {
"mass fractions": "http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf",
"density": "http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf",
"thermalConductivity": "http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf",
"specific heat": "http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf",
"linearExpansionPercent": "http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf",
"linearExpansion": "http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf",
}
def __init__(self):
Material.__init__(self)
self.p.refTempK = 294.15
self.p.refDens = 8.28 # g/cc
# Only density measurement presented in the reference.
# Presumed to be performed at 21C since this was the reference temperature for linear expansion measurements.
[docs] def setDefaultMassFracs(self):
massFracs = {
"NI": 0.7180,
"CR": 0.1550,
"FE": 0.0700,
"TI": 0.0250,
"AL27": 0.0070,
"NB93": 0.0095,
"MN55": 0.0050,
"SI": 0.0025,
"S": 0.0001,
"CU": 0.0025,
"C": 0.0004,
"CO59": 0.0050,
}
for element, massFrac in massFracs.items():
self.setMassFrac(element, massFrac)
[docs] def polyfitThermalConductivity(self, power=2):
r"""
Calculates the coefficients of a polynomial fit for thermalConductivity.
Based on data from http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf
Fits a polynomial to the data set and returns the coefficients.
Parameters
----------
power : int, optional
power of the polynomial fit equation
Returns
-------
list of length 'power' containing the polynomial fit coefficients for thermal conductivity.
"""
Tc = [
-156.7,
-128.9,
-73.3,
21.1,
93.3,
204.4,
315.6,
426.7,
537.8,
648.9,
760.0,
871.1,
]
k = [
9.66,
10.10,
10.67,
11.97,
12.84,
14.13,
15.72,
17.31,
18.89,
20.62,
22.21,
23.65,
]
return numpy.polyfit(numpy.array(Tc), numpy.array(k), power).tolist()
[docs] def thermalConductivity(self, Tk=None, Tc=None):
r"""
Returns the thermal conductivity of InconelX750.
Parameters
----------
Tk : float, optional
Temperature in Kelvin.
Tc : float, optional
Temperature in degrees Celsius.
Returns
-------
thermalCond : float
thermal conductivity in W/m/C
"""
Tc = getTc(Tc, Tk)
self.checkPropertyTempRange("thermal conductivity", Tc)
thermalCond = 1.4835e-6 * Tc ** 2 + 1.2668e-2 * Tc + 11.632
return thermalCond # W/m-C
[docs] def polyfitHeatCapacity(self, power=3):
r"""
Calculates the coefficients of a polynomial fit for heatCapacity.
Based on data from http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf
Fits a polynomial to the data set and returns the coefficients.
Parameters
----------
power : int, optional
power of the polynomial fit equation
Returns
-------
list of length 'power' containing the polynomial fit coefficients for heat capacity.
"""
Tc = [21.1, 93.3, 204.4, 315.6, 426.7, 537.8, 648.9, 760.0, 871.1]
cp = [431.2, 456.4, 485.7, 502.4, 523.4, 544.3, 573.6, 632.2, 715.9]
return numpy.polyfit(numpy.array(Tc), numpy.array(cp), power).tolist()
[docs] def heatCapacity(self, Tk=None, Tc=None):
r"""
Returns the specific heat capacity of InconelX750.
Parameters
----------
Tk : float, optional
Temperature in Kelvin.
Tc : float, optional
Temperature in degrees Celsius.
Returns
-------
heatCapacity : float
heat capacity in J/kg/C
"""
Tc = getTc(Tc, Tk)
self.checkPropertyTempRange("heat capacity", Tc)
heatCapacity = (
9.2261e-7 * Tc ** 3 - 9.6368e-4 * Tc ** 2 + 4.7778e-1 * Tc + 420.55
)
return heatCapacity # J/kg-C
[docs] def polyfitLinearExpansionPercent(self, power=2):
r"""
Calculates the coefficients of a polynomial fit for linearExpansionPercent.
Based on data from http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf
Uses mean CTE values to find percent thermal strain values. Fits a polynomial
to the data set and returns the coefficients.
Parameters
----------
power : int, optional
power of the polynomial fit equation
Returns
-------
list of length 'power' containing the polynomial fit coefficients for linearExpansionPercent
"""
refTempC = getTc(None, Tk=self.p.refTempK)
Tc = [93.3, 204.4, 315.6, 426.7, 537.8, 648.9, 760.0, 871.1, 982.2]
alpha_mean = [
1.260e-05,
1.296e-05,
1.350e-05,
1.404e-05,
1.458e-05,
1.512e-05,
1.584e-05,
1.674e-05,
1.764e-05,
]
linExpPercent = [0.0]
for i, alpha in enumerate(alpha_mean):
linExpPercentVal = 100.0 * alpha * (Tc[i] - refTempC)
linExpPercent.append(linExpPercentVal)
Tc.insert(0, refTempC)
return numpy.polyfit(
numpy.array(Tc), numpy.array(linExpPercent), power
).tolist()
[docs] def linearExpansionPercent(self, Tk=None, Tc=None):
r"""
Returns percent linear expansion of InconelX750.
Parameters
----------
Tk : float
temperature in (K)
Tc : float
Temperature in (C)
Returns
-------
linExpPercent in %-m/m/C
"""
Tc = getTc(Tc, Tk)
self.checkPropertyTempRange("linear expansion percent", Tc)
linExpPercent = 6.8378e-7 * Tc ** 2 + 1.056e-3 * Tc - 1.3161e-2
return linExpPercent
[docs] def linearExpansion(self, Tk=None, Tc=None):
r"""
From http://www.specialmetals.com/documents/Inconel%20alloy%20X-750.pdf
Using the correlation for linearExpansionPercent, the 2nd order polynomial is divided by 100 to convert
from percent strain to strain, then differentiated with respect to temperature to find the correlation
for instantaneous linear expansion.
i.e. for a linearExpansionPercent correlation of a*Tc**2 + b*Tc + c, the linearExpansion correlation is 2*a/100*Tc + b/100
2*(6.8378e-7/100.0)*Tc + 1.056e-3/100.0
Parameters
----------
Tk : float
temperature in (K)
Tc : float
Temperature in (C)
Returns
-------
linExp in m/m/C
"""
Tc = getTc(Tc, Tk)
self.checkPropertyTempRange("linear expansion", Tc)
linExp = 1.36756e-8 * Tc + 1.056e-5
return linExp