diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index fce805f18..3ec974e05 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -363,7 +363,26 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAALKSURB\nVGje7dpLcqQwDAbgHHE2YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmN\nP+HDhw8fPnz48Kf6VH9G+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4\nzPji99z0/AJ4n1lfvJ6fnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6\npA0wfln+ho/fwgYYn19C/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tN\nDbSGz7T0SBEWw4vLXzbQ6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X5\n8wZaxWd1+fMGiuFvir8bvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV\n873hB8UnM3xzANtf8nb4dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7\nT/ppARBvp48UwJnelT5SACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4/\n/Jve+fhsH6Ctv7n8PTzjvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V\n32/o9+fl389Xnx+g5x/o+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6\n/4Le/6D3T/D9V67Y/ZsVQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/\ngPs/0P4TtP8F7r9J3AIO9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTu\nf4X7b+H+X7T/+BPuf3aM8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIw\nMTUtMTAtMjhUMjE6MTU6MDYtMDQ6MDDSDNQdAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTEwLTI4\nVDIxOjE1OjA2LTA0OjAwo1FsoQAAAABJRU5ErkJggg==\n", + "image/png": [ + "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n", + "AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\n", + "QYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98LGQ4UM+6dthcAAALKSURBVGje7dpLcqQwDAbgHHE2\n", + "YeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n", + "+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\n", + "nl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n", + "/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n", + "6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\n", + "vjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\n", + "dwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\n", + "ACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\n", + "vY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n", + "+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\n", + "QBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n", + "9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n", + "8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTEtMjVUMTQ6MjA6\n", + "NTEtMDg6MDDVsKLDAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTExLTI1VDE0OjIwOjUxLTA4OjAw\n", + "pO0afwAAAABJRU5ErkJggg==\n" + ], "text/plain": [ "" ] @@ -573,8 +592,8 @@ " Copyright: 2011-2015 Massachusetts Institute of Technology\n", " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.0\n", - " Git SHA1: 21738db07debeabde824c9b955bd3bf0c9a16366\n", - " Date/Time: 2015-10-28 21:15:07\n", + " Git SHA1: 74ffcb447521c968fb64fdaa63e40598783f2fba\n", + " Date/Time: 2015-11-25 14:20:51\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -615,13 +634,13 @@ " 11/1 1.07867 1.05536 +/- 0.01277\n", " 12/1 1.04203 1.05345 +/- 0.01096\n", " 13/1 1.04482 1.05237 +/- 0.00955\n", - " 14/1 1.04117 1.05113 +/- 0.00852\n", - " 15/1 1.07581 1.05360 +/- 0.00801\n", - " 16/1 1.04235 1.05257 +/- 0.00731\n", - " 17/1 1.02710 1.05045 +/- 0.00701\n", - " 18/1 1.01970 1.04809 +/- 0.00687\n", - " 19/1 1.01022 1.04538 +/- 0.00691\n", - " 20/1 1.01449 1.04332 +/- 0.00675\n", + " 14/1 1.04116 1.05113 +/- 0.00852\n", + " 15/1 1.07569 1.05358 +/- 0.00800\n", + " 16/1 1.04188 1.05252 +/- 0.00732\n", + " 17/1 1.03775 1.05129 +/- 0.00679\n", + " 18/1 0.98462 1.04616 +/- 0.00808\n", + " 19/1 1.08613 1.04902 +/- 0.00801\n", + " 20/1 1.00571 1.04613 +/- 0.00800\n", " Creating state point statepoint.20.h5...\n", "\n", " ===========================================================================\n", @@ -631,27 +650,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 6.3800E-01 seconds\n", - " Reading cross sections = 1.3500E-01 seconds\n", - " Total time in simulation = 2.3556E+01 seconds\n", - " Time in transport only = 2.3532E+01 seconds\n", - " Time in inactive batches = 3.1100E+00 seconds\n", - " Time in active batches = 2.0446E+01 seconds\n", + " Total time for initialization = 7.9600E-01 seconds\n", + " Reading cross sections = 2.1200E-01 seconds\n", + " Total time in simulation = 1.8740E+01 seconds\n", + " Time in transport only = 1.8727E+01 seconds\n", + " Time in inactive batches = 2.5970E+00 seconds\n", + " Time in active batches = 1.6143E+01 seconds\n", " Time synchronizing fission bank = 2.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 3.0000E-03 seconds\n", - " Total time elapsed = 2.4210E+01 seconds\n", - " Calculation Rate (inactive) = 4019.29 neutrons/second\n", - " Calculation Rate (active) = 1834.10 neutrons/second\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 2.0000E-03 seconds\n", + " Total time elapsed = 1.9553E+01 seconds\n", + " Calculation Rate (inactive) = 4813.25 neutrons/second\n", + " Calculation Rate (active) = 2322.99 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.03935 +/- 0.00682\n", - " k-effective (Track-length) = 1.04332 +/- 0.00675\n", - " k-effective (Absorption) = 1.03845 +/- 0.00598\n", - " Combined k-effective = 1.04024 +/- 0.00523\n", + " k-effective (Collision) = 1.04597 +/- 0.00663\n", + " k-effective (Track-length) = 1.04613 +/- 0.00800\n", + " k-effective (Absorption) = 1.04087 +/- 0.00627\n", + " Combined k-effective = 1.04322 +/- 0.00570\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -742,7 +761,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -756,10 +775,10 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0total(nu-fission / absorption)1.0401660.009069 total (nu-fission / absorption) 1.040687 0.010913
\n", @@ -767,7 +786,7 @@ ], "text/plain": [ " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.040166 0.009069" + "0 total (nu-fission / absorption) 1.040687 0.010913" ] }, "execution_count": 26, @@ -802,7 +821,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -817,19 +836,19 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0(0.0e+00 - 6.2e-01)totalabsorption0.959380.008187 (0.0e+00 - 6.2e-01) total absorption 0.959302 0.010033
\n", "
" ], "text/plain": [ - " energy [MeV] nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) total absorption 0.95938 0.008187" + " energy [MeV] nuclide score mean std. dev.\n", + "0 (0.0e+00 - 6.2e-01) total absorption 0.959302 0.010033" ] }, "execution_count": 27, @@ -862,11 +881,12 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -876,18 +896,19 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
energy [MeV]nuclidescoremean
0totalnu-fission1.0908990.010602 (0.0e+00 - 6.2e-01) total nu-fission 1.09103 0.012491
\n", "
" ], "text/plain": [ - " nuclide score mean std. dev.\n", - "0 total nu-fission 1.090899 0.010602" + " energy [MeV] nuclide score mean std. dev.\n", + "0 (0.0e+00 - 6.2e-01) total nu-fission 1.09103 0.012491" ] }, "execution_count": 28, @@ -921,7 +942,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -937,12 +958,12 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
0(0.0e+00 - 6.2e-01)10000totalabsorption0.8034130.007031 (0.0e+00 - 6.2e-01) 10000 total absorption 0.803182 0.008664
\n", @@ -950,7 +971,7 @@ ], "text/plain": [ " energy [MeV] cell nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) 10000 total absorption 0.803413 0.007031" + "0 (0.0e+00 - 6.2e-01) 10000 total absorption 0.803182 0.008664" ] }, "execution_count": 29, @@ -982,12 +1003,13 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -997,19 +1019,23 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
energy [MeV]cellnuclidescoremean
0(0.0e+00 - 6.2e-01)total(nu-fission / absorption)1.2370530.011765 (0.0e+00 - 6.2e-01) 10000 total (nu-fission / absorption) 1.237982 0.014179
\n", "
" ], "text/plain": [ - " energy [MeV] nuclide score mean std. dev.\n", - "0 (0.0e+00 - 6.2e-01) total (nu-fission / absorption) 1.237053 0.011765" + " energy [MeV] cell nuclide score mean \\\n", + "0 (0.0e+00 - 6.2e-01) 10000 total (nu-fission / absorption) 1.237982 \n", + "\n", + " std. dev. \n", + "0 0.014179 " ] }, "execution_count": 30, @@ -1040,12 +1066,13 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -1055,22 +1082,23 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
energy [MeV]cellnuclidescoremean
0(0.0e+00 - 6.2e-01)total(((absorption * nu-fission) * absorption) * (n...1.0401660.019018 (0.0e+00 - 6.2e-01) 10000 total (((absorption * nu-fission) * absorption) * (n... 1.040687 0.022989
\n", "
" ], "text/plain": [ - " energy [MeV] nuclide \\\n", - "0 (0.0e+00 - 6.2e-01) total \n", + " energy [MeV] cell nuclide \\\n", + "0 (0.0e+00 - 6.2e-01) 10000 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.040166 0.019018 " + "0 (((absorption * nu-fission) * absorption) * (n... 1.040687 0.022989 " ] }, "execution_count": 31, @@ -1118,7 +1146,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1134,100 +1162,100 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
010000(0.0e+00 - 6.3e-07)(U-238 / total)(nu-fission / flux)6.657029e-077.377419e-09 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (nu-fission / flux) 0.000001 8.078651e-09
110000(0.0e+00 - 6.3e-07)(U-238 / total)(scatter / flux)2.099891e-012.303838e-03 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (scatter / flux) 0.209990 2.449396e-03
210000(0.0e+00 - 6.3e-07)(U-235 / total)(nu-fission / flux)3.564204e-013.951669e-03 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (nu-fission / flux) 0.356117 4.364366e-03
310000(0.0e+00 - 6.3e-07)(U-235 / total)(scatter / flux)5.555330e-036.101004e-05 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (scatter / flux) 0.005555 6.495710e-05
410000(6.3e-07 - 2.0e+01)(U-238 / total)(nu-fission / flux)7.154887e-038.053460e-05 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (nu-fission / flux) 0.007190 7.596666e-05
510000(6.3e-07 - 2.0e+01)(U-238 / total)(scatter / flux)2.277701e-011.079289e-03 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (scatter / flux) 0.227843 1.024510e-03
610000(6.3e-07 - 2.0e+01)(U-235 / total)(nu-fission / flux)8.066738e-035.254797e-05 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (nu-fission / flux) 0.008086 6.251590e-05
710000(6.3e-07 - 2.0e+01)(U-235 / total)(scatter / flux)3.366802e-031.647058e-05 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (scatter / flux) 0.003365 1.646663e-05
\n", "
" ], "text/plain": [ - " cell energy [MeV] nuclide score \\\n", - "0 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (nu-fission / flux) \n", - "1 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (scatter / flux) \n", - "2 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (nu-fission / flux) \n", - "3 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (scatter / flux) \n", - "4 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (nu-fission / flux) \n", - "5 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (scatter / flux) \n", - "6 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (nu-fission / flux) \n", - "7 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (scatter / flux) \n", + " cell energy [MeV] nuclide score mean \\\n", + "0 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (nu-fission / flux) 0.000001 \n", + "1 10000 (0.0e+00 - 6.3e-07) (U-238 / total) (scatter / flux) 0.209990 \n", + "2 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (nu-fission / flux) 0.356117 \n", + "3 10000 (0.0e+00 - 6.3e-07) (U-235 / total) (scatter / flux) 0.005555 \n", + "4 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (nu-fission / flux) 0.007190 \n", + "5 10000 (6.3e-07 - 2.0e+01) (U-238 / total) (scatter / flux) 0.227843 \n", + "6 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (nu-fission / flux) 0.008086 \n", + "7 10000 (6.3e-07 - 2.0e+01) (U-235 / total) (scatter / flux) 0.003365 \n", "\n", - " mean std. dev. \n", - "0 6.657029e-07 7.377419e-09 \n", - "1 2.099891e-01 2.303838e-03 \n", - "2 3.564204e-01 3.951669e-03 \n", - "3 5.555330e-03 6.101004e-05 \n", - "4 7.154887e-03 8.053460e-05 \n", - "5 2.277701e-01 1.079289e-03 \n", - "6 8.066738e-03 5.254797e-05 \n", - "7 3.366802e-03 1.647058e-05 " + " std. dev. \n", + "0 8.078651e-09 \n", + "1 2.449396e-03 \n", + "2 4.364366e-03 \n", + "3 6.495710e-05 \n", + "4 7.596666e-05 \n", + "5 1.024510e-03 \n", + "6 6.251590e-05 \n", + "7 1.646663e-05 " ] }, "execution_count": 33, @@ -1258,11 +1286,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 6.65702880e-07]\n", - " [ 3.56420449e-01]]\n", + "[[[ 6.65302296e-07]\n", + " [ 3.56116716e-01]]\n", "\n", - " [[ 7.15488656e-03]\n", - " [ 8.06673774e-03]]]\n" + " [[ 7.19004460e-03]\n", + " [ 8.08598751e-03]]]\n" ] } ], @@ -1290,9 +1318,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00555533]]\n", + "[[[ 0.00555516]]\n", "\n", - " [[ 0.0033668 ]]]\n" + " [[ 0.00336498]]]\n" ] } ], @@ -1314,8 +1342,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.22777006]\n", - " [ 0.0033668 ]]]\n" + "[[[ 0.22784316]\n", + " [ 0.00336498]]]\n" ] } ], @@ -1344,7 +1372,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1360,39 +1388,39 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
010000(0.0e+00 - 6.3e-07)U-238nu-fission0.0000021.283958e-08 10000 (0.0e+00 - 6.3e-07) U-238 nu-fission 0.000002 1.450189e-08
110000(0.0e+00 - 6.3e-07)U-235nu-fission0.8685536.880390e-03 10000 (0.0e+00 - 6.3e-07) U-235 nu-fission 0.870882 7.895515e-03
210000(6.3e-07 - 2.0e+01)U-238nu-fission0.0821498.837250e-04 10000 (6.3e-07 - 2.0e+01) U-238 nu-fission 0.082484 8.253437e-04
310000(6.3e-07 - 2.0e+01)U-235nu-fission0.0926185.195308e-04 10000 (6.3e-07 - 2.0e+01) U-235 nu-fission 0.092762 6.444580e-04
\n", @@ -1400,10 +1428,10 @@ ], "text/plain": [ " cell energy [MeV] nuclide score mean std. dev.\n", - "0 10000 (0.0e+00 - 6.3e-07) U-238 nu-fission 0.000002 1.283958e-08\n", - "1 10000 (0.0e+00 - 6.3e-07) U-235 nu-fission 0.868553 6.880390e-03\n", - "2 10000 (6.3e-07 - 2.0e+01) U-238 nu-fission 0.082149 8.837250e-04\n", - "3 10000 (6.3e-07 - 2.0e+01) U-235 nu-fission 0.092618 5.195308e-04" + "0 10000 (0.0e+00 - 6.3e-07) U-238 nu-fission 0.000002 1.450189e-08\n", + "1 10000 (0.0e+00 - 6.3e-07) U-235 nu-fission 0.870882 7.895515e-03\n", + "2 10000 (6.3e-07 - 2.0e+01) U-238 nu-fission 0.082484 8.253437e-04\n", + "3 10000 (6.3e-07 - 2.0e+01) U-235 nu-fission 0.092762 6.444580e-04" ] }, "execution_count": 37, @@ -1427,7 +1455,7 @@ { "data": { "text/html": [ - "
\n", + "
\n", "\n", " \n", " \n", @@ -1443,84 +1471,84 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
010002(1.0e-08 - 1.1e-07)H-1scatter4.6193980.040124 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.630154 0.044512
110002(1.1e-07 - 1.2e-06)H-1scatter2.0307570.011239 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.042984 0.011429
210002(1.2e-06 - 1.3e-05)H-1scatter1.6584880.009777 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.657517 0.008617
310002(1.3e-05 - 1.4e-04)H-1scatter1.8530020.007378 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.863326 0.008848
410002(1.4e-04 - 1.5e-03)H-1scatter2.0507730.012484 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.043916 0.014195
510002(1.5e-03 - 1.6e-02)H-1scatter2.1317590.007821 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.134458 0.007561
610002(1.6e-02 - 1.7e-01)H-1scatter2.2137100.015159 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.209947 0.013848
710002(1.7e-01 - 1.9e+00)H-1scatter2.0119250.009406 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.006967 0.009368
810002(1.9e+00 - 2.0e+01)H-1scatter0.3712800.003949 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.373895 0.002964
\n", @@ -1528,15 +1556,15 @@ ], "text/plain": [ " cell energy [MeV] nuclide score mean std. dev.\n", - "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.619398 0.040124\n", - "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.030757 0.011239\n", - "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.658488 0.009777\n", - "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.853002 0.007378\n", - "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.050773 0.012484\n", - "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.131759 0.007821\n", - "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.213710 0.015159\n", - "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.011925 0.009406\n", - "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.371280 0.003949" + "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.630154 0.044512\n", + "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.042984 0.011429\n", + "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.657517 0.008617\n", + "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.863326 0.008848\n", + "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.043916 0.014195\n", + "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.134458 0.007561\n", + "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.209947 0.013848\n", + "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.006967 0.009368\n", + "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.373895 0.002964" ] }, "execution_count": 38, @@ -1569,7 +1597,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.6" + "version": "2.7.10" } }, "nbformat": 4, diff --git a/openmc/cross.py b/openmc/cross.py index 17cdc5ea6..c03ee5188 100644 --- a/openmc/cross.py +++ b/openmc/cross.py @@ -309,7 +309,7 @@ class CrossFilter(object): clone._right_filter = self.right_filter clone._binary_op = self.binary_op clone._type = self.type - clone._bins = self.bins + clone._bins = self._bins clone._num_bins = self.num_bins clone._stride = self.stride @@ -356,7 +356,7 @@ class CrossFilter(object): def type(self, filter_type): if filter_type not in _FILTER_TYPES.values(): msg = 'Unable to set Filter type to "{0}" since it is not one ' \ - 'of the supported types'.format(type) + 'of the supported types'.format(filter_type) raise ValueError(msg) self._type = filter_type diff --git a/openmc/tallies.py b/openmc/tallies.py index 197ae2949..13a219ded 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1468,19 +1468,31 @@ class Tally(object): new_name = '({0} {1} {2})'.format(self.name, binary_op, other.name) new_tally.name = new_name + # Create copies of self and other tallies to rearrange for tally + # arithmetic + self_copy = copy.deepcopy(self) + other_copy = copy.deepcopy(other) + # Find any shared filters between the two tallies - self_filters = set(self.filters) - other_filters = set(other.filters) - filter_intersect = self_filters.intersection(other_filters) + filter_intersect = [] + for filter in self_copy.filters: + if filter in other_copy.filters: + filter_intersect.append(filter) - # Align the shared filters to follow in each tally operand + # Align the shared filters in successive order for i, filter in enumerate(filter_intersect): - self_index = self.filters.index(filter) - other_filter = other.filters[self_index] - if other_filter != filter: - other = other.swap_filters(filter, other_filter) + self_index = self_copy.filters.index(filter) + other_index = other_copy.filters.index(filter) - data = self._align_tally_data(other) + # If necessary, swap self filter + if self_index != i: + self_copy.swap_filters(filter, self_copy.filters[i], inplace=True) + + # If necessary, swap other filter + if other_index != i: + other_copy.swap_filters(filter, other_copy.filters[i], inplace=True) + + data = self_copy._align_tally_data(other_copy) if binary_op == '+': new_tally._mean = data['self']['mean'] + data['other']['mean'] @@ -1511,16 +1523,16 @@ class Tally(object): new_tally._std_dev = np.abs(new_tally.mean) * \ np.sqrt(first_term**2 + second_term**2) - if self.estimator == other.estimator: - new_tally.estimator = self.estimator - if self.with_summary and other.with_summary: - new_tally.with_summary = self.with_summary - if self.num_realizations == other.num_realizations: - new_tally.num_realizations = self.num_realizations + if self_copy.estimator == other_copy.estimator: + new_tally.estimator = self_copy.estimator + if self_copy.with_summary and other_copy.with_summary: + new_tally.with_summary = self_copy.with_summary + if self_copy.num_realizations == other_copy.num_realizations: + new_tally.num_realizations = self_copy.num_realizations # If filters are identical, simply reuse them in derived tally - if self.filters == other.filters: - for self_filter in self.filters: + if self_copy.filters == other_copy.filters: + for self_filter in self_copy.filters: new_tally.add_filter(self_filter) # Generate filter "outer products" for non-identical filters @@ -1528,24 +1540,24 @@ class Tally(object): # Find the common longest sequence of shared filters match = 0 - for self_filter, other_filter in zip(self.filters, other.filters): + for self_filter, other_filter in zip(self_copy.filters, other_copy.filters): if self_filter == other_filter: match += 1 else: break - match_filters = self.filters[:match] - cross_filters = [self.filters[match:], other.filters[match:]] + match_filters = self_copy.filters[:match] + cross_filters = [self_copy.filters[match:], other_copy.filters[match:]] # Simply reuse shared filters in derived tally for filter in match_filters: new_tally.add_filter(filter) # Use cross filters to combine non-shared filters in derived tally - if len(self.filters) != match and len(other.filters) == match: + if len(self_copy.filters) != match and len(other_copy.filters) == match: for filter in cross_filters[0]: new_tally.add_filter(filter) - elif len(other.filters) == match and len(other.filters) != match: + elif len(self_copy.filters) == match and len(other_copy.filters) != match: for filter in cross_filters[1]: new_tally.add_filter(filter) else: @@ -1554,23 +1566,23 @@ class Tally(object): new_tally.add_filter(new_filter) # Generate score "outer products" - if self.scores == other.scores: - new_tally.num_score_bins = self.num_score_bins - for self_score in self.scores: + if self_copy.scores == other_copy.scores: + new_tally.num_score_bins = self_copy.num_score_bins + for self_score in self_copy.scores: new_tally.add_score(self_score) else: - new_tally.num_score_bins = self.num_score_bins * other.num_score_bins - all_scores = [self.scores, other.scores] + new_tally.num_score_bins = self_copy.num_score_bins * other_copy.num_score_bins + all_scores = [self_copy.scores, other_copy.scores] for self_score, other_score in itertools.product(*all_scores): new_score = CrossScore(self_score, other_score, binary_op) new_tally.add_score(new_score) # Generate nuclide "outer products" - if self.nuclides == other.nuclides: - for self_nuclide in self.nuclides: + if self_copy.nuclides == other_copy.nuclides: + for self_nuclide in self_copy.nuclides: new_tally.nuclides.append(self_nuclide) else: - all_nuclides = [self.nuclides, other.nuclides] + all_nuclides = [self_copy.nuclides, other_copy.nuclides] for self_nuclide, other_nuclide in itertools.product(*all_nuclides): new_nuclide = CrossNuclide(self_nuclide, other_nuclide, binary_op) new_tally.add_nuclide(new_nuclide) @@ -1630,8 +1642,8 @@ class Tally(object): self_repeat_factor *= filter.num_bins # Tile / repeat the tally data for the tally outer product - self_shape = list(self.mean.shape) - other_shape = list(other.mean.shape) + self_shape = list(self_mean.shape) + other_shape = list(other_mean.shape) self_shape[0] *= self_repeat_factor self_mean = np.repeat(self_mean, self_repeat_factor) self_std_dev = np.repeat(self_std_dev, self_repeat_factor) @@ -1639,7 +1651,8 @@ class Tally(object): if self_repeat_factor == 1: other_shape[0] *= other_tile_factor other_mean = np.repeat(other_mean, other_tile_factor, axis=0) - other_std_dev = np.repeat(other_std_dev, other_tile_factor, axis=0) + other_std_dev = np.repeat(other_std_dev, other_tile_factor, + axis=0) else: other_mean = np.tile(other_mean, (other_tile_factor, 1, 1)) other_std_dev = np.tile(other_std_dev, (other_tile_factor, 1, 1)) @@ -1658,7 +1671,11 @@ class Tally(object): self_repeat_factor = other.num_nuclides other_tile_factor = self.num_nuclides - # Replicate the data + # Tile / repeat the tally data for the tally outer product + self_shape = list(self_mean.shape) + other_shape = list(other_mean.shape) + self_shape[1] *= self_repeat_factor + other_shape[1] *= other_tile_factor self_mean = np.repeat(self_mean, self_repeat_factor, axis=1) other_mean = np.tile(other_mean, (1, other_tile_factor, 1)) self_std_dev = np.repeat(self_std_dev, self_repeat_factor, axis=1) @@ -1666,10 +1683,10 @@ class Tally(object): # NumPy repeat and tile routines return 1D flattened arrays # Reshape arrays as 3D with filters, nuclides and scores axes - self_shape = list(self.mean.shape) - self_shape[1] *= self_repeat_factor self_mean.shape = tuple(self_shape) self_std_dev.shape = tuple(self_shape) + other_mean.shape = tuple(other_shape) + other_std_dev.shape = tuple(other_shape) if self.scores != other.scores: @@ -1678,7 +1695,11 @@ class Tally(object): self_repeat_factor = other.num_score_bins other_tile_factor = self.num_score_bins - # Replicate the data + # Tile / repeat the tally data for the tally outer product + self_shape = list(self_mean.shape) + other_shape = list(other_mean.shape) + self_shape[2] *= self_repeat_factor + other_shape[2] *= other_tile_factor self_mean = np.repeat(self_mean, self_repeat_factor, axis=2) other_mean = np.tile(other_mean, (1, 1, other_tile_factor)) self_std_dev = np.repeat(self_std_dev, self_repeat_factor, axis=2) @@ -1686,10 +1707,10 @@ class Tally(object): # NumPy repeat and tile routines return 1D flattened arrays # Reshape arrays as 3D with filters, nuclides and scores axes - self_shape = list(self.mean.shape) - self_shape[2] *= self_repeat_factor self_mean.shape = tuple(self_shape) self_std_dev.shape = tuple(self_shape) + other_mean.shape = tuple(other_shape) + other_std_dev.shape = tuple(other_shape) data = {} data['self'] = {} @@ -1700,7 +1721,7 @@ class Tally(object): data['other']['std. dev.'] = other_std_dev return data - def swap_filters(self, filter1, filter2): + def swap_filters(self, filter1, filter2, inplace=False): """Reverse the ordering of two filters in this tally This is a helper method for tally arithmetic which helps align the data @@ -1715,10 +1736,15 @@ class Tally(object): filter2 : Filter The filter to swap with filter1 + inplace : bool, optional + Whether to perform operation inplace or return new tally with the + filters swapped. + Returns ------- swap_tally - A copy of this tally with the filters swapped + If inplace is false, a copy of this tally with the filters swapped. + Otherwise, nothing is returned. Raises ------ @@ -1749,7 +1775,15 @@ class Tally(object): 'does not contain such a filter'.format(filter2.type, self.id) raise ValueError(msg) - swap_tally = copy.deepcopy(self) + # Create a copy of the tally that preserves the original data formatting + # throughout swapping process + tally_copy = copy.deepcopy(self) + + # Set the swap tally + if inplace: + swap_tally = self + else: + swap_tally = copy.deepcopy(self) # Swap the filters in the copied version of this Tally filter1_index = swap_tally.filters.index(filter1) @@ -1776,42 +1810,43 @@ class Tally(object): filter2_bins = [filter2.get_bin(i) for i in range(filter2.num_bins)] # Adjust the sum data array to relect the new filter order - if self.sum is not None: + if swap_tally.sum is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): filter_bins = [(bin1,), (bin2,)] - data = self.get_values(filters=filters, - filter_bins=filter_bins, value='sum') + data = tally_copy.get_values( + filters=filters, filter_bins=filter_bins, value='sum') indices = swap_tally.get_filter_indices(filters, filter_bins) swap_tally.sum[indices, :, :] = data # Adjust the sum_sq data array to relect the new filter order - if self.sum_sq is not None: + if swap_tally.sum_sq is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): filter_bins = [(bin1,), (bin2,)] - data = self.get_values(filters=filters, - filter_bins=filter_bins, value='sum_sq') + data = tally_copy.get_values( + filters=filters, filter_bins=filter_bins, value='sum_sq') indices = swap_tally.get_filter_indices(filters, filter_bins) swap_tally.sum_sq[indices, :, :] = data # Adjust the mean data array to relect the new filter order - if self.mean is not None: + if swap_tally.mean is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): filter_bins = [(bin1,), (bin2,)] - data = self.get_values(filters=filters, - filter_bins=filter_bins, value='mean') + data = tally_copy.get_values( + filters=filters, filter_bins=filter_bins, value='mean') indices = swap_tally.get_filter_indices(filters, filter_bins) swap_tally._mean[indices, :, :] = data # Adjust the std_dev data array to relect the new filter order - if self.std_dev is not None: + if swap_tally.std_dev is not None: for bin1, bin2 in itertools.product(filter1_bins, filter2_bins): filter_bins = [(bin1,), (bin2,)] - data = self.get_values(filters=filters, - filter_bins=filter_bins, value='std_dev') + data = tally_copy.get_values( + filters=filters, filter_bins=filter_bins, value='std_dev') indices = swap_tally.get_filter_indices(filters, filter_bins) swap_tally._std_dev[indices, :, :] = data - return swap_tally + if not inplace: + return swap_tally def __add__(self, other): """Adds this tally to another tally or scalar value. @@ -2401,7 +2436,7 @@ class Tally(object): return new_tally def summation(self, scores=[], filter_type=None, - filter_bins=[], nuclides=[]): + filter_bins=[], nuclides=[], remove_filter=False): """Vectorized sum of tally data across scores, filter bins and/or nuclides using tally addition. @@ -2430,6 +2465,9 @@ class Tally(object): nuclides : list of str A list of nuclide name strings to sum across (e.g., ['U-235', 'U-238']; default is []) + remove_filter : bool + If a filter is being summed over, this bool indicates whether to + remove that filter in the returned tally. Default is False. Returns ------- @@ -2453,7 +2491,14 @@ class Tally(object): # Sum across any filter bins specified by the user if filter_type in _FILTER_TYPES: - filter_bins = [[(filter_bin,)] for filter_bin in filter_bins] + + # If user did not specify filter bins, sum across all bins + if len(filter_bins) == 0: + filter = self.find_filter(filter_type) + filter_bins = [[(filter.get_bin(i),)] for i in range(filter.num_bins)] + else: + filter_bins = [[(filter_bin,)] for filter_bin in filter_bins] + filters = [[filter_type]] # If user did not specify a filter type, do not sum across filter bins else: @@ -2478,12 +2523,17 @@ class Tally(object): # Accumulate this Tally slice into the Tally sum tally_sum += tally_slice - # Add back the filter(s) which were summed across to derived tally - for filter_type in summed_filters: - filters = summed_filters[filter_type] - for i in range(1, len(filters)): - filters[i] = CrossFilter(filters[i-1], filters[i], '+') - tally_sum.add_filter(filters[-1]) + # Add back the filter(s) which were summed across to derived tally, + # if filter bins were input; otherwise, leave out summed filter(s) + if remove_filter and filter_type is not None: + # Rename tally sum indicating a summation over a particular filter + tally_sum.name = 'sum({0}, {1})'.format(self.name, filter_type) + else: + for summed_filter_type in summed_filters: + filters = summed_filters[summed_filter_type] + for i in range(1, len(filters)): + filters[i] = CrossFilter(filters[i-1], filters[i], '+') + tally_sum.add_filter(filters[-1]) return tally_sum