From 48a47cacda418beeec9c1b42c32ea0a99a168c5b Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 22 Dec 2015 16:02:09 -0800 Subject: [PATCH] added moment orders to summary file --- .../pythonapi/examples/tally-arithmetic.ipynb | 64 ++++++++----------- openmc/summary.py | 13 +++- openmc/tallies.py | 8 ++- src/summary.F90 | 35 +++++++++- 4 files changed, 78 insertions(+), 42 deletions(-) diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 3ec974e057..18a19c991c 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -363,26 +363,7 @@ "outputs": [ { "data": { - "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" - ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB98MFg87MxcAKAsAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/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\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMjJUMTU6NTk6\nNTEtMDg6MDCDpzvTAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTEyLTIyVDE1OjU5OjUxLTA4OjAw\n8vqDbwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -591,9 +572,9 @@ "\n", " 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: 74ffcb447521c968fb64fdaa63e40598783f2fba\n", - " Date/Time: 2015-11-25 14:20:51\n", + " Version: 0.7.1\n", + " Git SHA1: 6ca9e70a7073921f3c86c1313a442a973abbd12a\n", + " Date/Time: 2015-12-22 15:59:51\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -650,20 +631,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\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", + " Total time for initialization = 6.9900E-01 seconds\n", + " Reading cross sections = 1.9100E-01 seconds\n", + " Total time in simulation = 1.7186E+01 seconds\n", + " Time in transport only = 1.7171E+01 seconds\n", + " Time in inactive batches = 2.4100E+00 seconds\n", + " Time in active batches = 1.4776E+01 seconds\n", + " Time synchronizing fission bank = 1.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\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", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for finalization = 3.0000E-03 seconds\n", + " Total time elapsed = 1.7901E+01 seconds\n", + " Calculation Rate (inactive) = 5186.72 neutrons/second\n", + " Calculation Rate (active) = 2537.90 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1579,6 +1560,15 @@ " filters=['cell'], filter_bins=[(moderator_cell.id,)])\n", "slice_test.get_pandas_dataframe()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -1597,7 +1587,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.10" + "version": "2.7.11" } }, "nbformat": 4, diff --git a/openmc/summary.py b/openmc/summary.py index b97b77b308..8e8d4bc7ee 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -521,10 +521,19 @@ class Summary(object): # Create Tally object and assign basic properties tally = openmc.Tally(tally_id, tally_name) + # Read scattering moment order strings (e.g., P3, Y-1,2, etc.) + moments = self._f['{0}/moment_orders'.format(subbase)].value + # Read score metadata scores = self._f['{0}/score_bins'.format(subbase)].value - for score in scores: - tally.add_score(score.decode()) + for j, score in enumerate(scores): + score = score.decode() + + # If this is a moment, use generic moment order + pattern = r'-n$|-pn$|-yn$' + score = re.sub(pattern, '-' + moments[j].decode(), score) + + tally.add_score(score) # Read filter metadata num_filters = self._f['{0}/n_filters'.format(subbase)].value diff --git a/openmc/tallies.py b/openmc/tallies.py index 75e69a4c10..c6331f594e 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -449,9 +449,13 @@ class Tally(object): 'not a string'.format(score, self.id) raise ValueError(msg) - # If the score is already in the Tally, don't add it again + # If the score is already in the Tally, raise an error if score in self.scores: - return + msg = 'Unable to add a duplicate score {0} to Tally ID="{1}" ' \ + 'since duplicate scores are not supported in the OpenMC ' \ + 'Python API'.format(score, self.id) + raise ValueError(msg) + # Normal score strings if isinstance(score, basestring): self._scores.append(score.strip()) diff --git a/src/summary.F90 b/src/summary.F90 index f2c261ec75..187abc26c9 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -484,8 +484,10 @@ contains subroutine write_tallies(file_id) integer(HID_T), intent(in) :: file_id - integer :: i, j + integer :: i, j, k integer :: i_list, i_xs + integer :: n_order ! loop index for moment orders + integer :: nm_order ! loop index for Ynm moment orders integer(HID_T) :: tallies_group integer(HID_T) :: mesh_group integer(HID_T) :: tally_group @@ -664,6 +666,37 @@ contains deallocate(str_array) + ! Write explicit moment order strings for each score bin + k = 1 + allocate(str_array(t%n_score_bins)) + MOMENT_LOOP: do j = 1, t%n_user_score_bins + select case(t%score_bins(k)) + case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) + str_array(k) = 'P' // trim(to_str(t%moment_order(k))) + k = k + 1 + case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) + do n_order = 0, t%moment_order(k) + str_array(k) = 'P' // trim(to_str(n_order)) + k = k + 1 + end do + case (SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN, SCORE_FLUX_YN, & + SCORE_TOTAL_YN) + do n_order = 0, t%moment_order(k) + do nm_order = -n_order, n_order + str_array(k) = 'Y' // trim(to_str(n_order)) // ',' // & + trim(to_str(nm_order)) + k = k + 1 + end do + end do + case default + str_array(k) = '' + k = k + 1 + end select + end do MOMENT_LOOP + + call write_dataset(tally_group, "moment_orders", str_array) + deallocate(str_array) + call close_group(tally_group) end do TALLY_METADATA