diff --git a/openmc/cell.py b/openmc/cell.py index 23d10f74d..8cd87daf3 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -561,10 +561,9 @@ class Cell(object): # thus far. def create_surface_elements(node, element): if isinstance(node, Halfspace): - path = './surface[@id=\'{0}\']'.format(node.surface.id) + path = "./surface[@id='{}']".format(node.surface.id) if xml_element.find(path) is None: - surface_subelement = node.surface.create_xml_subelement() - xml_element.append(surface_subelement) + xml_element.append(node.surface.create_xml_subelement()) elif isinstance(node, Complement): create_surface_elements(node.node, element) else: diff --git a/openmc/geometry.py b/openmc/geometry.py index 4d822cc8e..70f9c928f 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -73,19 +73,16 @@ class Geometry(object): Path to file to write. Defaults to 'geometry.xml'. """ - # Clear OpenMC written IDs used to optimize XML generation - openmc.universe.WRITTEN_IDS = {} - # Create XML representation - geometry_file = ET.Element("geometry") - self.root_universe.create_xml_subelement(geometry_file) + root_element = ET.Element("geometry") + self.root_universe.create_xml_subelement(root_element) # Clean the indentation in the file to be user-readable - sort_xml_elements(geometry_file) - clean_xml_indentation(geometry_file) + sort_xml_elements(root_element) + clean_xml_indentation(root_element) # Write the XML Tree to the geometry.xml file - tree = ET.ElementTree(geometry_file) + tree = ET.ElementTree(root_element) tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") def find(self, point): diff --git a/openmc/material.py b/openmc/material.py index df4162ea0..a7a05989b 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -978,18 +978,18 @@ class Materials(cv.CheckedList): for material in self: material.make_isotropic_in_lab() - def _create_material_subelements(self, root): + def _create_material_subelements(self, root_element): for material in self: - root.append(material.to_xml_element(self.cross_sections)) + root_element.append(material.to_xml_element(self.cross_sections)) - def _create_cross_sections_subelement(self, root): + def _create_cross_sections_subelement(self, root_element): if self._cross_sections is not None: - element = ET.SubElement(root, "cross_sections") + element = ET.SubElement(root_element, "cross_sections") element.text = str(self._cross_sections) - def _create_multipole_library_subelement(self, root): + def _create_multipole_library_subelement(self, root_element): if self._multipole_library is not None: - element = ET.SubElement(root, "multipole_library") + element = ET.SubElement(root_element, "multipole_library") element.text = str(self._multipole_library) def export_to_xml(self, path='materials.xml'): @@ -1002,15 +1002,15 @@ class Materials(cv.CheckedList): """ - root = ET.Element("materials") - self._create_material_subelements(root) - self._create_cross_sections_subelement(root) - self._create_multipole_library_subelement(root) + root_element = ET.Element("materials") + self._create_material_subelements(root_element) + self._create_cross_sections_subelement(root_element) + self._create_multipole_library_subelement(root_element) # Clean the indentation in the file to be user-readable - sort_xml_elements(root) - clean_xml_indentation(root) + sort_xml_elements(root_element) + clean_xml_indentation(root_element) # Write the XML Tree to the materials.xml file - tree = ET.ElementTree(root) + tree = ET.ElementTree(root_element) tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") diff --git a/openmc/settings.py b/openmc/settings.py index cfb1d94e1..1cd3c19c7 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1180,43 +1180,43 @@ class Settings(object): """ # Reset xml element tree - root = ET.Element("settings") + root_element = ET.Element("settings") - self._create_run_mode_subelement(root) - self._create_source_subelement(root) - self._create_output_subelement(root) - self._create_statepoint_subelement(root) - self._create_sourcepoint_subelement(root) - self._create_confidence_intervals(root) - self._create_cross_sections_subelement(root) - self._create_multipole_library_subelement(root) - self._create_energy_mode_subelement(root) - self._create_max_order_subelement(root) - self._create_ptables_subelement(root) - self._create_run_cmfd_subelement(root) - self._create_seed_subelement(root) - self._create_survival_biasing_subelement(root) - self._create_cutoff_subelement(root) - self._create_entropy_subelement(root) - self._create_trigger_subelement(root) - self._create_no_reduce_subelement(root) - self._create_threads_subelement(root) - self._create_verbosity_subelement(root) - self._create_tabular_legendre_subelements(root) - self._create_temperature_subelements(root) - self._create_trace_subelement(root) - self._create_track_subelement(root) - self._create_ufs_subelement(root) - self._create_dd_subelement(root) - self._create_resonance_scattering_subelement(root) - self._create_volume_calcs_subelement(root) - self._create_create_fission_neutrons_subelement(root) + self._create_run_mode_subelement(root_element) + self._create_source_subelement(root_element) + self._create_output_subelement(root_element) + self._create_statepoint_subelement(root_element) + self._create_sourcepoint_subelement(root_element) + self._create_confidence_intervals(root_element) + self._create_cross_sections_subelement(root_element) + self._create_multipole_library_subelement(root_element) + self._create_energy_mode_subelement(root_element) + self._create_max_order_subelement(root_element) + self._create_ptables_subelement(root_element) + self._create_run_cmfd_subelement(root_element) + self._create_seed_subelement(root_element) + self._create_survival_biasing_subelement(root_element) + self._create_cutoff_subelement(root_element) + self._create_entropy_subelement(root_element) + self._create_trigger_subelement(root_element) + self._create_no_reduce_subelement(root_element) + self._create_threads_subelement(root_element) + self._create_verbosity_subelement(root_element) + self._create_tabular_legendre_subelements(root_element) + self._create_temperature_subelements(root_element) + self._create_trace_subelement(root_element) + self._create_track_subelement(root_element) + self._create_ufs_subelement(root_element) + self._create_dd_subelement(root_element) + self._create_resonance_scattering_subelement(root_element) + self._create_volume_calcs_subelement(root_element) + self._create_create_fission_neutrons_subelement(root_element) # Clean the indentation in the file to be user-readable - clean_xml_indentation(root) + clean_xml_indentation(root_element) # Write the XML Tree to the settings.xml file - tree = ET.ElementTree(root) + tree = ET.ElementTree(root_element) tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") diff --git a/openmc/tallies.py b/openmc/tallies.py index ff939856d..af57a1ffd 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -3458,23 +3458,23 @@ class Tallies(cv.CheckedList): "removed in a future version. Meshes do not need to be " "managed explicitly.", DeprecationWarning) - def _create_tally_subelements(self, root): + def _create_tally_subelements(self, root_element): for tally in self: - root.append(tally.to_xml_element()) + root_element.append(tally.to_xml_element()) - def _create_mesh_subelements(self, root): + def _create_mesh_subelements(self, root_element): already_written = set() for tally in self: for f in tally.filters: if isinstance(f, openmc.MeshFilter): if f.mesh not in already_written: if len(f.mesh.name) > 0: - root.append(ET.Comment(f.mesh.name)) + root_element.append(ET.Comment(f.mesh.name)) - root.append(f.mesh.to_xml_element()) + root_element.append(f.mesh.to_xml_element()) already_written.add(f.mesh) - def _create_derivative_subelements(self, root): + def _create_derivative_subelements(self, root_element): # Get a list of all derivatives referenced in a tally. derivs = [] for tally in self: @@ -3484,22 +3484,22 @@ class Tallies(cv.CheckedList): # Add the derivatives to the XML tree. for d in derivs: - root.append(d.to_xml_element()) + root_element.append(d.to_xml_element()) def export_to_xml(self): """Create a tallies.xml file that can be used for a simulation. """ - root = ET.Element("tallies") - self._create_mesh_subelements(root) - self._create_tally_subelements(root) - self._create_derivative_subelements(root) + root_element = ET.Element("tallies") + self._create_mesh_subelements(root_element) + self._create_tally_subelements(root_element) + self._create_derivative_subelements(root_element) # Clean the indentation in the file to be user-readable - clean_xml_indentation(root) + clean_xml_indentation(root_element) # Write the XML Tree to the tallies.xml file - tree = ET.ElementTree(root) + tree = ET.ElementTree(root_element) tree.write("tallies.xml", xml_declaration=True, encoding='utf-8', method="xml") diff --git a/openmc/universe.py b/openmc/universe.py index b2e7dbb92..b66a20cfe 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -10,10 +10,6 @@ import openmc import openmc.checkvalue as cv -# A dictionary for storing IDs of cell elements that have already been written, -# used to optimize the writing process -WRITTEN_IDS = {} - # A static variable for auto-generated Lattice (Universe) IDs AUTO_UNIVERSE_ID = 10000 @@ -453,17 +449,15 @@ class Universe(object): return universes def create_xml_subelement(self, xml_element): - # Iterate over all Cells for cell_id, cell in self._cells.items(): + path = "./cell[@id='{}']".format(cell_id) # If the cell was not already written, write it - if cell_id not in WRITTEN_IDS: - WRITTEN_IDS[cell_id] = None - + if xml_element.find(path) is None: # Create XML subelement for this Cell - cell_subelement = cell.create_xml_subelement(xml_element) + cell_element = cell.create_xml_subelement(xml_element) # Append the Universe ID to the subelement and add to Element - cell_subelement.set("universe", str(self._id)) - xml_element.append(cell_subelement) + cell_element.set("universe", str(self._id)) + xml_element.append(cell_element)