Note
Go to the end to download the full example code
Computing Component Volume Fractions on a Block with Automatic Thermal Expansion
Given an Block
, compute the component volume fractions. Assess
the change in volume of these components within the block as the temperatures of the fuel and
structure components are uniformly increased.
Note: Thermal expansion is automatically considered with material data defined within
materials
.
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 600 0.23641
<Circle: clad> 450 0.0189566
<Hexagon: duct> 400 0.0764606
<DerivedShape: coolant> 400 0.553986
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 400.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 400 0.233214
<Circle: clad> 400 0.0189313
<Hexagon: duct> 400 0.0764606
<DerivedShape: coolant> 400 0.557207
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 500.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 500 0.234575
<Circle: clad> 500 0.0189824
<Hexagon: duct> 500 0.0766673
<DerivedShape: coolant> 400 0.555588
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 600.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 600 0.23641
<Circle: clad> 600 0.0190348
<Hexagon: duct> 600 0.0768788
<DerivedShape: coolant> 400 0.55349
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 700.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 700 0.238847
<Circle: clad> 700 0.0190871
<Hexagon: duct> 700 0.07709
<DerivedShape: coolant> 400 0.550789
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 800.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 800 0.242019
<Circle: clad> 800 0.0191381
<Hexagon: duct> 800 0.0772959
<DerivedShape: coolant> 400 0.54736
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 900.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 900 0.246067
<Circle: clad> 900 0.0191865
<Hexagon: duct> 900 0.0774913
<DerivedShape: coolant> 400 0.543069
<Hexagon: intercoolant> 400 0.114187
Updating fuel/structure components to 1200.0 °C
Component Temperature, °C Volume Fraction
----------------------- ----------------- -----------------
<Circle: fuel> 1200 0.264995
<Circle: clad> 1200 0.0193035
<Hexagon: duct> 1200 0.0779642
<DerivedShape: coolant> 400 0.52355
<Hexagon: intercoolant> 400 0.114187
# ruff: noqa: E402
import collections
import matplotlib.pyplot as plt
from armi import configure
configure(permissive=True)
from armi.reactor.flags import Flags
from armi.reactor.tests.test_blocks import buildSimpleFuelBlock
from armi.utils import tabulate
def writeInitialVolumeFractions(b):
"""Write out the initial temperatures and component volume fractions."""
headers = ["Component", "Temperature, °C", "Volume Fraction"]
data = [(c, c.temperatureInC, volFrac) for c, volFrac in b.getVolumeFractions()]
print(tabulate.tabulate(data=data, headers=headers) + "\n")
def plotVolFracsWithComponentTemps(b, uniformTemps):
"""Plot the percent change in vol. fractions as fuel/structure temperatures are uniformly increased."""
# Perform uniform temperature modifications of the fuel and structural
# components.
componentsToModify = b.getComponents([Flags.FUEL, Flags.CLAD, Flags.DUCT])
initialVols = {}
relativeVols = collections.defaultdict(list)
for tempInC in uniformTemps:
print(f"Updating fuel/structure components to {tempInC} °C")
# Modify the fuel/structure components to the
# same uniform temperature
for c in componentsToModify:
c.setTemperature(tempInC)
writeInitialVolumeFractions(b)
# Iterate over all components and calculate the mass
# and volume fractions
for c in b:
# Set the initial volume fractions at the first uniform temperature
if tempInC == uniformTempsInC[0]:
initialVols[c] = c.getVolume()
relativeVols[c].append(
(c.getVolume() - initialVols[c]) / initialVols[c] * 100.0
)
fig, ax = plt.subplots()
for c in b.getComponents():
ax.plot(uniformTempsInC, relativeVols[c], label=c.name)
ax.set_title("Component Volume Fractions with Automatic Thermal Expansion")
ax.set_ylabel(f"% Change in Volume from {uniformTempsInC[0]} °C")
ax.set_xlabel("Uniform Fuel/Structure Temperature, °C")
ax.legend()
ax.grid()
plt.show()
uniformTempsInC = [400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1200.0]
b = buildSimpleFuelBlock()
writeInitialVolumeFractions(b)
plotVolFracsWithComponentTemps(b, uniformTempsInC)
Total running time of the script: ( 0 minutes 0.282 seconds)