import numpy as np
import matplotlib
matplotlib.rc('font', family='serif', size=16)
import matplotlib.pyplot as plt
from IPython.display import *
#import bright
#from bright.fast_reactor1g import FastReactor1G
#fr = FastReactor1G(bright.bright_conf.BRIGHT_DATA + '/FR.h5')
Well, we can ask wikipedia...
Component | Recipes | Essential | Transport |
---|---|---|---|
Front End: | Recipes | Physics Models | Physics Models |
Reactor: | Recipes | Rapid Burnup Code (Bright) | Neutron Transport |
Repository: | Curve Fits | Rapid Code (Cyder) | Neutron Transport |
However, this requires an entirely new spectrum of tools.
Essential physics models remain physically valid under perturbations in the locality of the region on which they are defined and do not compute extraneous parameters.
This is a form of model reduction.
They allow us to run physically meaningful (if not economically, etc.) fuel cycle simulations.
And not just a few of them, but many.
And when we have many similar things we use (fancy?!) statistics to analyze the ensemble.
Name | Symbol | Units |
---|---|---|
Fluence | $F = \int_0^t \phi dt^\prime = \phi \int_0^t dt^\prime = \phi \times t \cdot \frac{24 \cdot 3600 \cdot 10^3}{10^{24}}$ | [n/kb] |
Nuclide Subscript | $i$ (or $j$) | [1/kg$_i$] |
Region Superscript | $Q$ | [unitless] |
Mass Weights | $m_i^Q = \frac{N_i^Q}{N_{\mbox{IHM}}} = \frac{n_i^Q A_i}{A_{\mbox{IHM}}} \cdot \frac{\rho^Q\cdot\mbox{MW}^F}{\rho^F\cdot\mbox{MW}^Q} \frac{V^Q}{V^F}$ | [kg$_i^Q$/kgIHM] |
Burnup | $\mbox{BU}(F) = \sum_i m_i^F \cdot \mbox{BU}_i(F)$ | [MWd/kgIHM] |
Prod & Des Rates | $p_i(F), d_i(F)$ | [n/s/flux/kg$_i$] |
Transmutation Matrix | $T_{ij}(F)$ | [kg$_j$/kg$_i$] |
Multiplication Factor | $k(F) = \frac{P(F)}{D(F)}$ | [unitless] |
Starting with ORIGEN generated fluence-dependent, nuclide specific data, we know:
(a) neutron production & destruction rates, | (b) burnups, | (c) transmutation matrices. |
t = np.array("31.0 62.0 93.0 124.0 155.0 186.0 217.0 248.0 279.0 310.0 341.0 372.0 403.0 434.0 465.0 496.0 527.0 558.0 589.0 620.0 651.0 682.0 713.0 744.0 775.0 806.0 837.0 868.0 899.0 930.0 961.0 992.0 1023.0 1054.0 1085.0 1116.0 1147.0 1178.0 1209.0 1240.0 1271.0 1302.0 1333.0 1364.0 1395.0 1426.0 1457.0 1488.0 1519.0 1550.0 1581.0 1612.0 1643.0 1674.0 1705.0 1736.0 1767.0 1798.0 1829.0 1860.0 1891.0 1922.0 1953.0 1984.0 2015.0 2046.0 2077.0 2108.0 2139.0 2170.0 2201.0 2232.0 2263.0 2294.0 2325.0 2356.0 2387.0 2418.0 2449.0 2480.0 2511.0 2542.0 2573.0 2604.0 2635.0 2666.0 2697.0 2728.0 2759.0 2790.0 2821.0 2852.0 2883.0 2914.0 2945.0 2976.0 3007.0 3038.0 3069.0 3100.0 3131.0 3162.0 3193.0 3224.0 3255.0 3286.0 3317.0 3348.0 3379.0 3410.0 3441.0 3472.0 3503.0 3534.0 3565.0 3596.0 3627.0 3658.0 3689.0 3720.0 3751.0 3782.0 3813.0 3844.0 3875.0 3906.0 3937.0 3968.0 3999.0 4030.0 4061.0 4092.0 4123.0 4154.0 4185.0 4216.0 4247.0 4278.0 4309.0 4340.0 4371.0 4402.0 4433.0".split(), float)
pu239burn = np.array("8.72e+000 1.74e+001 2.59e+001 3.44e+001 4.27e+001 5.10e+001 5.92e+001 6.73e+001 7.54e+001 8.33e+001 9.12e+001 9.90e+001 1.07e+002 1.14e+002 1.22e+002 1.29e+002 1.37e+002 1.44e+002 1.51e+002 1.59e+002 1.66e+002 1.73e+002 1.80e+002 1.87e+002 1.94e+002 2.00e+002 2.07e+002 2.14e+002 2.20e+002 2.27e+002 2.33e+002 2.40e+002 2.46e+002 2.52e+002 2.59e+002 2.65e+002 2.71e+002 2.77e+002 2.83e+002 2.89e+002 2.95e+002 3.00e+002 3.06e+002 3.12e+002 3.17e+002 3.23e+002 3.29e+002 3.34e+002 3.39e+002 3.45e+002 3.50e+002 3.55e+002 3.61e+002 3.66e+002 3.71e+002 3.76e+002 3.81e+002 3.86e+002 3.91e+002 3.96e+002 4.00e+002 4.05e+002 4.10e+002 4.15e+002 4.19e+002 4.24e+002 4.28e+002 4.33e+002 4.37e+002 4.42e+002 4.46e+002 4.50e+002 4.55e+002 4.59e+002 4.63e+002 4.67e+002 4.71e+002 4.76e+002 4.80e+002 4.84e+002 4.88e+002 4.92e+002 4.95e+002 4.99e+002 5.03e+002 5.07e+002 5.11e+002 5.14e+002 5.18e+002 5.22e+002 5.25e+002 5.29e+002 5.32e+002 5.36e+002 5.39e+002 5.43e+002 5.46e+002 5.50e+002 5.53e+002 5.56e+002 5.60e+002 5.63e+002 5.66e+002 5.69e+002 5.73e+002 5.76e+002 5.79e+002 5.82e+002 5.85e+002 5.88e+002 5.91e+002 5.94e+002 5.97e+002 6.00e+002 6.03e+002 6.06e+002 6.08e+002 6.11e+002 6.14e+002 6.17e+002 6.19e+002 6.22e+002 6.25e+002 6.28e+002 6.30e+002 6.33e+002 6.35e+002 6.38e+002 6.40e+002 6.43e+002 6.46e+002 6.48e+002 6.50e+002 6.53e+002 6.55e+002 6.58e+002 6.60e+002 6.62e+002 6.65e+002 6.67e+002 6.69e+002 6.72e+002 6.74e+002".split(), float)
pu239prod = np.array("1.22E+01 1.21E+01 1.20E+01 1.18E+01 1.17E+01 1.16E+01 1.15E+01 1.14E+01 1.13E+01 1.11E+01 1.10E+01 1.09E+01 1.08E+01 1.07E+01 1.06E+01 1.05E+01 1.04E+01 1.03E+01 1.02E+01 1.01E+01 9.98E+00 9.88E+00 9.79E+00 9.69E+00 9.59E+00 9.50E+00 9.41E+00 9.31E+00 9.22E+00 9.13E+00 9.04E+00 8.95E+00 8.86E+00 8.78E+00 8.69E+00 8.61E+00 8.52E+00 8.44E+00 8.36E+00 8.28E+00 8.19E+00 8.11E+00 8.04E+00 7.96E+00 7.88E+00 7.80E+00 7.73E+00 7.65E+00 7.58E+00 7.51E+00 7.43E+00 7.36E+00 7.29E+00 7.22E+00 7.15E+00 7.08E+00 7.01E+00 6.94E+00 6.88E+00 6.81E+00 6.75E+00 6.68E+00 6.62E+00 6.55E+00 6.49E+00 6.43E+00 6.37E+00 6.31E+00 6.25E+00 6.19E+00 6.13E+00 6.07E+00 6.01E+00 5.96E+00 5.90E+00 5.84E+00 5.79E+00 5.73E+00 5.68E+00 5.62E+00 5.57E+00 5.52E+00 5.47E+00 5.42E+00 5.36E+00 5.31E+00 5.26E+00 5.21E+00 5.17E+00 5.12E+00 5.07E+00 5.02E+00 4.97E+00 4.93E+00 4.88E+00 4.84E+00 4.79E+00 4.75E+00 4.70E+00 4.66E+00 4.62E+00 4.57E+00 4.53E+00 4.49E+00 4.45E+00 4.41E+00 4.37E+00 4.33E+00 4.29E+00 4.25E+00 4.21E+00 4.17E+00 4.13E+00 4.09E+00 4.05E+00 4.02E+00 3.98E+00 3.94E+00 3.91E+00 3.87E+00 3.84E+00 3.80E+00 3.77E+00 3.73E+00 3.70E+00 3.67E+00 3.63E+00 3.60E+00 3.57E+00 3.54E+00 3.50E+00 3.47E+00 3.44E+00 3.41E+00 3.38E+00 3.35E+00 3.32E+00 3.29E+00 3.26E+00 3.23E+00 3.20E+00 3.17E+00 3.15E+00".split(), float)
pu239dest = np.array("4.91E+00 4.87E+00 4.84E+00 4.80E+00 4.76E+00 4.72E+00 4.68E+00 4.65E+00 4.61E+00 4.57E+00 4.54E+00 4.50E+00 4.47E+00 4.43E+00 4.40E+00 4.37E+00 4.33E+00 4.30E+00 4.27E+00 4.23E+00 4.20E+00 4.17E+00 4.14E+00 4.11E+00 4.07E+00 4.04E+00 4.01E+00 3.98E+00 3.95E+00 3.92E+00 3.89E+00 3.87E+00 3.84E+00 3.81E+00 3.78E+00 3.75E+00 3.72E+00 3.70E+00 3.67E+00 3.64E+00 3.62E+00 3.59E+00 3.56E+00 3.54E+00 3.51E+00 3.49E+00 3.46E+00 3.44E+00 3.41E+00 3.39E+00 3.37E+00 3.34E+00 3.32E+00 3.30E+00 3.27E+00 3.25E+00 3.23E+00 3.21E+00 3.18E+00 3.16E+00 3.14E+00 3.12E+00 3.10E+00 3.08E+00 3.05E+00 3.03E+00 3.01E+00 2.99E+00 2.97E+00 2.95E+00 2.93E+00 2.91E+00 2.90E+00 2.88E+00 2.86E+00 2.84E+00 2.82E+00 2.80E+00 2.78E+00 2.77E+00 2.75E+00 2.73E+00 2.71E+00 2.70E+00 2.68E+00 2.66E+00 2.65E+00 2.63E+00 2.61E+00 2.60E+00 2.58E+00 2.56E+00 2.55E+00 2.53E+00 2.52E+00 2.50E+00 2.49E+00 2.47E+00 2.46E+00 2.44E+00 2.43E+00 2.41E+00 2.40E+00 2.38E+00 2.37E+00 2.36E+00 2.34E+00 2.33E+00 2.32E+00 2.30E+00 2.29E+00 2.28E+00 2.26E+00 2.25E+00 2.24E+00 2.23E+00 2.21E+00 2.20E+00 2.19E+00 2.18E+00 2.16E+00 2.15E+00 2.14E+00 2.13E+00 2.12E+00 2.11E+00 2.09E+00 2.08E+00 2.07E+00 2.06E+00 2.05E+00 2.04E+00 2.03E+00 2.02E+00 2.01E+00 2.00E+00 1.99E+00 1.98E+00 1.97E+00 1.96E+00 1.95E+00 1.94E+00 1.93E+00".split(), float)
u238burn = np.array("2.59e-001 5.26e-001 8.03e-001 1.09e+000 1.38e+000 1.69e+000 2.00e+000 2.33e+000 2.66e+000 3.00e+000 3.35e+000 3.70e+000 4.07e+000 4.44e+000 4.82e+000 5.21e+000 5.61e+000 6.02e+000 6.43e+000 6.85e+000 7.28e+000 7.72e+000 8.16e+000 8.62e+000 9.08e+000 9.54e+000 1.00e+001 1.05e+001 1.10e+001 1.15e+001 1.20e+001 1.25e+001 1.30e+001 1.35e+001 1.40e+001 1.46e+001 1.51e+001 1.57e+001 1.62e+001 1.68e+001 1.73e+001 1.79e+001 1.85e+001 1.91e+001 1.96e+001 2.02e+001 2.08e+001 2.14e+001 2.21e+001 2.27e+001 2.33e+001 2.39e+001 2.45e+001 2.52e+001 2.58e+001 2.65e+001 2.71e+001 2.78e+001 2.84e+001 2.91e+001 2.98e+001 3.04e+001 3.11e+001 3.18e+001 3.25e+001 3.32e+001 3.39e+001 3.46e+001 3.53e+001 3.60e+001 3.67e+001 3.74e+001 3.81e+001 3.88e+001 3.96e+001 4.03e+001 4.10e+001 4.18e+001 4.25e+001 4.33e+001 4.40e+001 4.48e+001 4.55e+001 4.63e+001 4.70e+001 4.78e+001 4.86e+001 4.94e+001 5.01e+001 5.09e+001 5.17e+001 5.25e+001 5.33e+001 5.41e+001 5.48e+001 5.56e+001 5.64e+001 5.72e+001 5.81e+001 5.89e+001 5.97e+001 6.05e+001 6.13e+001 6.21e+001 6.29e+001 6.38e+001 6.46e+001 6.54e+001 6.62e+001 6.71e+001 6.79e+001 6.88e+001 6.96e+001 7.04e+001 7.13e+001 7.21e+001 7.30e+001 7.38e+001 7.47e+001 7.55e+001 7.64e+001 7.73e+001 7.81e+001 7.90e+001 7.98e+001 8.07e+001 8.16e+001 8.24e+001 8.33e+001 8.42e+001 8.51e+001 8.59e+001 8.68e+001 8.77e+001 8.86e+001 8.95e+001 9.03e+001 9.12e+001 9.21e+001 9.30e+001 9.39e+001 9.48e+001 9.57e+001".split(), float)
u238prod = np.array("3.76E-01 3.89E-01 4.02E-01 4.15E-01 4.28E-01 4.41E-01 4.53E-01 4.66E-01 4.78E-01 4.90E-01 5.02E-01 5.14E-01 5.26E-01 5.38E-01 5.49E-01 5.60E-01 5.72E-01 5.83E-01 5.94E-01 6.04E-01 6.15E-01 6.26E-01 6.36E-01 6.46E-01 6.56E-01 6.66E-01 6.76E-01 6.86E-01 6.96E-01 7.05E-01 7.15E-01 7.24E-01 7.33E-01 7.42E-01 7.51E-01 7.60E-01 7.69E-01 7.78E-01 7.86E-01 7.95E-01 8.03E-01 8.11E-01 8.19E-01 8.27E-01 8.35E-01 8.43E-01 8.51E-01 8.58E-01 8.66E-01 8.73E-01 8.81E-01 8.88E-01 8.95E-01 9.02E-01 9.09E-01 9.16E-01 9.23E-01 9.30E-01 9.36E-01 9.43E-01 9.49E-01 9.56E-01 9.62E-01 9.68E-01 9.74E-01 9.80E-01 9.86E-01 9.92E-01 9.98E-01 1.00E+00 1.01E+00 1.02E+00 1.02E+00 1.03E+00 1.03E+00 1.04E+00 1.04E+00 1.05E+00 1.05E+00 1.06E+00 1.06E+00 1.07E+00 1.07E+00 1.08E+00 1.08E+00 1.09E+00 1.09E+00 1.10E+00 1.10E+00 1.10E+00 1.11E+00 1.11E+00 1.12E+00 1.12E+00 1.12E+00 1.13E+00 1.13E+00 1.14E+00 1.14E+00 1.14E+00 1.15E+00 1.15E+00 1.16E+00 1.16E+00 1.16E+00 1.17E+00 1.17E+00 1.17E+00 1.18E+00 1.18E+00 1.18E+00 1.19E+00 1.19E+00 1.19E+00 1.19E+00 1.20E+00 1.20E+00 1.20E+00 1.21E+00 1.21E+00 1.21E+00 1.21E+00 1.22E+00 1.22E+00 1.22E+00 1.23E+00 1.23E+00 1.23E+00 1.23E+00 1.23E+00 1.24E+00 1.24E+00 1.24E+00 1.24E+00 1.25E+00 1.25E+00 1.25E+00 1.25E+00 1.25E+00 1.26E+00 1.26E+00 1.26E+00 1.26E+00".split(), float)
u238dest = np.array("6.75E-01 6.80E-01 6.85E-01 6.90E-01 6.95E-01 7.00E-01 7.04E-01 7.09E-01 7.13E-01 7.18E-01 7.23E-01 7.27E-01 7.31E-01 7.36E-01 7.40E-01 7.44E-01 7.49E-01 7.53E-01 7.57E-01 7.61E-01 7.65E-01 7.69E-01 7.73E-01 7.77E-01 7.81E-01 7.85E-01 7.88E-01 7.92E-01 7.96E-01 8.00E-01 8.03E-01 8.07E-01 8.10E-01 8.14E-01 8.17E-01 8.21E-01 8.24E-01 8.28E-01 8.31E-01 8.34E-01 8.37E-01 8.41E-01 8.44E-01 8.47E-01 8.50E-01 8.53E-01 8.56E-01 8.59E-01 8.62E-01 8.65E-01 8.68E-01 8.71E-01 8.74E-01 8.77E-01 8.79E-01 8.82E-01 8.85E-01 8.88E-01 8.90E-01 8.93E-01 8.96E-01 8.98E-01 9.01E-01 9.03E-01 9.06E-01 9.08E-01 9.11E-01 9.13E-01 9.16E-01 9.18E-01 9.20E-01 9.23E-01 9.25E-01 9.27E-01 9.29E-01 9.32E-01 9.34E-01 9.36E-01 9.38E-01 9.40E-01 9.42E-01 9.44E-01 9.46E-01 9.48E-01 9.50E-01 9.52E-01 9.54E-01 9.56E-01 9.58E-01 9.60E-01 9.62E-01 9.64E-01 9.66E-01 9.67E-01 9.69E-01 9.71E-01 9.73E-01 9.74E-01 9.76E-01 9.78E-01 9.79E-01 9.81E-01 9.83E-01 9.84E-01 9.86E-01 9.87E-01 9.89E-01 9.90E-01 9.92E-01 9.93E-01 9.95E-01 9.96E-01 9.98E-01 9.99E-01 1.00E+00 1.00E+00 1.00E+00 1.00E+00 1.01E+00 1.01E+00 1.01E+00 1.01E+00 1.01E+00 1.01E+00 1.01E+00 1.02E+00 1.02E+00 1.02E+00 1.02E+00 1.02E+00 1.02E+00 1.02E+00 1.02E+00 1.02E+00 1.03E+00 1.03E+00 1.03E+00 1.03E+00 1.03E+00 1.03E+00 1.03E+00 1.03E+00 1.03E+00".split(), float)
xpu = 0.2
xu = 1.0 - xpu
f = t * (2e15 * 24 * 3600 * 1e3 / 1e24)
coreburn = pu239burn * xpu + u238burn * xu
corek = 0.65 * (pu239prod * xpu + u238prod * xu) / (pu239dest * xpu + u238dest * xu)
inds = [(coreburn < bu).sum() for bu in (60, 120, 180)]
flabels = ['F1', 'F2', 'Fd']
klabels = ['k1', 'k2', 'k3']
bulabels = ['$\\frac{1}{3}$ BUd', '$\\frac{2}{3}$ BUd', 'BUd']
plt.figure()
plt.plot(f, coreburn, 'bo-')
for n, i in enumerate(inds):
fi = f[i]
bu = coreburn[i]
plt.plot([0.0, fi], [bu, bu], 'ro-', lw=3)
plt.plot([fi, fi], [0.0, bu], 'go-', lw=3)
plt.text(10., bu + 10, bulabels[n])
plt.text(fi + 10, 10, flabels[n])
plt.xlabel('Fluence [n/kb]')
plt.ylabel('Burnup [MWd/kg]')
plt.savefig('figs/fr_bu_f.svg', transparent=True, bbox_inches='tight')
plt.figure()
plt.plot(f, corek, 'bo-')
ax = plt.axis()
for n, i in enumerate(inds):
fi = f[i]
ki = corek[i]
plt.plot([0.0, fi], [ki, ki], 'ro-', lw=3)
plt.plot([fi, fi], [ax[2], ki], 'go-', lw=3)
plt.text(10, ki + 0.01, klabels[n])
plt.text(fi + 10, ax[2] + 0.01, flabels[n])
plt.xlabel('Fluence [n/kb]')
plt.ylabel('Multiplication Factor')
plt.savefig('figs/fr_k_f.svg', transparent=True, bbox_inches='tight')
(a) burnup | (b) multiplication factor |
Nuclide | OECD [2] [w/o] | $\sigma$ of OECD [%] | Results [w/o] | % Difference |
---|---|---|---|---|
$^{234}$U | 0.0178 | 9.0 | 0.0184 | +3.6 |
$^{235}$U | 0.8001 | 8.1 | 0.7079 | -11.5 |
$^{236}$U | 0.4840 | 2.6 | 0.4781 | -1.2 |
$^{238}$U | 93.3333 | 0.2 | 93.6109 | +0.3 |
$^{237}$Np | 0.0614 | 9.4 | 0.0584 | -5.0 |
$^{238}$Pu | 0.0226 | 13.9 | 0.0185 | -18.1 |
$^{239}$Pu | 0.5991 | 7.1 | 0.5104 | +14.8 |
$^{240}$Pu | 0.2389 | 5.3 | 0.2591 | +8.5 |
$^{241}$Pu | 0.1636 | 6.9 | 0.1445 | -11.7 |
$^{242}$Pu | 0.0602 | 8.4 | 0.0563 | -6.5 |
$^{241}$Am | 0.0047 | 5.3 | 0.0032 | -30.8 |
$^{243}$Am | 0.0148 | 10.4 | 0.0116 | -21.3 |
Index | Symbol |
---|---|
Nuclide | $i$ |
Time | $\tau$ |
Perturbation | $p$ |
Incident Energy Group | $g$ |
Exiting Energy Group | $h$ |
Reaction Channel [5] | $r_x$ |
Parameter | Symbol | Units |
---|---|---|
Fuel Density | $\rho_{\mbox{fuel}}$ | g/cm$^{3}$ |
Cladding Density | $\rho_{\mbox{clad}}$ | g/cm$^{3}$ |
Coolant Density | $\rho_{\mbox{cool}}$ | g/cm$^{3}$ |
Fuel Cell Radius | $r_{\mbox{fuel}}$ | cm |
Void Cell Radius | $r_{\mbox{void}}$ | cm |
Cladding Cell Radius | $r_{\mbox{clad}}$ | cm |
Unit Cell Pitch | $\ell$ | cm |
Number of Burn Regions | $b_r$ | |
Fuel Specific Power | $p_s$ | MW/kgIHM |
Initial Nuclide Mass Fraction | $T_{i0}$ | kg$_i$/kgIHM |
Burn Times | $s$ | days |
$\rho_{\mbox{fuel}}$ | $\rho_{\mbox{clad}}$ | $\rho_{\mbox{cool}}$ | $r_{\mbox{fuel}}$ | $r_{\mbox{void}}$ | $r_{\mbox{clad}}$ | $\ell$ | $b_r$ | $p_s$ | $T_{\mbox{$^{235}$U0}}$ | $s$ |
---|---|---|---|---|---|---|---|---|---|---|
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.03 | 0 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.03 | 100 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.03 | 200 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.03 | 300 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.03 | 400 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.05 | 0 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.05 | 100 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.05 | 200 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.05 | 200 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.05 | 300 |
10.165 | 5.87 | 0.73 | 0.41 | 0.4185 | 0.475 | 1.3127 | 10 | 0.04 | 0.05 | 400 |
$\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ |
days | $p^\star=1$ | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | $\cdots$ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 16 | 6 | 17 | 7 | 18 | 8 | 11 | 1 | 9 | 19 | 12 | 2 | 13 | 3 | 10 | 20 | $\cdots$ |
40.6 | 16 | 6 | 17 | 7 | 18 | 8 | 19 | 9 | 11 | 1 | 12 | 2 | 13 | 3 | 10 | 20 | $\cdots$ |
81.1 | 17 | 7 | 16 | 6 | 18 | 8 | 19 | 9 | 2 | 12 | 11 | 1 | 13 | 3 | 10 | 20 | $\cdots$ |
122 | 7 | 17 | 18 | 8 | 6 | 16 | 19 | 9 | 20 | 10 | 2 | 12 | 3 | 13 | 11 | 1 | $\cdots$ |
162 | 8 | 18 | 7 | 17 | 19 | 9 | 6 | 16 | 20 | 10 | 3 | 13 | 2 | 12 | 4 | 14 | $\cdots$ |
203 | 18 | 8 | 19 | 9 | 17 | 7 | 10 | 20 | 6 | 16 | 3 | 13 | 4 | 14 | 12 | 2 | $\cdots$ |
243 | 18 | 8 | 19 | 9 | 17 | 7 | 10 | 20 | 6 | 16 | 3 | 13 | 4 | 14 | 12 | 2 | $\cdots$ |
284 | 19 | 9 | 18 | 8 | 10 | 20 | 7 | 17 | 4 | 14 | 6 | 16 | 3 | 13 | 5 | 15 | $\cdots$ |
324 | 19 | 9 | 10 | 20 | 8 | 18 | 7 | 17 | 4 | 14 | 5 | 15 | 3 | 13 | 6 | 16 | $\cdots$ |
365 | 10 | 20 | 19 | 9 | 18 | 8 | 7 | 17 | 5 | 15 | 4 | 14 | 3 | 13 | 6 | 16 | $\cdots$ |
(a) BOL | (b) EOL |
(a) $^{235}$U | (b) $^{246}$Cm | (c) $^{137}$Cs |
(a) $^{235}$U | (b) $^{239}$Pu | (c) $^{99}$Tc |
Here are the matched abundance ratio cascade equations:
What if we solved these equations symbolically, rather than numerically..
...and use code generation to produce a blazing solver.
We get really big speedups (20-300x)!
(a) per iteration | (b) over minimzation |
See http://pynesim.org/usersguide/enrichment.html for more details.
1. For each input parameter $x$, change its base-case value $x_0$ by $\pm10\%$.
2. If $x$ is a separation efficiency (SE), instead perturb by $\pm$ "one nine" worth of separations.
3. Meanwhile, maintain all other parameters ($y, z, \ldots$) at their base-case values.
4. Calculate the new repository capacity response, $R$, by the perturbed cycle and record the sensitivity as the percent change from the base-case response, $R_0$.
The essential physics models from before were used to study a Fast Reactor, Light Water Reactor symbiotic scenario analogous to Scheme 3a of a 2006 OECD report [3].
With perturbable components, over 30 independent physical parameters may be adjusted in the fuel cycle. Sensitivity results are computed from equilibrium values derived from a full treatment of the preceding, transient cycles.
Input Parameter $x$ | Value | Units |
---|---|---|
LWR Burnup | 50.0 | MWd/kgIHM |
LWR Fuel to Moderator Ratio | 0.301 | |
LWR UF Storage Time | 60 | years |
SE of U from LWR UF | 0.999 | |
SE of NP from LWR UF | 0.999 | |
SE of PU from LWR UF | 0.999 | |
SE of AM from LWR UF | 0.999 | |
SE of CM from LWR UF | 0.999 | |
SE of CS from LWR UF | 0.999 | |
SE of SR from LWR UF | 0.999 | |
FR Burnup | 140.0 | MWd/kgIHM |
FR TRU Conversion Ratio | 0.50 | |
Max Fraction of Lanthanide in FR Fuel | 0.0005 | Atoms/TRU Atom |
FR UF Storage Time | 3 | years |
Storage Before Disposal | 50 | years |
Input Parameter $x$ | Value | Units |
---|---|---|
SE of U from FR UF | 0.999 | |
SE of NP from FR UF | 0.999 | |
SE of PU from FR UF | 0.999 | |
SE of AM from FR UF | 0.999 | |
SE of CM from FR UF | 0.999 | |
SE of CS from FR UF | 0.999 | |
SE of SR from FR UF | 0.999 | |
Density of Host Rock | 2580 | kg/m$^{3}$ |
Specific Heat of Host Rock | 840 | J/kg-K |
Thermal Conductivity of Host Rock | 1.626 | W/m-K |
Heat Loss Factor During Ventilation | 0.7 | |
Drift diameter | 5.5 | m |
Ventilation System On Time | 50 | years |
Ambient Environment Temperature | 20 | C |
Distance Between Drifts | 81 | m |
Scheme 3a | NEA [3] | Model$^{1}$ | % Diff | Model$^{2}$ | % Diff |
---|---|---|---|---|---|
Electricity Share: LWR | 0.632 | 0.619459 | -2.0244 | 0.634907 | +0.4579 |
Electricity Share: FR | 0.368 | 0.380541 | +3.2955 | 0.365093 | -0.7962 |
FR UF: U | 0.698 | 0.713806 | +2.2143 | 0.715224 | +2.4082 |
FR UF: NP | 0.0065 | 0.00661961 | +1.8070 | 0.00685174 | +5.1335 |
FR UF: PU | 0.266 | 0.248059 | -7.2327 | 0.248319 | -7.1204 |
FR UF: AM | 0.02 | 0.0226796 | 11.8152 | 0.0217317 | +7.9687 |
FR UF: CM | 0.0098 | 0.00883517 | -10.920 | 0.00787319 | -24.4730 |
HLW: U | 0.013324 | 0.0132681 | -0.4213 | 0.0134448 | +0.8984 |
HLW: NP | 2.26542E-05 | 2.4079E-05 | +5.9173 | 2.41083E-05 | +6.0316 |
HLW: PU | 0.000704797 | 0.000658893 | -6.9668 | 0.000632361 | -11.4548 |
HLW: AM | 5.03426E-05 | 5.63068E-05 | 10.5923 | 5.12344E-05 | +1.7405 |
HLW: CM | 2.18151E-05 | 1.99031E-05 | -9.6068 | 1.67094E-05 | -30.5563 |
HLW: FP | 0.985876 | 0.985973 | +0.0098 | 0.985831 | -0.0046 |
Parameter $x$ | Base Case $x_0$ | $S_{-x}$ | $S_{+x}$ |
---|---|---|---|
FR_SE_PU | 0.999 | -83.09 | +99.30 |
LWR_SE_PU | 0.999 | -60.90 | +18.28 |
FR_SE_AM | 0.999 | -59.53 | +17.55 |
FR_SE_CM | 0.999 | -11.15 | +1.28 |
FR_TRU_CR | 0.500 | +5.22 | -6.02 |
Rock_Density | 2580 [kg/m$^{3}$] | -5.05 | +5.59 |
Rock_Specific_Heat | 840 [J/kg/K] | -4.90 | +5.59 |
LWR_BUd | 50 [MWd/kg] | +5.46 | -3.48 |
FR_BUd | 140 [MWd/kg] | -5.44 | +5.32 |
Parameter $x$ | Base Case $x_0$ | $S_{-x}$ | $S_{+x}$ |
---|---|---|---|
LWR_SE_U | 0.999 | -0.01 | +0.00 |
FR_SE_NP | 0.999 | -0.10 | +0.01 |
FR_SE_U | 0.999 | -0.22 | +0.01 |
FR_LAN_FF_Cap | 0.0005 [w/o] | +0.03 | -0.03 |
LWR_SE_NP | 0.999 | -0.26 | +0.03 |
LWR_SNF_Storage_Time | 6 [y] | +0.06 | -0.14 |
LWR_SE_CM | 0.999 | -0.82 | +0.08 |
Vent_System_On_Time | 50 [y] | -0.11 | +1.13 |
Drift_Diameter | 5.5 [m] | +0.26 | +0.58 |
Input Parameter $x$ | Min | Max | Units | Sample Type |
---|---|---|---|---|
LWR Burnup Level | 30.0 | 80.0 | MWd/kgIHM | linear |
LWR Fuel to Moderator Ratio | 0.28 | 0.36 | linear | |
LWR SNF Storage Time | 3 | 30 | years | linear |
SE of U from LWR UF | 0.99 | 0.9999 | nines | |
SE of NP from LWR UF | 0.9 | 0.9999 | nines | |
SE of PU from LWR UF | 0.9 | 0.9999 | nines | |
SE of AM from LWR UF | 0.9 | 0.9999 | nines | |
SE of CM from LWR UF | 0.9 | 0.9999 | nines | |
SE of CS from LWR UF | 0.9 | 0.9999 | nines | |
SE of SR from LWR UF | 0.9 | 0.9999 | nines | |
FR Burnup Level | 100.0 | 200.0 | MWd/kgIHM | linear |
FR TRU Conversion Ratio | 0.25 | 0.95 | linear | |
Max Fraction of Lanthanide in FR Fuel | 0.0001 | 0.005 | Atoms/TRU Atom | linear |
FR UF Storage Time | 3 | 30 | years | linear |
Storage Before Disposal | 1 | 300 | years | log |
Input Parameter $x$ | Min | Max | Units | Sample Type |
---|---|---|---|---|
SE of U from FR UF | 0.99 | 0.9999 | nines | |
SE of NP from FR UF | 0.9 | 0.9999 | nines | |
SE of PU from FR UF | 0.9 | 0.9999 | nines | |
SE of AM from FR UF | 0.9 | 0.9999 | nines | |
SE of CM from FR UF | 0.9 | 0.9999 | nines | |
SE of CS from FR UF | 0.9 | 0.9999 | nines | |
SE of SR from FR UF | 0.9 | 0.9999 | nines | |
Density of Host Rock | 2317 | 2869 | kg/m$^{3}$ | linear |
Specific Heat of Host Rock | 590 | 1270 | J/kg-K | linear |
Thermal Conductivity of Host Rock | 1.9204 | 3.2856 | W/m-K | linear |
Heat Loss Factor During Ventilation | 0.806 | 0.914 | linear | |
Drift diameter | 4.5 | 6.5 | m | linear |
Ventilation System On Time | 10 | 300 | years | log |
Ambient Environment Temperature | 12.82 | 32.82 | C | linear |
Distance Between Drifts | 56 | 106 | m | linear |
The $2\times 2$ table is most common:
Blonde | Brunette | Totals | |
---|---|---|---|
Female | 18 | 17 | 35 |
Male | 11 | 14 | 25 |
Totals | 29 | 31 | 60 |
But doesn't this approach ignore the underlying biology?
For example, let's construct a 2D contingency table that measures the response from a sample input: fast reactor fuel plutonium separation efficiency, FR_SE_PU
.
$0.9<$SE $<0.99$ | $0.99<$SE $<0.999$ | $0.999<$SE $<0.9999$ | ||
---|---|---|---|---|
$10^4 <$ Capacity $< 10^5$ | $739$ | $43$ | $27$ | $809$ |
$10^5 <$ Capacity $< 10^6$ | $31510$ | $21611$ | $19469$ | $72590$ |
$10^6 <$ Capacity $< 10^7$ | $2648$ | $13095$ | $14430$ | $30173$ |
$10^7 <$ Capacity $< 10^8$ | $0$ | $213$ | $1053$ | $1266$ |
$34897$ | $34962$ | $34979$ | $104838$ |
There are several metrics that have been developed to measure associations with contingency tables.
The primary measure here is the Uncertainty Coefficient $U(x|R)$.
To calculate $U(x|R)$ the following are needed:
Denote the entries in a contingency table as $N_{ij}$ for the $i$-th response bin and the $j$-th input bin.
The probability of landing in a given bin is therefore,
Thus the entropy is calculated from,
The mutual information is found via,
The uncertainty coefficient is then calculated from,
This metric has the following useful properties:
Rank | $x$ | $U(x|R)$ |
---|---|---|
1 | FR_SE_PU | 0.07667 |
2 | HLW_Storage_Time | 0.05264 |
3 | FR_SE_AM | 0.04148 |
4 | Heat_Loss_Factor | 0.01548 |
5 | LWR_SE_PU | 0.01343 |
6 | FR_TRU_CR | 0.008895 |
7 | LWR_SE_AM | 0.007304 |
8 | FR_BUd | 0.003773 |
9 | LWR_UF_Storage_Time | 0.003551 |
10 | Rock_Specific_Heat | 0.003085 |
11 | FR_SE_CM | 0.002522 |
12 | Rock_Thermal_Conductivity | 0.001954 |
13 | Ambient_Temp | 0.001353 |
14 | LWR_BUd | 0.001053 |
15 | LWR_SE_CS | 0.001033 |
Rank | $x$ | $U(x|R)$ |
---|---|---|
16 | LWR_SE_SR | 0.001024 |
17 | FR_UF_Storage_Time | 0.0005559 |
18 | Drift_Space | 0.0004421 |
19 | LWR_SE_U | 0.0002899 |
20 | Rock_Density | 0.0002718 |
21 | FR_SE_CS | 0.0001331 |
22 | FR_SE_SR | 0.0001073 |
23 | Vent_System_On_Time | 0.0001016 |
24 | Drift_Diameter | 9.648E-05 |
25 | LWR_SE_NP | 9.575E-05 |
26 | LWR_SE_CM | 7.969E-05 |
27 | LWR_Fuel2Mod | 7.833E-05 |
28 | FR_LAN_FF_Cap | 6.559E-05 |
29 | FR_SE_NP | 6.212E-05 |
30 | FR_SE_U | 6.207E-05 |
$U(x|R)$ is related to $U(R|x)$ via the following expression:
This is effectively an entropic re-expression of Bayes' Theorem:
Due to the stochastic driver, all $H(x)$ must be the same - to within error - for all $x$. Also, since there is only one repsonse, $H(R)$ is the same the for all $x$.
Hence, $U(x|R) = k U(R|x)$.
Scaling the uncertainty coefficients by a constant does not affect the relative rank ordering.
HLW_Storage_Time
< 6.694$0.9<$SE $<0.99$ | $0.99<$SE $<0.999$ | $0.999<$SE $< 0.9999$ | ||
---|---|---|---|---|
$10^4 <$ Capacity $< 10^5$ | $419$ | $23$ | $14$ | $456$ |
$10^5 <$ Capacity $< 10^6$ | $11145$ | $9970$ | $9553$ | $30668$ |
$10^6 <$ Capacity $< 10^7$ | $110$ | $1556$ | $2085$ | $3751$ |
$10^7 <$ Capacity $< 10^8$ | $0$ | $0$ | $0$ | $0$ |
$11674$ | $11549$ | $11652$ | $34875$ |
HLW_Storage_Time
< 44.814$0.9<$SE $<0.99$ | $0.99<$SE $<0.999$ | $0.999<$SE $< 0.9999$ | ||
---|---|---|---|---|
$10^4 <$ Capacity $< 10^5$ | $273$ | $19$ | $11$ | $303$ |
$10^5 <$ Capacity $< 10^6$ | $10859$ | $7527$ | $6373$ | $24759$ |
$10^6 <$ Capacity $< 10^7$ | $484$ | $4157$ | $5175$ | $9816$ |
$10^7 <$ Capacity $< 10^8$ | $0$ | $2$ | $24$ | $26$ |
$11616$ | $11705$ | $11583$ | $34904$ |
HLW_Storage_Time
< 300$0.9<$SE $<0.99$ | $0.99<$SE $<0.999$ | $0.999<$SE $< 0.9999$ | ||
---|---|---|---|---|
$10^4 <$ Capacity $< 10^5$ | $47$ | $1$ | $2$ | $50$ |
$10^5 <$ Capacity $< 10^6$ | $9506$ | $4114$ | $3543$ | $17163$ |
$10^6 <$ Capacity $< 10^7$ | $2054$ | $7382$ | $7170$ | $16606$ |
$10^7 <$ Capacity $< 10^8$ | $0$ | $211$ | $1029$ | $1240$ |
$11607$ | $11708$ | $11744$ | $35059$ |
HLW_Storage_Time
$0.9<$SE $<0.99$ | $0.99<$SE $<0.999$ | $0.999<$SE $< 0.9999$ | ||
---|---|---|---|---|
$10^4 <$ Capacity $< 10^5$ | $739$ | $43$ | $27$ | $809$ |
$10^5 <$ Capacity $< 10^6$ | $31510$ | $21611$ | $19469$ | $72590$ |
$10^6 <$ Capacity $< 10^7$ | $2648$ | $13095$ | $14430$ | $30173$ |
$10^7 <$ Capacity $< 10^8$ | $0$ | $213$ | $1053$ | $1266$ |
$34897$ | $34962$ | $34979$ | $104838$ |
First, define:
Then the coefficient of variation is,
Finally, the symmetric $c_v$ is set as:
$c_v(x|y|R)$ has the following properties:
Rank | $x$ | $y$ | $c_v(x|y|R)$ |
---|---|---|---|
1 | FR_SE_AM | HLW_Storage_Time | 0.02318 |
2 | FR_SE_AM | FR_SE_PU | 0.02316 |
3 | HLW_Storage_Time | LWR_UF_Storage_Time | 0.01557 |
4 | FR_SE_PU | HLW_Storage_Time | 0.01556 |
5 | HLW_Storage_Time | LWR_SE_PU | 0.01155 |
6 | FR_SE_AM | FR_TRU_CR | 0.01061 |
7 | FR_SE_PU | LWR_UF_Storage_Time | 0.008192 |
8 | FR_SE_PU | LWR_SE_PU | 0.008 |
9 | FR_BUd | FR_SE_AM | 0.007716 |
10 | Ambient_Temp | FR_SE_PU | 0.007489 |
11 | Ambient_Temp | HLW_Storage_Time | 0.007367 |
12 | HLW_Storage_Time | LWR_SE_AM | 0.007248 |
13 | Ambient_Temp | FR_SE_CS | 0.007235 |
14 | Ambient_Temp | LWR_Fuel2Mod | 0.007066 |
15 | Ambient_Temp | Heat_Loss_Factor | 0.007044 |
FR_SE_AM
, FR_SE_PU
).How do we know that we have picked a sufficient number of bins?
Different partitioning schemes may significantly alter our measures. Consider a a chamber the moment after a piston has been suddenly removed, as in a Carnot heat engine:
We thus want to pick the minumum number of bins after which our metrics (and rankings) have stablized.
FR_SE_PU
, LWR_SE_NP
) to repository capacity.But how many runs are needed to achieve this binning?
For the covariance measures (which determines the statistics), note that:
Set $t$ as a fractional statistical tolerance, ie $t=0.01$ is 1% error.
Then the mutual information goes as $I = t^d$ for $d$ indpendent inputs. Here, $d = 2$ for $x$ & $y$.
For $J$ number $x$ bins and $K$ number of $y$ bins, the total number of runs required is estimated by:
- PyNE, Cyclus, OpenMC, Fudge, Software Carpentry, etc.
- June 24th - 29th, Austin, TX! http://conference.scipy.org/scipy2013/
- http://numfocus.org/
!make
cp -r ~/nbconvert/reveal . rm -rf reveal/.git* mkdir -p js cp ~/nbconvert/js/mathjax-onload.js js cp classy.css reveal/css/theme/ python ~/nbconvert/nbconvert.py -f reveal fc-entropy-talk.ipynb sed -i 's:reveal/css/theme/classy.css:reveal/css/theme/classy.css:' fc-entropy-talk_slides.html sed -i 's:class="fragment" class="text_cell_render:class="fragment text_cell_render:' fc-entropy-talk_slides.html sed -i 's/.rendered_html ul{list-style:disc;margin:0em 2em;}/.rendered_html ul{list-style:disc;margin:0em 2em;}/' fc-entropy-talk_slides.html