diff --git a/docs/source/pythonapi/examples/multi-group-cross-sections.ipynb b/docs/source/pythonapi/examples/multi-group-cross-sections.ipynb index 511328d25..ada6989b4 100644 --- a/docs/source/pythonapi/examples/multi-group-cross-sections.ipynb +++ b/docs/source/pythonapi/examples/multi-group-cross-sections.ipynb @@ -466,7 +466,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.0\n", " Git SHA1: 170155e8d7935b57fad57bfad6aff1034a80206e\n", - " Date/Time: 2015-10-12 23:49:21\n", + " Date/Time: 2015-10-13 00:55:08\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -551,20 +551,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.2400E-01 seconds\n", - " Reading cross sections = 9.5000E-02 seconds\n", - " Total time in simulation = 1.3063E+01 seconds\n", - " Time in transport only = 1.3047E+01 seconds\n", - " Time in inactive batches = 2.0150E+00 seconds\n", - " Time in active batches = 1.1048E+01 seconds\n", - " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", - " Total time for finalization = 2.0000E-03 seconds\n", - " Total time elapsed = 1.3498E+01 seconds\n", - " Calculation Rate (inactive) = 12406.9 neutrons/second\n", - " Calculation Rate (active) = 9051.41 neutrons/second\n", + " Total time for initialization = 3.9300E-01 seconds\n", + " Reading cross sections = 9.1000E-02 seconds\n", + " Total time in simulation = 1.2182E+01 seconds\n", + " Time in transport only = 1.2171E+01 seconds\n", + " Time in inactive batches = 1.7420E+00 seconds\n", + " Time in active batches = 1.0440E+01 seconds\n", + " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Sampling source sites = 1.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 1.2585E+01 seconds\n", + " Calculation Rate (inactive) = 14351.3 neutrons/second\n", + " Calculation Rate (active) = 9578.54 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -679,7 +679,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1486: RuntimeWarning: invalid value encountered in divide\n" + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1487: RuntimeWarning: invalid value encountered in divide\n" ] } ], @@ -1407,7 +1407,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1428,6 +1428,28 @@ " xs_library[cell.id]['chi'] = mgxs.Chi(groups=fine_groups)" ] }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create a tally trigger set to 10% on the relative error\n", + "tally_trigger = openmc.Trigger('variance', 1E-5)\n", + "\n", + "# Add the tally trigger to each of the multi-group cross section tallies\n", + "for cell in openmc_cells:\n", + " for mgxs_type in xs_library[cell.id].keys():\n", + " xs_library[cell.id][mgxs_type].tally_trigger = tally_trigger\n", + " \n", + "# Set the trigger to active in the \"settings.xml\" file\n", + "settings_file.trigger_active = True\n", + "settings_file.trigger_max_batches = settings_file.batches * 2\n", + "settings_file.export_to_xml()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1437,7 +1459,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1477,18 +1499,150 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " .d88888b. 888b d888 .d8888b.\n", + " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", + " 888 888 88888b.d88888 888 888\n", + " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", + " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", + " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", + " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", + " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", + "__________________888______________________________________________________\n", + " 888\n", + " 888\n", + "\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: 170155e8d7935b57fad57bfad6aff1034a80206e\n", + " Date/Time: 2015-10-13 00:55:22\n", + " MPI Processes: 1\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading cross sections XML file...\n", + " Reading geometry XML file...\n", + " Reading materials XML file...\n", + " Reading tallies XML file...\n", + " Building neighboring cells lists for each surface...\n", + " Loading ACE cross section table: 92235.71c\n", + " Loading ACE cross section table: 92238.71c\n", + " Loading ACE cross section table: 8016.71c\n", + " Loading ACE cross section table: 1001.71c\n", + " Loading ACE cross section table: 40090.71c\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 1.27747 \n", + " 2/1 1.24641 \n", + " 3/1 1.23998 \n", + " 4/1 1.22236 \n", + " 5/1 1.22609 \n", + " 6/1 1.14473 \n", + " 7/1 1.21385 \n", + " 8/1 1.17205 \n", + " 9/1 1.18419 \n", + " 10/1 1.22500 \n", + " 11/1 1.24778 \n", + " 12/1 1.23680 1.24229 +/- 0.00549\n", + " 13/1 1.23752 1.24070 +/- 0.00355\n", + " 14/1 1.26918 1.24782 +/- 0.00755\n", + " 15/1 1.23346 1.24495 +/- 0.00651\n", + " 16/1 1.23687 1.24360 +/- 0.00549\n", + " 17/1 1.22006 1.24024 +/- 0.00573\n", + " 18/1 1.23162 1.23916 +/- 0.00508\n", + " 19/1 1.22456 1.23754 +/- 0.00476\n", + " 20/1 1.21237 1.23502 +/- 0.00495\n", + " 21/1 1.24915 1.23631 +/- 0.00466\n", + " 22/1 1.17014 1.23079 +/- 0.00696\n", + " 23/1 1.18388 1.22718 +/- 0.00735\n", + " 24/1 1.20614 1.22568 +/- 0.00697\n", + " 25/1 1.22888 1.22589 +/- 0.00649\n", + " 26/1 1.20734 1.22473 +/- 0.00618\n", + " 27/1 1.28731 1.22841 +/- 0.00688\n", + " 28/1 1.16533 1.22491 +/- 0.00737\n", + " 29/1 1.23361 1.22537 +/- 0.00699\n", + " 30/1 1.22054 1.22513 +/- 0.00663\n", + " 31/1 1.26417 1.22699 +/- 0.00658\n", + " 32/1 1.23181 1.22720 +/- 0.00627\n", + " 33/1 1.21074 1.22649 +/- 0.00604\n", + " 34/1 1.21642 1.22607 +/- 0.00580\n", + " 35/1 1.26934 1.22780 +/- 0.00582\n", + " 36/1 1.24095 1.22831 +/- 0.00562\n", + " 37/1 1.22300 1.22811 +/- 0.00541\n", + " 38/1 1.20875 1.22742 +/- 0.00526\n", + " 39/1 1.21748 1.22708 +/- 0.00508\n", + " 40/1 1.24938 1.22782 +/- 0.00497\n", + " 41/1 1.21652 1.22745 +/- 0.00482\n", + " 42/1 1.22642 1.22742 +/- 0.00467\n", + " 43/1 1.20158 1.22664 +/- 0.00459\n", + " 44/1 1.22475 1.22658 +/- 0.00445\n", + " 45/1 1.25199 1.22731 +/- 0.00438\n", + " 46/1 1.25905 1.22819 +/- 0.00435\n", + " 47/1 1.20490 1.22756 +/- 0.00428\n", + " 48/1 1.20016 1.22684 +/- 0.00423\n", + " 49/1 1.21094 1.22643 +/- 0.00414\n", + " 50/1 1.22919 1.22650 +/- 0.00403\n", + " Triggers satisfied for batch 50\n", + " Creating state point statepoint.050.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 3.9200E-01 seconds\n", + " Reading cross sections = 8.7000E-02 seconds\n", + " Total time in simulation = 3.2711E+01 seconds\n", + " Time in transport only = 3.2694E+01 seconds\n", + " Time in inactive batches = 3.2750E+00 seconds\n", + " Time in active batches = 2.9436E+01 seconds\n", + " Time synchronizing fission bank = 4.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 = 8.0000E-03 seconds\n", + " Total time elapsed = 3.3120E+01 seconds\n", + " Calculation Rate (inactive) = 7633.59 neutrons/second\n", + " Calculation Rate (active) = 3397.20 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.22693 +/- 0.00341\n", + " k-effective (Track-length) = 1.22650 +/- 0.00403\n", + " k-effective (Absorption) = 1.22829 +/- 0.00354\n", + " Combined k-effective = 1.22762 +/- 0.00298\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + }, { "data": { "text/plain": [ "0" ] }, - "execution_count": 36, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1499,7 +1653,7 @@ "\n", "# Run OpenMC with the output throttled!\n", "executor = openmc.Executor()\n", - "executor.run_simulation(output=False)" + "executor.run_simulation(output=True)" ] }, { @@ -1518,14 +1672,14 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Load the last statepoint and summary files\n", - "sp = openmc.StatePoint('statepoint.50.h5')\n", + "sp = openmc.StatePoint('statepoint.050.h5')\n", "su = openmc.Summary('summary.h5')\n", "sp.link_with_summary(su)" ] @@ -1539,7 +1693,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1575,7 +1729,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1629,7 +1783,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "metadata": { "collapsed": false }, @@ -1671,7 +1825,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, "metadata": { "collapsed": false }, @@ -1801,7 +1955,7 @@ "119 10002 1 5 O-16 0.000000 0.000000" ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1821,7 +1975,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, "metadata": { "collapsed": false }, @@ -1849,7 +2003,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 44, "metadata": { "collapsed": false }, @@ -1858,7 +2012,7 @@ "data": { "image/png": "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\ned7lsJ91IAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1889,7 +2043,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "metadata": { "collapsed": true }, @@ -1911,7 +2065,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "metadata": { "collapsed": false }, @@ -1950,7 +2104,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -2033,7 +2187,7 @@ "2 10000 2 O-16 3.800027 0.024538" ] }, - "execution_count": 46, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -2059,7 +2213,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "metadata": { "collapsed": false }, @@ -2081,7 +2235,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "metadata": { "collapsed": false }, @@ -2129,7 +2283,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "metadata": { "collapsed": false }, @@ -2157,7 +2311,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -2192,7 +2346,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -2233,7 +2387,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "metadata": { "collapsed": false }, @@ -2251,7 +2405,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 54, "metadata": { "collapsed": false }, diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 533ca507d..1159dbe56 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -50,6 +50,9 @@ class Library(object): Domain type for spatial homogenization energy_groups : EnergyGroups Energy group structure for energy condensation + tally_trigger : Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section all_mgxs : dict MGXS objects keyed by domain ID and cross section type statepoint : openmc.StatePoint @@ -69,6 +72,7 @@ class Library(object): self._mgxs_types = [] self._domain_type = None self._energy_groups = None + self._tally_trigger = None self._all_mgxs = OrderedDict() self._statepoint = None @@ -91,6 +95,7 @@ class Library(object): clone._mgxs_types = self.mgxs_types clone._domain_type = self.domain_type clone._energy_groups = copy.deepcopy(self.energy_groups, memo) + clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._all_mgxs = self.all_mgxs clone._statepoint = self._statepoint @@ -145,6 +150,10 @@ class Library(object): def energy_groups(self): return self._energy_groups + @property + def tally_trigger(self): + return self._tally_trigger + @property def num_groups(self): return self.energy_groups.num_groups @@ -192,6 +201,11 @@ class Library(object): cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups + @tally_trigger.setter + def tally_trigger(self, tally_trigger): + cv.check_type('tally trigger', tally_trigger, openmc.Trigger) + self._tally_trigger = tally_trigger + def build_library(self): """Initialize MGXS objects in each domain and for each reaction type in the library. @@ -211,6 +225,11 @@ class Library(object): mgxs.domain_type = self.domain_type mgxs.energy_groups = self.energy_groups mgxs.by_nuclide = self.by_nuclide + + # If a tally trigger was specified, add it to the MGXS + if self.tally_trigger: + mgxs.tally_trigger = self.tally_trigger + mgxs.create_tallies() self.all_mgxs[domain.id][mgxs_type] = mgxs diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 79f86b080..6ef313c44 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -80,6 +80,9 @@ class MGXS(object): Domain type for spatial homogenization energy_groups : EnergyGroups Energy group structure for energy condensation + tally_trigger : Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section tallies : dict OpenMC tallies needed to compute the multi-group cross section xs_tally : Tally @@ -100,6 +103,7 @@ class MGXS(object): self._domain = None self._domain_type = None self._energy_groups = None + self._tally_trigger = None self._tallies = OrderedDict() self._xs_tally = None @@ -125,6 +129,7 @@ class MGXS(object): clone._domain = self.domain clone._domain_type = self.domain_type clone._energy_groups = copy.deepcopy(self.energy_groups, memo) + clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._xs_tally = copy.deepcopy(self.xs_tally, memo) clone._tallies = OrderedDict() @@ -163,6 +168,10 @@ class MGXS(object): def energy_groups(self): return self._energy_groups + @property + def tally_trigger(self): + return self._tally_trigger + @property def num_groups(self): return self.energy_groups.num_groups @@ -220,6 +229,11 @@ class MGXS(object): cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups + @tally_trigger.setter + def tally_trigger(self, tally_trigger): + cv.check_type('tally trigger', tally_trigger, openmc.Trigger) + self._tally_trigger = tally_trigger + @staticmethod def get_mgxs(mgxs_type, domain=None, domain_type=None, energy_groups=None, by_nuclide=False, name=''): @@ -431,6 +445,12 @@ class MGXS(object): self.tallies[key].estimator = estimator self.tallies[key].add_filter(domain_filter) + # If a tally trigger was specified, add it to each tally + if self.tally_trigger: + trigger_clone = copy.deepcopy(self.tally_trigger) + trigger_clone.add_score(score) + self.tallies[key].add_trigger(trigger_clone) + # Add all non-domain specific Filters (e.g., 'energy') to the Tally for filter in filters: self.tallies[key].add_filter(filter) diff --git a/openmc/tallies.py b/openmc/tallies.py index 5baebd087..78e247cdc 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -390,7 +390,8 @@ class Tally(object): 'since "{1}" is not a Trigger'.format(self.id, trigger) raise ValueError(msg) - self._triggers.append(trigger) + if trigger not in self.triggers: + self.triggers.append(trigger) @id.setter def id(self, tally_id): diff --git a/openmc/trigger.py b/openmc/trigger.py index 5af477edd..bcac8c31c 100644 --- a/openmc/trigger.py +++ b/openmc/trigger.py @@ -58,6 +58,15 @@ class Trigger(object): else: return existing + def __eq__(self, other): + if str(self) == str(other): + return True + else: + return False + + def __ne__(self, other): + return not self == other + def __repr__(self): string = 'Trigger\n' string += '{0: <16}{1}{2}\n'.format('\tType', '=\t', self._trigger_type)