diff --git a/openmc/tallies.py b/openmc/tallies.py index ab0bebc8d..7396635d0 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -3468,6 +3468,20 @@ class Tallies(cv.CheckedList): # Continue iterating from the first loop break + def remove_duplicate_filters(self): + """Search all tallies for any identical filters and set the IDs of + identical filters to the same value. This prevents a filter from being + written multiple times to the tallies.xml input file. + + """ + + for tally1 in self: + for filter1 in tally1.filters: + for tally2 in self: + for filter2 in tally2.filters: + if filter1 == filter2: + filter2.id = filter1.id + def add_mesh(self, mesh): """Add a mesh to the file @@ -3539,16 +3553,23 @@ class Tallies(cv.CheckedList): for d in derivs: root_element.append(d.to_xml_element()) - def export_to_xml(self, path='tallies.xml'): + def export_to_xml(self, path='tallies.xml', reduce_filters=True): """Create a tallies.xml file that can be used for a simulation. Parameters ---------- path : str Path to file to write. Defaults to 'tallies.xml'. + reduce_filters : bool + Indicates whether duplicate filters should be removed. This + prevents identical filters with different user IDs from being + written to the tallies.xml input file. Defaults to True. """ + if reduce_filters: + self.remove_duplicate_filters() + root_element = ET.Element("tallies") self._create_mesh_subelements(root_element) self._create_filter_subelements(root_element)