# 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.
"""Simple sodium material."""
from armi import runLog
from armi.materials import material
from armi.utils.units import getTc, getTk
[docs]class Sodium(material.Fluid):
"""
Simplified sodium material.
.. warning:: This is an academic-quality material. Bring in user-provided material
properties through plugins as necessary.
Most info from [ANL-RE-95-2]_
.. [ANL-RE-95-2] Fink, J.K., and Leibowitz, L. Thermodynamic and transport properties of sodium
liquid and vapor. United States: N. p., 1995. Web. doi:10.2172/94649.
https://www.osti.gov/biblio/94649-gXNdLI/webviewable/
"""
propertyValidTemperature = {
"density": ((97.85, 2230.55), "C"),
"enthalpy": ((371.0, 2000.0), "K"),
"thermal conductivity": ((3715, 1500), "K"),
}
[docs] def setDefaultMassFracs(self):
"""It's just sodium."""
self.setMassFrac("NA", 1.0)
self.refDens = 0.968
[docs] def pseudoDensity(self, Tk=None, Tc=None):
"""
Returns density of Sodium in g/cc.
This is from 1.3.1 in [ANL-RE-95-2]_.
Parameters
----------
Tk : float, optional
temperature in degrees Kelvin
Tc : float, optional
temperature in degrees Celsius
Returns
-------
density : float
mass density in g/cc
"""
Tc = getTc(Tc, Tk)
self.checkPropertyTempRange("density", Tc)
if (Tc is not None) and (Tc <= 97.72):
runLog.warning(
"Sodium frozen at Tc: {0}".format(Tc),
label="Sodium frozen at Tc={0}".format(Tc),
single=True,
)
critDens = 219 # critical density
f = 275.32 #
g = 511.58
h = 0.5
Tcrit = 2503.7 # critical temperature
return (
critDens
+ f * (1 - (Tc + 273.15) / Tcrit)
+ g * (1 - (Tc + 273.15) / Tcrit) ** h
) / 1000.0 # convert from kg/m^3 to g/cc.
[docs] def specificVolumeLiquid(self, Tk=None, Tc=None):
"""Returns the liquid specific volume in m^3/kg of this material given Tk in K or Tc in C."""
return 1 / (1000.0 * self.pseudoDensity(Tk, Tc))
[docs] def enthalpy(self, Tk=None, Tc=None):
"""
Return enthalpy in J/kg.
From [ANL-RE-95-2]_, Table 1.1-2.
"""
Tk = getTk(Tc, Tk)
self.checkPropertyTempRange("enthalpy", Tk)
enthalpy = (
-365.77
+ 1.6582 * Tk
- 4.2395e-4 * Tk**2
+ 1.4847e-7 * Tk**3
+ 2992.6 / Tk
)
enthalpy = enthalpy * 1000 # convert from kJ/kg to kJ/kg
return enthalpy
[docs] def thermalConductivity(self, Tk=None, Tc=None):
"""
Returns thermal conductivity of Sodium.
From [ANL-RE-95-2]_, Table 2.1-2
Parameters
----------
Tk : float, optional
temperature in degrees Kelvin
Tc : float, optional
temperature in degrees Celsius
Returns
-------
thermalConductivity : float
thermal conductivity of Sodium (W/m-K)
"""
Tk = getTk(Tc, Tk)
self.checkPropertyTempRange("thermal conductivity", Tk)
thermalConductivity = (
124.67 - 0.11381 * Tk + 5.5226e-5 * Tk**2 - 1.1842e-8 * Tk**3
)
return thermalConductivity