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 Volume Fractions with Automatic Thermal Expansion
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.248 seconds)

Gallery generated by Sphinx-Gallery