mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-26 13:15:39 -04:00
Get rid of WRITTEN_IDS global variable
This commit is contained in:
parent
40ce4fe84d
commit
357aa894c8
6 changed files with 70 additions and 80 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue