Get rid of WRITTEN_IDS global variable

This commit is contained in:
Paul Romano 2016-12-09 16:53:08 -06:00
parent 40ce4fe84d
commit 357aa894c8
6 changed files with 70 additions and 80 deletions

View file

@ -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:

View file

@ -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):

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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)