From 094eb958c1c110f77e7cc96c9d9136d88a5bdf7f Mon Sep 17 00:00:00 2001 From: zoeprieto <101403129+zoeprieto@users.noreply.github.com> Date: Wed, 22 Mar 2023 12:44:56 -0300 Subject: [PATCH 01/52] Add support for ncrystal materials --- openmc/plotter.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/openmc/plotter.py b/openmc/plotter.py index e2d18d085..9a939edc9 100644 --- a/openmc/plotter.py +++ b/openmc/plotter.py @@ -227,7 +227,7 @@ def plot_xs(this, types, divisor_types=None, temperature=294., data_type=None, def calculate_cexs(this, data_type, types, temperature=294., sab_name=None, - cross_sections=None, enrichment=None): + cross_sections=None, enrichment=None, ncrystal_cfg=None): """Calculates continuous-energy cross sections of a requested type. Parameters @@ -274,7 +274,8 @@ def calculate_cexs(this, data_type, types, temperature=294., sab_name=None, else: nuc = this energy_grid, xs = _calculate_cexs_nuclide(nuc, types, temperature, - sab_name, cross_sections) + sab_name, cross_sections, + ncrystal_cfg) # Convert xs (Iterable of Callable) to a grid of cross section values # calculated on the points in energy_grid for consistency with the # element and material functions. @@ -300,7 +301,7 @@ def calculate_cexs(this, data_type, types, temperature=294., sab_name=None, def _calculate_cexs_nuclide(this, types, temperature=294., sab_name=None, - cross_sections=None): + cross_sections=None, ncrystal_cfg=None): """Calculates continuous-energy cross sections of a requested type. Parameters @@ -438,6 +439,19 @@ def _calculate_cexs_nuclide(this, types, temperature=294., sab_name=None, [sab_sum, nuc[mt].xs[nucT]], [sab_Emax]) funcs.append(pw_funcs) + elif ncrystal_cfg: + import NCrystal + nc_scatter = NCrystal.createScatter(ncrystal_cfg) + nc_func = nc_scatter.crossSectionNonOriented + nc_emax = 5 # eV # this should be obtained from NCRYSTAL_MAX_ENERGY + energy_grid = np.union1d(np.geomspace(min(energy_grid), + 1.1*nc_emax, + 1000),energy_grid) # NCrystal does not have + # an intrinsic energy grid + pw_funcs = openmc.data.Regions1D( + [nc_func, nuc[mt].xs[nucT]], + [nc_emax]) + funcs.append(pw_funcs) else: funcs.append(nuc[mt].xs[nucT]) elif mt in nuc: @@ -540,6 +554,7 @@ def _calculate_cexs_elem_mat(this, types, temperature=294., # Load the library library = openmc.data.DataLibrary.from_xml(cross_sections) + ncrystal_cfg = None if isinstance(this, openmc.Material): # Expand elements in to nuclides with atomic densities nuc_fractions = this.get_nuclide_atom_densities() @@ -547,6 +562,8 @@ def _calculate_cexs_elem_mat(this, types, temperature=294., # with a common nuclides format between openmc.Material and # openmc.Element objects nuclides = {nuclide: nuclide for nuclide in nuc_fractions} + # Add NCrystal cfg string if it exists + ncrystal_cfg = this.ncrystal_cfg else: # Expand elements in to nuclides with atomic densities nuclides = this.expand(1., 'ao', enrichment=enrichment, @@ -584,7 +601,7 @@ def _calculate_cexs_elem_mat(this, types, temperature=294., nuc = nuclide[1] sab_tab = sabs[name] temp_E, temp_xs = calculate_cexs(nuc, 'nuclide', types, T, sab_tab, - cross_sections) + cross_sections, ncrystal_cfg=ncrystal_cfg) E.append(temp_E) # Since the energy grids are different, store the cross sections as # a tabulated function so they can be calculated on any grid needed. From 9ebacff23a1d0d1a38878c40ebe8ab819c7b1b4c Mon Sep 17 00:00:00 2001 From: zoeprieto <101403129+zoeprieto@users.noreply.github.com> Date: Wed, 29 Mar 2023 16:56:12 -0300 Subject: [PATCH 02/52] Update docstrings Added description of ncrystal_cfg --- openmc/plotter.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openmc/plotter.py b/openmc/plotter.py index 13cd69b40..0362a8d17 100644 --- a/openmc/plotter.py +++ b/openmc/plotter.py @@ -240,6 +240,8 @@ def calculate_cexs(this, types, temperature=294., sab_name=None, Enrichment for U235 in weight percent. For example, input 4.95 for 4.95 weight percent enriched U. Default is None (natural composition). + ncrystal_cfg : str, optional + Configuration string for NCrystal material. Returns ------- @@ -304,6 +306,8 @@ def _calculate_cexs_nuclide(this, types, temperature=294., sab_name=None, Name of S(a,b) library to apply to MT=2 data when applicable. cross_sections : str, optional Location of cross_sections.xml file. Default is None. + ncrystal_cfg : str, optional + Configuration string for NCrystal material. Returns ------- From 44a57b9a6fcc775b922fc7a4e930ca182202a565 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 8 Apr 2023 14:34:02 +0200 Subject: [PATCH 03/52] Improve error message about missing settings.xml --- src/settings.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/settings.cpp b/src/settings.cpp index 2f8fbd1d0..6fa01708e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -223,16 +223,11 @@ void read_settings_xml() std::string filename = settings::path_input + "settings.xml"; if (!file_exists(filename)) { if (run_mode != RunMode::PLOTTING) { - fatal_error( - fmt::format("Settings XML file '{}' does not exist! In order " - "to run OpenMC, you first need a set of input files; at a " - "minimum, this " - "includes settings.xml, geometry.xml, and materials.xml " - "or a single XML file containing all of these files. " - "Please consult " - "the user's guide at https://docs.openmc.org for further " - "information.", - filename)); + fatal_error("Could not find any XML input files! In order to run OpenMC, " + "you first need a set of input files; at a minimum, this " + "includes settings.xml, geometry.xml, and materials.xml or a " + "single model XML file. Please consult the user's guide at " + "https://docs.openmc.org for further information."); } else { // The settings.xml file is optional if we just want to make a plot. return; From d1036561a9a0ba510a50e1055a72f92bb91e7b63 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 8 Apr 2023 14:45:48 +0200 Subject: [PATCH 04/52] Make clear that passing model XML is valid on command line --- man/man1/openmc.1 | 8 +++++++- src/output.cpp | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/man/man1/openmc.1 b/man/man1/openmc.1 index 4aa288a8c..331e42ea0 100644 --- a/man/man1/openmc.1 +++ b/man/man1/openmc.1 @@ -8,7 +8,10 @@ sections are available. .SH SYNOPSIS \fBopenmc\fR [\fIoptions\fR] [\fIpath\fR] .PP -It is assumed that if no +.I path +specifies either the path to a single model XML file containing the full model +or a directory containing either a model.xml file or a set of individual XML +files (settings.xml, materials.xml, geometry.xml). It is assumed that if no .I path is specified, the XML input files are present in the current directory. .SH OPTIONS @@ -46,6 +49,9 @@ The behavior of .B openmc is affected by the following environment variables. .TP +.B OPENMC_CHAIN_FILE +Indicates the path to a depletion chain XML file. +.TP .B OPENMC_CROSS_SECTIONS Indicates the default path to the cross_sections.xml summary file that is used to locate HDF5 format cross section libraries if the user has not specified the diff --git a/src/output.cpp b/src/output.cpp index 666ae15b3..2b0a4024c 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -268,7 +268,7 @@ void print_usage() { if (mpi::master) { fmt::print( - "Usage: openmc [options] [directory]\n\n" + "Usage: openmc [options] [path]\n\n" "Options:\n" " -c, --volume Run in stochastic volume calculation mode\n" " -g, --geometry-debug Run with geometry debugging on\n" From 35ef5b06f847d43dc0cbebb62c7f42927b2b1fa6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 8 Apr 2023 14:58:00 +0200 Subject: [PATCH 05/52] Allow plots.xml to be read if model.xml doesn't contain plots --- src/initialize.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/initialize.cpp b/src/initialize.cpp index 6383af64e..9c0a05d37 100644 --- a/src/initialize.cpp +++ b/src/initialize.cpp @@ -358,7 +358,7 @@ bool read_model_xml() for (const auto& input : other_inputs) { if (file_exists(settings::path_input + input)) { warning((fmt::format("Other XML file input(s) are present. These files " - "will be ignored in favor of the {} file.", + "may be ignored in favor of the {} file.", model_filename))); break; } @@ -392,8 +392,16 @@ bool read_model_xml() // Initialize distribcell_filters prepare_distribcell(); - if (check_for_node(root, "plots")) + if (check_for_node(root, "plots")) { read_plots_xml(root.child("plots")); + } else { + // When no element is present in the model.xml file, check for a + // regular plots.xml file + std::string filename = settings::path_input + "plots.xml"; + if (file_exists(filename)) { + read_plots_xml(); + } + } return true; } From f5ad0466cd3906012f57fd979d5a5d73bf99a0a7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Sat, 8 Apr 2023 15:34:39 +0200 Subject: [PATCH 06/52] Allow Model.run to pass kwargs to export methods --- openmc/model/model.py | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/openmc/model/model.py b/openmc/model/model.py index 4202cf60b..65aad6de9 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -597,11 +597,13 @@ class Model: def run(self, particles=None, threads=None, geometry_debug=False, restart_file=None, tracks=False, output=True, cwd='.', openmc_exec='openmc', mpi_args=None, event_based=None, - export_model_xml=True): - """Runs OpenMC. If the C API has been initialized, then the C API is - used, otherwise, this method creates the XML files and runs OpenMC via - a system call. In both cases this method returns the path to the last - statepoint file generated. + export_model_xml=True, **export_kwargs): + """Run OpenMC + + If the C API has been initialized, then the C API is used, otherwise, + this method creates the XML files and runs OpenMC via a system call. In + both cases this method returns the path to the last statepoint file + generated. .. versionchanged:: 0.12 Instead of returning the final k-effective value, this function now @@ -630,27 +632,30 @@ class Model: output : bool, optional Capture OpenMC output from standard out cwd : str, optional - Path to working directory to run in. Defaults to the current - working directory. + Path to working directory to run in. Defaults to the current working + directory. openmc_exec : str, optional Path to OpenMC executable. Defaults to 'openmc'. mpi_args : list of str, optional - MPI execute command and any additional MPI arguments to pass, - e.g. ['mpiexec', '-n', '8']. + MPI execute command and any additional MPI arguments to pass, e.g. + ['mpiexec', '-n', '8']. event_based : None or bool, optional - Turns on event-based parallelism if True. If None, the value in - the Settings will be used. + Turns on event-based parallelism if True. If None, the value in the + Settings will be used. export_model_xml : bool, optional - Exports a single model.xml file rather than separate files. - Defaults to True. + Exports a single model.xml file rather than separate files. Defaults + to True. .. versionadded:: 0.13.3 + **export_kwargs + Keyword arguments passed to either :meth:`Model.export_to_model_xml` + or :meth:`Model.export_to_xml`. Returns ------- Path - Path to the last statepoint written by this run - (None if no statepoint was written) + Path to the last statepoint written by this run (None if no + statepoint was written) """ @@ -695,9 +700,9 @@ class Model: else: # Then run via the command line if export_model_xml: - self.export_to_model_xml() + self.export_to_model_xml(**export_kwargs) else: - self.export_to_xml() + self.export_to_xml(**export_kwargs) openmc.run(particles, threads, geometry_debug, restart_file, tracks, output, Path('.'), openmc_exec, mpi_args, event_based) From c1c6865026b687a2904e08eea38dc9329e8d40de Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Wed, 12 Apr 2023 14:00:48 -0400 Subject: [PATCH 07/52] added type hinting for weight_windows.py --- openmc/weight_windows.py | 56 ++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/openmc/weight_windows.py b/openmc/weight_windows.py index 65b9b7bb0..b825796dc 100644 --- a/openmc/weight_windows.py +++ b/openmc/weight_windows.py @@ -1,10 +1,12 @@ from __future__ import annotations from collections.abc import Iterable from numbers import Real, Integral -from typing import Iterable, List +from typing import Iterable, List, Optional, Union +import pathlib from xml.etree import ElementTree as ET import numpy as np +import h5py from openmc.filter import _PARTICLES from openmc.mesh import MeshBase, RectilinearMesh, UnstructuredMesh @@ -18,7 +20,7 @@ class WeightWindows(IDManagerMixin): """Mesh-based weight windows This class enables you to specify weight window parameters that are used in - a simulation. Multiple sets of weight windows can be defined for different + a simulation. Multiple sets of weight windows can be defined for differen t meshes and different particles. An iterable of :class:`WeightWindows` instances can be assigned to the :attr:`openmc.Settings.weight_windows` attribute, which is then exported to XML. @@ -103,16 +105,20 @@ class WeightWindows(IDManagerMixin): next_id = 1 used_ids = set() - def __init__(self, mesh, lower_ww_bounds, - upper_ww_bounds=None, - upper_bound_ratio=None, - energy_bounds=None, - particle_type='neutron', - survival_ratio=3, - max_lower_bound_ratio=None, - max_split=10, - weight_cutoff=1.e-38, - id=None): + def __init__( + self, + mesh: MeshBase, + lower_ww_bounds: np.ndarray, + upper_ww_bounds: Optional[np.ndarray] = None, + upper_bound_ratio: Optional[float] = None, + energy_bounds: Optional[Iterable[Real]] = None, + particle_type: str = 'neutron', + survival_ratio: float = 3, + max_lower_bound_ratio: Optional[float] = None, + max_split: int = 10, + weight_cutoff: float = 1.e-38, + id: Optional[int] = None + ): self.mesh = mesh self.id = id self.particle_type = particle_type @@ -161,7 +167,7 @@ class WeightWindows(IDManagerMixin): string += '{: <16}=\t{}\n'.format('\tWeight Cutoff', self._weight_cutoff) return string - def __eq__(self, other) -> bool: + def __eq__(self, other: WeightWindows) -> bool: # ensure that `other` is a WeightWindows object if not isinstance(other, WeightWindows): return False @@ -195,7 +201,7 @@ class WeightWindows(IDManagerMixin): return self._mesh @mesh.setter - def mesh(self, mesh): + def mesh(self, mesh: MeshBase): cv.check_type('Weight window mesh', mesh, MeshBase) self._mesh = mesh @@ -204,7 +210,7 @@ class WeightWindows(IDManagerMixin): return self._particle_type @particle_type.setter - def particle_type(self, pt): + def particle_type(self, pt: str): cv.check_value('Particle type', pt, _PARTICLES) self._particle_type = pt @@ -213,7 +219,7 @@ class WeightWindows(IDManagerMixin): return self._energy_bounds @energy_bounds.setter - def energy_bounds(self, bounds): + def energy_bounds(self, bounds: Iterable[Real]): cv.check_type('Energy bounds', bounds, Iterable, Real) self._energy_bounds = np.asarray(bounds) @@ -228,7 +234,7 @@ class WeightWindows(IDManagerMixin): return self._lower_ww_bounds @lower_ww_bounds.setter - def lower_ww_bounds(self, bounds): + def lower_ww_bounds(self, bounds: Iterable[Real]): cv.check_iterable_type('Lower WW bounds', bounds, Real, @@ -247,7 +253,7 @@ class WeightWindows(IDManagerMixin): return self._upper_ww_bounds @upper_ww_bounds.setter - def upper_ww_bounds(self, bounds): + def upper_ww_bounds(self, bounds: Iterable[Real]): cv.check_iterable_type('Upper WW bounds', bounds, Real, @@ -266,7 +272,7 @@ class WeightWindows(IDManagerMixin): return self._survival_ratio @survival_ratio.setter - def survival_ratio(self, val): + def survival_ratio(self, val: float): cv.check_type('Survival ratio', val, Real) cv.check_greater_than('Survival ratio', val, 1.0, True) self._survival_ratio = val @@ -276,7 +282,7 @@ class WeightWindows(IDManagerMixin): return self._max_lower_bound_ratio @max_lower_bound_ratio.setter - def max_lower_bound_ratio(self, val): + def max_lower_bound_ratio(self, val: float): cv.check_type('Maximum lower bound ratio', val, Real) cv.check_greater_than('Maximum lower bound ratio', val, 1.0) self._max_lower_bound_ratio = val @@ -286,7 +292,7 @@ class WeightWindows(IDManagerMixin): return self._max_split @max_split.setter - def max_split(self, val): + def max_split(self, val: int): cv.check_type('Max split', val, Integral) self._max_split = val @@ -295,7 +301,7 @@ class WeightWindows(IDManagerMixin): return self._weight_cutoff @weight_cutoff.setter - def weight_cutoff(self, cutoff): + def weight_cutoff(self, cutoff: float): cv.check_type('Weight cutoff', cutoff, Real) cv.check_greater_than('Weight cutoff', cutoff, 0.0, True) self._weight_cutoff = cutoff @@ -343,7 +349,7 @@ class WeightWindows(IDManagerMixin): return element @classmethod - def from_xml_element(cls, elem, root) -> WeightWindows: + def from_xml_element(cls, elem: ET.Element, root: ET.Element) -> WeightWindows: """Generate weight window settings from an XML element Parameters @@ -398,7 +404,7 @@ class WeightWindows(IDManagerMixin): ) @classmethod - def from_hdf5(cls, group, meshes) -> WeightWindows: + def from_hdf5(cls, group: h5py.Group, meshes: dict) -> WeightWindows: """Create weight windows from HDF5 group Parameters @@ -443,7 +449,7 @@ class WeightWindows(IDManagerMixin): ) -def wwinp_to_wws(path) -> List[WeightWindows]: +def wwinp_to_wws(path: Union[str, pathlib.Path]) -> List[WeightWindows]: """Create WeightWindows instances from a wwinp file .. versionadded:: 0.13.1 From 1a0f442bba581b17e87b57b1adabdfede43d04f7 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Wed, 12 Apr 2023 14:22:17 -0400 Subject: [PATCH 08/52] added return types for model.py --- openmc/model/model.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/openmc/model/model.py b/openmc/model/model.py index 4202cf60b..dd9251804 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -7,6 +7,7 @@ from numbers import Integral from tempfile import NamedTemporaryFile import warnings from xml.etree import ElementTree as ET +from typing import Optional import h5py @@ -16,6 +17,7 @@ from openmc.dummy_comm import DummyCommunicator from openmc.executor import _process_CLI_arguments from openmc.checkvalue import check_type, check_value from openmc.exceptions import InvalidIDError +from openmc.model import Model @contextmanager @@ -93,27 +95,27 @@ class Model: self.plots = plots @property - def geometry(self): + def geometry(self) -> Optional[openmc.Geometry]: return self._geometry @property - def materials(self): + def materials(self) -> Optional[openmc.Materials]: return self._materials @property - def settings(self): + def settings(self) -> Optional[openmc.Settings]: return self._settings @property - def tallies(self): + def tallies(self) -> Optional[openmc.Tallies]: return self._tallies @property - def plots(self): + def plots(self) -> Optional[openmc.Plots]: return self._plots @property - def is_initialized(self): + def is_initialized(self) -> bool: try: import openmc.lib return openmc.lib.is_initialized @@ -122,7 +124,7 @@ class Model: @property @lru_cache(maxsize=None) - def _materials_by_id(self): + def _materials_by_id(self) -> dict: """Dictionary mapping material ID --> material""" if self.materials: mats = self.materials @@ -132,14 +134,14 @@ class Model: @property @lru_cache(maxsize=None) - def _cells_by_id(self): + def _cells_by_id(self) -> dict: """Dictionary mapping cell ID --> cell""" cells = self.geometry.get_all_cells() return {cell.id: cell for cell in cells.values()} @property @lru_cache(maxsize=None) - def _cells_by_name(self): + def _cells_by_name(self) -> dict: # Get the names maps, but since names are not unique, store a set for # each name key. In this way when the user requests a change by a name, # the change will be applied to all of the same name. @@ -152,7 +154,7 @@ class Model: @property @lru_cache(maxsize=None) - def _materials_by_name(self): + def _materials_by_name(self) -> dict: if self.materials is None: mats = self.geometry.get_all_materials().values() else: @@ -207,7 +209,7 @@ class Model: @classmethod def from_xml(cls, geometry='geometry.xml', materials='materials.xml', settings='settings.xml', tallies='tallies.xml', - plots='plots.xml'): + plots='plots.xml') -> Model: """Create model from existing XML files Parameters @@ -597,7 +599,7 @@ class Model: def run(self, particles=None, threads=None, geometry_debug=False, restart_file=None, tracks=False, output=True, cwd='.', openmc_exec='openmc', mpi_args=None, event_based=None, - export_model_xml=True): + export_model_xml=True) -> Optional[Path]: """Runs OpenMC. If the C API has been initialized, then the C API is used, otherwise, this method creates the XML files and runs OpenMC via a system call. In both cases this method returns the path to the last From 7ca82b59aa798bf2729e809c440d2630c718fb20 Mon Sep 17 00:00:00 2001 From: "Travis J. Labossiere-Hickman" Date: Wed, 12 Apr 2023 12:22:45 -0600 Subject: [PATCH 09/52] Update the 2016 references to 2020 --- openmc/data/data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/data/data.py b/openmc/data/data.py index 6793dff2e..16c7ecf54 100644 --- a/openmc/data/data.py +++ b/openmc/data/data.py @@ -207,8 +207,8 @@ _LOG_TWO = log(2.0) def atomic_mass(isotope): """Return atomic mass of isotope in atomic mass units. - Atomic mass data comes from the `Atomic Mass Evaluation 2016 - `_. + Atomic mass data comes from the `Atomic Mass Evaluation 2020 + `_. Parameters ---------- From 3692e7331fc3315b208b9e794f4ef534b7fd4664 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Wed, 12 Apr 2023 14:41:14 -0400 Subject: [PATCH 10/52] added return types for geometry.py --- openmc/geometry.py | 57 ++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index ad86cc56b..88871c544 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -1,12 +1,15 @@ +from __future__ import annotations import os -import typing +import typing from collections import OrderedDict, defaultdict from collections.abc import Iterable from copy import deepcopy from pathlib import Path -from xml.etree import ElementTree as ET import warnings +from xml.etree import ElementTree as ET +import numpy as np + import openmc import openmc._xml as xml from .checkvalue import check_type, check_less_than, check_greater_than, PathLike @@ -51,19 +54,19 @@ class Geometry: self._root_universe = univ @property - def root_universe(self): + def root_universe(self) -> openmc.UniverseBase: return self._root_universe @property - def bounding_box(self): + def bounding_box(self) -> np.ndarray: return self.root_universe.bounding_box @property - def merge_surfaces(self): + def merge_surfaces(self) -> bool: return self._merge_surfaces @property - def surface_precision(self): + def surface_precision(self) -> int: return self._surface_precision @root_universe.setter @@ -105,7 +108,7 @@ class Geometry: if universe.id in volume_calc.volumes: universe.add_volume_information(volume_calc) - def to_xml_element(self, remove_surfs=False): + def to_xml_element(self, remove_surfs=False) -> ET.Element: """Creates a 'geometry' element to be written to an XML file. Parameters @@ -164,7 +167,7 @@ class Geometry: tree.write(str(p), xml_declaration=True, encoding='utf-8') @classmethod - def from_xml_element(cls, elem, materials=None): + def from_xml_element(cls, elem, materials=None) -> openmc.Geometry: """Generate geometry from an XML element Parameters @@ -260,7 +263,7 @@ class Geometry: cls, path: PathLike = 'geometry.xml', materials: typing.Optional[typing.Union[PathLike, 'openmc.Materials']] = 'materials.xml' - ): + ) -> openmc.Geometry: """Generate geometry from XML file Parameters @@ -290,7 +293,7 @@ class Geometry: return cls.from_xml_element(root, materials) - def find(self, point): + def find(self, point) -> list: """Find cells/universes/lattices which contain a given point Parameters @@ -307,7 +310,7 @@ class Geometry: """ return self.root_universe.find(point) - def get_instances(self, paths): + def get_instances(self, paths) -> typing.Union[int, typing.List[int]]: """Return the instance number(s) for a cell/material in a geometry path. The instance numbers are used as indices into distributed @@ -354,7 +357,7 @@ class Geometry: return indices if return_list else indices[0] - def get_all_cells(self): + def get_all_cells(self) -> OrderedDict: """Return all cells in the geometry. Returns @@ -368,7 +371,7 @@ class Geometry: else: return OrderedDict() - def get_all_universes(self): + def get_all_universes(self) -> OrderedDict: """Return all universes in the geometry. Returns @@ -383,7 +386,7 @@ class Geometry: universes.update(self.root_universe.get_all_universes()) return universes - def get_all_materials(self): + def get_all_materials(self) -> OrderedDict: """Return all materials within the geometry. Returns @@ -398,7 +401,7 @@ class Geometry: else: return OrderedDict() - def get_all_material_cells(self): + def get_all_material_cells(self) -> OrderedDict: """Return all cells filled by a material Returns @@ -417,7 +420,7 @@ class Geometry: return material_cells - def get_all_material_universes(self): + def get_all_material_universes(self) -> OrderedDict: """Return all universes having at least one material-filled cell. This method can be used to find universes that have at least one cell @@ -440,7 +443,7 @@ class Geometry: return material_universes - def get_all_lattices(self): + def get_all_lattices(self) -> OrderedDict: """Return all lattices defined Returns @@ -458,7 +461,7 @@ class Geometry: return lattices - def get_all_surfaces(self): + def get_all_surfaces(self) -> OrderedDict: """ Return all surfaces used in the geometry @@ -475,7 +478,7 @@ class Geometry: surfaces = cell.region.get_surfaces(surfaces) return surfaces - def _get_domains_by_name(self, name, case_sensitive, matching, domain_type): + def _get_domains_by_name(self, name, case_sensitive, matching, domain_type) -> list: if not case_sensitive: name = name.lower() @@ -492,7 +495,7 @@ class Geometry: domains.sort(key=lambda x: x.id) return domains - def get_materials_by_name(self, name, case_sensitive=False, matching=False): + def get_materials_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Material]: """Return a list of materials with matching names. Parameters @@ -513,7 +516,7 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'material') - def get_cells_by_name(self, name, case_sensitive=False, matching=False): + def get_cells_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Cell]: """Return a list of cells with matching names. Parameters @@ -534,7 +537,7 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'cell') - def get_surfaces_by_name(self, name, case_sensitive=False, matching=False): + def get_surfaces_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Surface]: """Return a list of surfaces with matching names. .. versionadded:: 0.13.3 @@ -557,7 +560,7 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'surface') - def get_cells_by_fill_name(self, name, case_sensitive=False, matching=False): + def get_cells_by_fill_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Cell]: """Return a list of cells with fills with matching names. Parameters @@ -602,7 +605,7 @@ class Geometry: return sorted(cells, key=lambda x: x.id) - def get_universes_by_name(self, name, case_sensitive=False, matching=False): + def get_universes_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Universe]: """Return a list of universes with matching names. Parameters @@ -623,7 +626,7 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'universe') - def get_lattices_by_name(self, name, case_sensitive=False, matching=False): + def get_lattices_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Lattice]: """Return a list of lattices with matching names. Parameters @@ -644,7 +647,7 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'lattice') - def remove_redundant_surfaces(self): + def remove_redundant_surfaces(self) -> dict: """Remove and return all of the redundant surfaces. Uses surface_precision attribute of Geometry instance for rounding and @@ -707,7 +710,7 @@ class Geometry: # Recursively traverse the CSG tree to count all cell instances self.root_universe._determine_paths(instances_only=instances_only) - def clone(self): + def clone(self) -> Geometry: """Create a copy of this geometry with new unique IDs for all of its enclosed materials, surfaces, cells, universes and lattices.""" From f7457d6427aa708f7140782b9447af44b80150c5 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Wed, 12 Apr 2023 15:11:13 -0400 Subject: [PATCH 11/52] fixed circular import error --- openmc/model/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/model/model.py b/openmc/model/model.py index dd9251804..caf630180 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -1,3 +1,4 @@ +from __future__ import annotations from collections.abc import Iterable from contextlib import contextmanager from functools import lru_cache @@ -17,7 +18,6 @@ from openmc.dummy_comm import DummyCommunicator from openmc.executor import _process_CLI_arguments from openmc.checkvalue import check_type, check_value from openmc.exceptions import InvalidIDError -from openmc.model import Model @contextmanager From 5fc51209ce3faf0761ac2e697cde0c921fd9e181 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Wed, 12 Apr 2023 15:21:49 -0400 Subject: [PATCH 12/52] added return types for material.py --- openmc/material.py | 73 +++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index a2c6138d2..66a626668 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -1,3 +1,4 @@ +from __future__ import annotations from collections import OrderedDict, defaultdict, namedtuple, Counter from collections.abc import Iterable from copy import deepcopy @@ -6,7 +7,7 @@ from pathlib import Path import re import typing # imported separately as py3.8 requires typing.Iterable import warnings -from typing import Optional +from typing import Optional, List, Union from xml.etree import ElementTree as ET import h5py @@ -134,7 +135,7 @@ class Material(IDManagerMixin): # If specified, a list of table names self._sab = [] - def __repr__(self): + def __repr__(self) -> str: string = 'Material\n' string += '{: <16}=\t{}\n'.format('\tID', self._id) string += '{: <16}=\t{}\n'.format('\tName', self._name) @@ -166,34 +167,34 @@ class Material(IDManagerMixin): return string @property - def name(self): + def name(self) -> Optional[str]: return self._name @property - def temperature(self): + def temperature(self) -> Optional[float]: return self._temperature @property - def density(self): + def density(self) -> float: return self._density @property - def density_units(self): + def density_units(self) -> str: return self._density_units @property - def depletable(self): + def depletable(self) -> bool: return self._depletable @property - def paths(self): + def paths(self) -> List[str]: if self._paths is None: raise ValueError('Material instance paths have not been determined. ' 'Call the Geometry.determine_paths() method.') return self._paths @property - def num_instances(self): + def num_instances(self) -> int: if self._num_instances is None: raise ValueError( 'Number of material instances have not been determined. Call ' @@ -201,15 +202,15 @@ class Material(IDManagerMixin): return self._num_instances @property - def nuclides(self): + def nuclides(self) -> List[namedtuple]: return self._nuclides @property - def isotropic(self): + def isotropic(self) -> List[str]: return self._isotropic @property - def average_molar_mass(self): + def average_molar_mass(self) -> float: # Using the sum of specified atomic or weight amounts as a basis, sum # the mass and moles of the material mass = 0. @@ -226,11 +227,11 @@ class Material(IDManagerMixin): return mass / moles @property - def volume(self): + def volume(self) -> float: return self._volume @property - def ncrystal_cfg(self): + def ncrystal_cfg(self) -> str: return self._ncrystal_cfg @name.setter @@ -267,7 +268,7 @@ class Material(IDManagerMixin): self._isotropic = list(isotropic) @property - def fissionable_mass(self): + def fissionable_mass(self) -> float: if self.volume is None: raise ValueError("Volume must be set in order to determine mass.") density = 0.0 @@ -291,7 +292,7 @@ class Material(IDManagerMixin): return openmc.data.combine_distributions(dists, probs) if dists else None @classmethod - def from_hdf5(cls, group: h5py.Group): + def from_hdf5(cls, group: h5py.Group) -> openmc.Material: """Create material from HDF5 group Parameters @@ -346,7 +347,7 @@ class Material(IDManagerMixin): return material @classmethod - def from_ncrystal(cls, cfg, **kwargs): + def from_ncrystal(cls, cfg, **kwargs) -> openmc.Material: """Create material from NCrystal configuration string. Density, temperature, and material composition, and (ultimately) thermal @@ -881,7 +882,7 @@ class Material(IDManagerMixin): def make_isotropic_in_lab(self): self.isotropic = [x.name for x in self._nuclides] - def get_elements(self): + def get_elements(self) -> List[str]: """Returns all elements in the material .. versionadded:: 0.12 @@ -895,7 +896,7 @@ class Material(IDManagerMixin): return sorted({re.split(r'(\d+)', i)[0] for i in self.get_nuclides()}) - def get_nuclides(self, element: Optional[str] = None): + def get_nuclides(self, element: Optional[str] = None) -> List[str]: """Returns a list of all nuclides in the material, if the element argument is specified then just nuclides of that element are returned. @@ -925,7 +926,7 @@ class Material(IDManagerMixin): return matching_nuclides - def get_nuclide_densities(self): + def get_nuclide_densities(self) -> dict: """Returns all nuclides in the material and their densities Returns @@ -944,7 +945,7 @@ class Material(IDManagerMixin): return nuclides - def get_nuclide_atom_densities(self, nuclide: Optional[str] = None): + def get_nuclide_atom_densities(self, nuclide: Optional[str] = None) -> dict: """Returns one or all nuclides in the material and their atomic densities in units of atom/b-cm @@ -1030,7 +1031,7 @@ class Material(IDManagerMixin): return nuclides def get_activity(self, units: str = 'Bq/cm3', by_nuclide: bool = False, - volume: Optional[float] = None): + volume: Optional[float] = None) -> Union[dict, float]: """Returns the activity of the material or for each nuclide in the material in units of [Bq], [Bq/g] or [Bq/cm3]. @@ -1077,7 +1078,7 @@ class Material(IDManagerMixin): return activity if by_nuclide else sum(activity.values()) def get_decay_heat(self, units: str = 'W', by_nuclide: bool = False, - volume: Optional[float] = None): + volume: Optional[float] = None) -> Union[dict, float]: """Returns the decay heat of the material or for each nuclide in the material in units of [W], [W/g] or [W/cm3]. @@ -1125,7 +1126,7 @@ class Material(IDManagerMixin): return decayheat if by_nuclide else sum(decayheat.values()) - def get_nuclide_atoms(self, volume: Optional[float] = None): + def get_nuclide_atoms(self, volume: Optional[float] = None) -> dict: """Return number of atoms of each nuclide in the material .. versionadded:: 0.13.1 @@ -1154,7 +1155,7 @@ class Material(IDManagerMixin): atoms[nuclide] = 1.0e24 * atom_per_bcm * volume return atoms - def get_mass_density(self, nuclide: Optional[str] = None): + def get_mass_density(self, nuclide: Optional[str] = None) -> float: """Return mass density of one or all nuclides Parameters @@ -1176,7 +1177,7 @@ class Material(IDManagerMixin): mass_density += density_i return mass_density - def get_mass(self, nuclide: Optional[str] = None, volume: Optional[float] = None): + def get_mass(self, nuclide: Optional[str] = None, volume: Optional[float] = None) -> float: """Return mass of one or all nuclides. Note that this method requires that the :attr:`Material.volume` has @@ -1206,7 +1207,7 @@ class Material(IDManagerMixin): raise ValueError("Volume must be set in order to determine mass.") return volume*self.get_mass_density(nuclide) - def clone(self, memo: Optional[dict] = None): + def clone(self, memo: Optional[dict] = None) -> Material: """Create a copy of this material with a new unique ID. Parameters @@ -1245,7 +1246,7 @@ class Material(IDManagerMixin): return memo[self] - def _get_nuclide_xml(self, nuclide: str): + def _get_nuclide_xml(self, nuclide: str) -> ET.Element: xml_element = ET.Element("nuclide") xml_element.set("name", nuclide.name) @@ -1256,19 +1257,19 @@ class Material(IDManagerMixin): return xml_element - def _get_macroscopic_xml(self, macroscopic: str): + def _get_macroscopic_xml(self, macroscopic: str) -> ET.Element: xml_element = ET.Element("macroscopic") xml_element.set("name", macroscopic) return xml_element - def _get_nuclides_xml(self, nuclides: typing.Iterable[str]): + def _get_nuclides_xml(self, nuclides: typing.Iterable[str]) -> List[ET.Element]: xml_elements = [] for nuclide in nuclides: xml_elements.append(self._get_nuclide_xml(nuclide)) return xml_elements - def to_xml_element(self): + def to_xml_element(self) -> ET.Element: """Return XML representation of the material Returns @@ -1338,7 +1339,7 @@ class Material(IDManagerMixin): @classmethod def mix_materials(cls, materials, fracs: typing.Iterable[float], - percent_type: str = 'ao', name: Optional[str] = None): + percent_type: str = 'ao', name: Optional[str] = None) -> Material: """Mix materials together based on atom, weight, or volume fractions .. versionadded:: 0.12 @@ -1436,7 +1437,7 @@ class Material(IDManagerMixin): return new_mat @classmethod - def from_xml_element(cls, elem: ET.Element): + def from_xml_element(cls, elem: ET.Element) -> Material: """Generate material from an XML element Parameters @@ -1530,7 +1531,7 @@ class Materials(cv.CheckedList): self += materials @property - def cross_sections(self): + def cross_sections(self) -> Optional[Union[str, Path]]: return self._cross_sections @cross_sections.setter @@ -1638,7 +1639,7 @@ class Materials(cv.CheckedList): self._write_xml(fh) @classmethod - def from_xml_element(cls, elem): + def from_xml_element(cls, elem) -> Material: """Generate materials collection from XML file Parameters @@ -1665,7 +1666,7 @@ class Materials(cv.CheckedList): return materials @classmethod - def from_xml(cls, path: PathLike = 'materials.xml'): + def from_xml(cls, path: PathLike = 'materials.xml') -> Material: """Generate materials collection from XML file Parameters From 55473ee8a11d24600867d4c80c640b4386fea763 Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Tue, 21 Mar 2023 16:39:27 -0500 Subject: [PATCH 13/52] Adding DAGMC testfor lost particles --- tests/unit_tests/dagmc/broken_model.h5m | Bin 0 -> 1230000 bytes tests/unit_tests/dagmc/test_lost_particles.py | 98 ++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 tests/unit_tests/dagmc/broken_model.h5m create mode 100644 tests/unit_tests/dagmc/test_lost_particles.py diff --git a/tests/unit_tests/dagmc/broken_model.h5m b/tests/unit_tests/dagmc/broken_model.h5m new file mode 100644 index 0000000000000000000000000000000000000000..4bc6c7d4252e338cb669f4862e1e717321d47c80 GIT binary patch literal 1230000 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

+mof1Cq&JiUK#4q#62ADjc2)B6YK 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 NYmdPL|2sc;{ufnrRm%VX literal 0 HcmV?d00001 diff --git a/tests/unit_tests/dagmc/test_lost_particles.py b/tests/unit_tests/dagmc/test_lost_particles.py new file mode 100644 index 000000000..a5c88cbb8 --- /dev/null +++ b/tests/unit_tests/dagmc/test_lost_particles.py @@ -0,0 +1,98 @@ +import numpy as np +from pathlib import Path + +import openmc +import openmc.lib + +import pytest + +pytestmark = pytest.mark.skipif( + not openmc.lib._dagmc_enabled(), + reason="DAGMC CAD geometry is not enabled.") + + +@pytest.fixture +def broken_dagmc_model(request): + openmc.reset_auto_ids() + model = openmc.model.Model() + + ### MATERIALS ### + fuel = openmc.Material(name='no-void fuel') + fuel.set_density('g/cc', 10.29769) + fuel.add_nuclide('U234', 0.93120485) + fuel.add_nuclide('U235', 0.00055815) + fuel.add_nuclide('U238', 0.022408) + fuel.add_nuclide('O16', 0.045829) + + cladding = openmc.Material(name='clad') + cladding.set_density('g/cc', 6.55) + cladding.add_nuclide('Zr90', 0.021827) + cladding.add_nuclide('Zr91', 0.00476) + cladding.add_nuclide('Zr92', 0.0072758) + cladding.add_nuclide('Zr94', 0.0073734) + cladding.add_nuclide('Zr96', 0.0011879) + + water = openmc.Material(name='water') + water.set_density('g/cc', 0.740582) + water.add_nuclide('H1', 0.049457) + water.add_nuclide('O16', 0.024672) + water.add_nuclide('B10', 8.0042e-06) + water.add_nuclide('B11', 3.2218e-05) + water.add_s_alpha_beta('c_H_in_H2O') + + model.materials = openmc.Materials([fuel, cladding, water]) + + ### GEOMETRY ### + # create the DAGMC universe using a model that has many triangles + # removed + dagmc_file = Path(request.fspath).parent / "broken_model.h5m" + pincell_univ = openmc.DAGMCUniverse(filename=dagmc_file, auto_geom_ids=True) + + # create a 2 x 2 lattice using the DAGMC pincell + pitch = np.asarray((24.0, 24.0)) + lattice = openmc.RectLattice() + lattice.pitch = pitch + lattice.universes = [[pincell_univ] * 2] * 2 + lattice.lower_left = -pitch + + left = openmc.XPlane(x0=-pitch[0], name='left', boundary_type='reflective') + right = openmc.XPlane(x0=pitch[0], name='right', boundary_type='reflective') + front = openmc.YPlane(y0=-pitch[1], name='front', boundary_type='reflective') + back = openmc.YPlane(y0=pitch[1], name='back', boundary_type='reflective') + # clip the DAGMC geometry at +/- 10 cm w/ CSG planes + bottom = openmc.ZPlane(z0=-10.0, name='bottom', boundary_type='reflective') + top = openmc.ZPlane(z0=10.0, name='top', boundary_type='reflective') + + bounding_region = +left & -right & +front & -back & +bottom & -top + bounding_cell = openmc.Cell(fill=lattice, region=bounding_region) + + model.geometry = openmc.Geometry(root=[bounding_cell]) + + # settings + model.settings.particles = 100 + model.settings.batches = 10 + model.settings.inactive = 2 + model.settings.output = {'summary' : False} + + model.export_to_xml() + + return model + + +def test_lost_particles(run_in_tmpdir, broken_dagmc_model): + broken_dagmc_model.export_to_xml() + # ensure that particles will be lost when cell intersections can't be found + # due to the removed triangles in this model + with pytest.raises(RuntimeError, match='Maximum number of lost particles has been reached.'): + openmc.run() + + # run this again, but with the dagmc universe as the root unvierse + for univ in broken_dagmc_model.geometry.get_all_universes().values(): + if isinstance(univ, openmc.DAGMCUniverse): + broken_dagmc_model.geometry.root_unvierse = univ + break + + broken_dagmc_model.export_to_xml() + with pytest.raises(RuntimeError, match='Maximum number of lost particles has been reached.'): + openmc.run() + From 6b98142a121a59d0f21dcb5926e92551e409c001 Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Tue, 21 Mar 2023 16:41:49 -0500 Subject: [PATCH 14/52] Use openmc.UniverseBase in lattice module --- openmc/lattice.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/openmc/lattice.py b/openmc/lattice.py index 464daaf7e..b067b47a3 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -34,16 +34,16 @@ class Lattice(IDManagerMixin, ABC): Name of the lattice pitch : Iterable of float Pitch of the lattice in each direction in cm - outer : openmc.Universe + outer : openmc.UniverseBase A universe to fill all space outside the lattice - universes : Iterable of Iterable of openmc.Universe + universes : Iterable of Iterable of openmc.UniverseBase A two-or three-dimensional list/array of universes filling each element of the lattice """ next_id = 1 - used_ids = openmc.Universe.used_ids + used_ids = openmc.UniverseBase.used_ids def __init__(self, lattice_id=None, name=''): # Initialize Lattice class attributes @@ -79,7 +79,7 @@ class Lattice(IDManagerMixin, ABC): @outer.setter def outer(self, outer): - cv.check_type('outer universe', outer, openmc.Universe) + cv.check_type('outer universe', outer, openmc.UniverseBase) self._outer = outer @staticmethod @@ -92,7 +92,7 @@ class Lattice(IDManagerMixin, ABC): Group in HDF5 file universes : dict Dictionary mapping universe IDs to instances of - :class:`openmc.Universe`. + :class:`openmc.UniverseBase`. Returns ------- @@ -115,20 +115,20 @@ class Lattice(IDManagerMixin, ABC): ------- universes : collections.OrderedDict Dictionary whose keys are universe IDs and values are - :class:`openmc.Universe` instances + :class:`openmc.UniverseBase` instances """ univs = OrderedDict() for k in range(len(self._universes)): for j in range(len(self._universes[k])): - if isinstance(self._universes[k][j], openmc.Universe): + if isinstance(self._universes[k][j], openmc.UniverseBase): u = self._universes[k][j] univs[u._id] = u else: for i in range(len(self._universes[k][j])): u = self._universes[k][j][i] - assert isinstance(u, openmc.Universe) + assert isinstance(u, openmc.UniverseBase) univs[u._id] = u if self.outer is not None: @@ -246,7 +246,7 @@ class Lattice(IDManagerMixin, ABC): Returns ------- - openmc.Universe + openmc.UniverseBase Universe with given indices """ @@ -370,9 +370,9 @@ class RectLattice(Lattice): pitch : Iterable of float Pitch of the lattice in the x, y, and (if applicable) z directions in cm. - outer : openmc.Universe + outer : openmc.UniverseBase A universe to fill all space outside the lattice - universes : Iterable of Iterable of openmc.Universe + universes : Iterable of Iterable of openmc.UniverseBase A two- or three-dimensional list/array of universes filling each element of the lattice. The first dimension corresponds to the z-direction (if applicable), the second dimension corresponds to the y-direction, and @@ -633,11 +633,11 @@ class RectLattice(Lattice): cv.check_value('strategy', strategy, ('degenerate', 'lns')) cv.check_type('universes_to_ignore', universes_to_ignore, Iterable, - openmc.Universe) + openmc.UniverseBase) cv.check_type('materials_to_clone', materials_to_clone, Iterable, openmc.Material) cv.check_type('lattice_neighbors', lattice_neighbors, Iterable, - openmc.Universe) + openmc.UniverseBase) cv.check_value('number of lattice_neighbors', len(lattice_neighbors), (0, 8)) cv.check_type('key', key, types.FunctionType) @@ -973,7 +973,7 @@ class RectLattice(Lattice): Group in HDF5 file universes : dict Dictionary mapping universe IDs to instances of - :class:`openmc.Universe`. + :class:`openmc.UniverseBase`. Returns ------- @@ -999,7 +999,7 @@ class RectLattice(Lattice): lattice.outer = universes[outer] # Build array of Universe pointers for the Lattice - uarray = np.empty(universe_ids.shape, dtype=openmc.Universe) + uarray = np.empty(universe_ids.shape, dtype=openmc.UniverseBase) for z in range(universe_ids.shape[0]): for y in range(universe_ids.shape[1]): @@ -1054,9 +1054,9 @@ class HexLattice(Lattice): Pitch of the lattice in cm. The first item in the iterable specifies the pitch in the radial direction and, if the lattice is 3D, the second item in the iterable specifies the pitch in the axial direction. - outer : openmc.Universe + outer : openmc.UniverseBase A universe to fill all space outside the lattice - universes : Nested Iterable of openmc.Universe + universes : Nested Iterable of openmc.UniverseBase A two- or three-dimensional list/array of universes filling each element of the lattice. Each sub-list corresponds to one ring of universes and should be ordered from outermost ring to innermost ring. The universes @@ -1173,7 +1173,7 @@ class HexLattice(Lattice): @property def ndim(self): - return 2 if isinstance(self.universes[0][0], openmc.Universe) else 3 + return 2 if isinstance(self.universes[0][0], openmc.UniverseBase) else 3 @center.setter def center(self, center): @@ -1196,7 +1196,7 @@ class HexLattice(Lattice): @Lattice.universes.setter def universes(self, universes): - cv.check_iterable_type('lattice universes', universes, openmc.Universe, + cv.check_iterable_type('lattice universes', universes, openmc.UniverseBase, min_depth=2, max_depth=3) self._universes = universes @@ -2052,7 +2052,7 @@ class HexLattice(Lattice): Group in HDF5 file universes : dict Dictionary mapping universe IDs to instances of - :class:`openmc.Universe`. + :class:`openmc.UniverseBase`. Returns ------- From 9da13a9087c8bd9feea65f32723f9b72174ebb69 Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Tue, 21 Mar 2023 16:44:12 -0500 Subject: [PATCH 15/52] Adding function for root universe comparison --- include/openmc/geometry_aux.h | 8 ++++++++ src/geometry_aux.cpp | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/include/openmc/geometry_aux.h b/include/openmc/geometry_aux.h index cf62debc0..0c870c9fb 100644 --- a/include/openmc/geometry_aux.h +++ b/include/openmc/geometry_aux.h @@ -126,6 +126,14 @@ std::string distribcell_path( int maximum_levels(int32_t univ); +//============================================================================== +//! Check whether or not a universe is the root universe using its ID. +//! \param univ_id The ID of the universe to check. +//! \return Whether or not it is the root universe. +//============================================================================== + +bool is_root_universe(int32_t univ_id); + //============================================================================== //! Deallocates global vectors and maps for cells, universes, and lattices. //============================================================================== diff --git a/src/geometry_aux.cpp b/src/geometry_aux.cpp index eabdc9f70..3ab5fcc2d 100644 --- a/src/geometry_aux.cpp +++ b/src/geometry_aux.cpp @@ -610,6 +610,11 @@ int maximum_levels(int32_t univ) return levels_below; } +bool is_root_universe(int32_t univ_id) +{ + return model::universe_map[univ_id] == model::root_universe; +} + //============================================================================== void free_memory_geometry() From d24ae2fe1f2ba4344f37cd1082a714afa2ed9eaa Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Tue, 21 Mar 2023 16:46:13 -0500 Subject: [PATCH 16/52] Some cleanup of the DAGCell::distance method and explanation for lost particle condition --- src/dagmc.cpp | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/dagmc.cpp b/src/dagmc.cpp index 04c8424aa..4d63f0892 100644 --- a/src/dagmc.cpp +++ b/src/dagmc.cpp @@ -587,32 +587,42 @@ std::pair DAGCell::distance( if (!dag_univ) fatal_error("DAGMC call made for particle in a non-DAGMC universe"); - moab::ErrorCode rval; + // initialize to lost particle conditions + int surf_idx = -1; + double dist = INFINITY; + moab::EntityHandle vol = dagmc_ptr_->entity_by_index(3, dag_index_); moab::EntityHandle hit_surf; - double dist; + + // create the ray double pnt[3] = {r.x, r.y, r.z}; double dir[3] = {u.x, u.y, u.z}; - rval = dagmc_ptr_->ray_fire(vol, pnt, dir, hit_surf, dist, &p->history()); - MB_CHK_ERR_CONT(rval); - int surf_idx; + MB_CHK_ERR_CONT( + dagmc_ptr_->ray_fire(vol, pnt, dir, hit_surf, dist, &p->history())); if (hit_surf != 0) { surf_idx = dag_univ->surf_idx_offset_ + dagmc_ptr_->index_by_handle(hit_surf); - } else { - // indicate that particle is lost - surf_idx = -1; - dist = INFINITY; - if (settings::run_mode == RunMode::PLOTTING) return {dist, surf_idx}; - if (!dagmc_ptr_->is_implicit_complement(vol) || - model::universe_map[dag_univ->id_] == model::root_universe) { - std::string material_id = p->material() == MATERIAL_VOID - ? "-1 (VOID)" - : std::to_string(model::materials[p->material()]->id()); - p->mark_as_lost( - fmt::format("No intersection found with DAGMC cell {}, material {}", - id_, material_id)); - } + } else if (!dagmc_ptr_->is_implicit_complement(vol) || + is_root_universe(dag_univ->id_)) { + // surface boundary conditions are ignored for projection plotting, meaning + // that the particle may move through the graveyard (bounding) volume and + // into the implicit complement on the other side where no intersection will + // be found. Treating this as a lost particle is problematic when plotting. + // Instead, the infinite distance and invalid surface index are returned. + if (settings::run_mode == RunMode::PLOTTING) return {INFTY, -1}; + + // the particle should be marked as lost immediately if an intersection + // isn't found in a volume that is not the implicit complement. In the case + // that the DAGMC model is the root universe of the geometry, even a missing + // intersection in the implicit complement should trigger this condition. + std::string material_id = + p->material() == MATERIAL_VOID + ? "-1 (VOID)" + : std::to_string(model::materials[p->material()]->id()); + auto lost_particle_msg = fmt::format( + "No intersection found with DAGMC cell {}, filled with material {}", id_, + material_id); + p->mark_as_lost(lost_particle_msg); } return {dist, surf_idx}; From 6b03287d52aa8b55320ee99f63d0d993b93eb375 Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Thu, 13 Apr 2023 16:09:07 -0400 Subject: [PATCH 17/52] add auto legend to universe.plot --- openmc/universe.py | 50 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 2ed96f4bc..a75af3b0d 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -87,7 +87,8 @@ class UniverseBase(ABC, IDManagerMixin): self._volume = volume_calc.volumes[self.id].n self._atoms = volume_calc.atoms[self.id] else: - raise ValueError('No volume information found for this universe.') + raise ValueError( + 'No volume information found for this universe.') else: raise ValueError('No volume information found for this universe.') @@ -168,7 +169,7 @@ class UniverseBase(ABC, IDManagerMixin): clone._cells = OrderedDict() for cell in self._cells.values(): clone.add_cell(cell.clone(clone_materials, clone_regions, - memo)) + memo)) # Memoize the clone memo[self] = clone @@ -295,7 +296,7 @@ class Universe(UniverseBase): def plot(self, origin=(0., 0., 0.), width=(1., 1.), pixels=(200, 200), basis='xy', color_by='cell', colors=None, seed=None, - openmc_exec='openmc', axes=None, **kwargs): + openmc_exec='openmc', axes=None, legend=False, **kwargs): """Display a slice plot of the universe. Parameters @@ -329,6 +330,8 @@ class Universe(UniverseBase): Axes to draw to .. versionadded:: 0.13.1 + legend : bool + whether a legend showing material or cell names should be drawn **kwargs Keyword arguments passed to :func:`matplotlib.pyplot.imshow` @@ -339,6 +342,7 @@ class Universe(UniverseBase): """ import matplotlib.image as mpimg + import matplotlib.patches as mpatches import matplotlib.pyplot as plt # Determine extents of plot @@ -396,6 +400,36 @@ class Universe(UniverseBase): height = pixels[0]*px/(params.top - params.bottom) fig.set_size_inches(width, height) + # add legend showing which colors represent which material + # or cell if that was requested + if legend: + if plot.colors is None: + raise Exception("Must set plot color dictionary if you would" + " like to have an automatic legend.") + + if color_by == "cell": + expected_key_type = openmc.Cell + elif color_by == "material": + expected_key_type = openmc.Material + else: + raise Exception("wtf?") + + patches = [] + for key, color in plot.colors.items(): + + if isinstance(key, int): + raise Exception( + "Cannot use IDs in colors dict for auto legend.") + elif not isinstance(key, expected_key_type): + raise Exception( + "Color dict key type does not match color_by") + + # this works whether we're doing cells or materials + key_patch = mpatches.Patch(color=color, label=key.name) + patches.append(key_patch) + + axes.legend(handles=patches) + # Plot image and return the axes return axes.imshow(img, extent=(x_min, x_max, y_min, y_max), **kwargs) @@ -738,8 +772,9 @@ class DAGMCUniverse(UniverseBase): @property def material_names(self): dagmc_file_contents = h5py.File(self.filename) - material_tags_hex=dagmc_file_contents['/tstt/tags/NAME'].get('values') - material_tags_ascii=[] + material_tags_hex = dagmc_file_contents['/tstt/tags/NAME'].get( + 'values') + material_tags_ascii = [] for tag in material_tags_hex: candidate_tag = tag.tobytes().decode().replace('\x00', '') # tags might be for temperature or reflective surfaces @@ -905,7 +940,8 @@ class DAGMCUniverse(UniverseBase): openmc.Universe Universe instance """ - bounding_cell = openmc.Cell(fill=self, cell_id=bounding_cell_id, region=self.bounding_region(**kwargs)) + bounding_cell = openmc.Cell( + fill=self, cell_id=bounding_cell_id, region=self.bounding_region(**kwargs)) return openmc.Universe(cells=[bounding_cell]) @classmethod @@ -972,4 +1008,4 @@ class DAGMCUniverse(UniverseBase): clone.volume = self.volume clone.auto_geom_ids = self.auto_geom_ids clone.auto_mat_ids = self.auto_mat_ids - return clone \ No newline at end of file + return clone From 966f3e51a886d1c5f5b0a3e062d832680781a127 Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Thu, 13 Apr 2023 17:26:26 -0400 Subject: [PATCH 18/52] Apply suggestions from code review Co-authored-by: Jonathan Shimwell --- openmc/weight_windows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/weight_windows.py b/openmc/weight_windows.py index b825796dc..c08e5b35a 100644 --- a/openmc/weight_windows.py +++ b/openmc/weight_windows.py @@ -20,7 +20,7 @@ class WeightWindows(IDManagerMixin): """Mesh-based weight windows This class enables you to specify weight window parameters that are used in - a simulation. Multiple sets of weight windows can be defined for differen t + a simulation. Multiple sets of weight windows can be defined for different meshes and different particles. An iterable of :class:`WeightWindows` instances can be assigned to the :attr:`openmc.Settings.weight_windows` attribute, which is then exported to XML. From 304443070b174626230f6dfb6851a37f847265de Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Thu, 13 Apr 2023 22:01:16 -0500 Subject: [PATCH 19/52] Apply suggestions from @paulromano Co-authored-by: Paul Romano --- tests/unit_tests/dagmc/test_lost_particles.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/tests/unit_tests/dagmc/test_lost_particles.py b/tests/unit_tests/dagmc/test_lost_particles.py index a5c88cbb8..7659674f5 100644 --- a/tests/unit_tests/dagmc/test_lost_particles.py +++ b/tests/unit_tests/dagmc/test_lost_particles.py @@ -14,7 +14,7 @@ pytestmark = pytest.mark.skipif( @pytest.fixture def broken_dagmc_model(request): openmc.reset_auto_ids() - model = openmc.model.Model() + model = openmc.Model() ### MATERIALS ### fuel = openmc.Material(name='no-void fuel') @@ -55,16 +55,10 @@ def broken_dagmc_model(request): lattice.universes = [[pincell_univ] * 2] * 2 lattice.lower_left = -pitch - left = openmc.XPlane(x0=-pitch[0], name='left', boundary_type='reflective') - right = openmc.XPlane(x0=pitch[0], name='right', boundary_type='reflective') - front = openmc.YPlane(y0=-pitch[1], name='front', boundary_type='reflective') - back = openmc.YPlane(y0=pitch[1], name='back', boundary_type='reflective') # clip the DAGMC geometry at +/- 10 cm w/ CSG planes - bottom = openmc.ZPlane(z0=-10.0, name='bottom', boundary_type='reflective') - top = openmc.ZPlane(z0=10.0, name='top', boundary_type='reflective') - - bounding_region = +left & -right & +front & -back & +bottom & -top - bounding_cell = openmc.Cell(fill=lattice, region=bounding_region) + rpp = openmc.model.RectangularParallelepiped( + -pitch[0], pitch[0], -pitch[1], pitch[1], -10.0, 10.0, boundary_type='reflective') + bounding_cell = openmc.Cell(fill=lattice, region=-rpp) model.geometry = openmc.Geometry(root=[bounding_cell]) @@ -72,7 +66,7 @@ def broken_dagmc_model(request): model.settings.particles = 100 model.settings.batches = 10 model.settings.inactive = 2 - model.settings.output = {'summary' : False} + model.settings.output = {'summary': False} model.export_to_xml() From 3a22be87a966f67f3fba5e35dd5e054ef253e759 Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Thu, 13 Apr 2023 22:05:38 -0500 Subject: [PATCH 20/52] Removing unecessary nuclides --- tests/unit_tests/dagmc/test_lost_particles.py | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/tests/unit_tests/dagmc/test_lost_particles.py b/tests/unit_tests/dagmc/test_lost_particles.py index 7659674f5..502bd795e 100644 --- a/tests/unit_tests/dagmc/test_lost_particles.py +++ b/tests/unit_tests/dagmc/test_lost_particles.py @@ -19,28 +19,17 @@ def broken_dagmc_model(request): ### MATERIALS ### fuel = openmc.Material(name='no-void fuel') fuel.set_density('g/cc', 10.29769) - fuel.add_nuclide('U234', 0.93120485) - fuel.add_nuclide('U235', 0.00055815) - fuel.add_nuclide('U238', 0.022408) - fuel.add_nuclide('O16', 0.045829) + fuel.add_nuclide('U233', 1.0) cladding = openmc.Material(name='clad') cladding.set_density('g/cc', 6.55) - cladding.add_nuclide('Zr90', 0.021827) - cladding.add_nuclide('Zr91', 0.00476) - cladding.add_nuclide('Zr92', 0.0072758) - cladding.add_nuclide('Zr94', 0.0073734) - cladding.add_nuclide('Zr96', 0.0011879) + cladding.add_nuclide('Zr90', 1.0) - water = openmc.Material(name='water') - water.set_density('g/cc', 0.740582) - water.add_nuclide('H1', 0.049457) - water.add_nuclide('O16', 0.024672) - water.add_nuclide('B10', 8.0042e-06) - water.add_nuclide('B11', 3.2218e-05) - water.add_s_alpha_beta('c_H_in_H2O') + h1 = openmc.Material(name='water') + h1.set_density('g/cc', 0.75) + h1.add_nuclide('H1', 1.0) - model.materials = openmc.Materials([fuel, cladding, water]) + model.materials = openmc.Materials([fuel, cladding, h1]) ### GEOMETRY ### # create the DAGMC universe using a model that has many triangles From 8bc434a67d0579b8af89cb5560289b2416d411cd Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Fri, 14 Apr 2023 12:36:24 -0400 Subject: [PATCH 21/52] move legend outside image Co-authored-by: Jonathan Shimwell --- openmc/universe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index a75af3b0d..a7f9e3d6e 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -428,7 +428,7 @@ class Universe(UniverseBase): key_patch = mpatches.Patch(color=color, label=key.name) patches.append(key_patch) - axes.legend(handles=patches) + axes.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0) # Plot image and return the axes return axes.imshow(img, extent=(x_min, x_max, y_min, y_max), **kwargs) From 405717a3cf4b298e0367832faa90078cb75f77a2 Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Fri, 14 Apr 2023 16:41:51 -0500 Subject: [PATCH 22/52] Modifying batch estimation message if the uncertainty ratio is inf --- src/tallies/trigger.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/tallies/trigger.cpp b/src/tallies/trigger.cpp index 79af65879..590a54773 100644 --- a/src/tallies/trigger.cpp +++ b/src/tallies/trigger.cpp @@ -211,13 +211,18 @@ void check_triggers() auto n_pred_batches = static_cast(n_active * max_ratio * max_ratio) + settings::n_inactive + 1; - std::string msg = - fmt::format("The estimated number of batches is {}", n_pred_batches); - if (n_pred_batches > settings::n_max_batches) { - msg.append(" --- greater than max batches"); - warning(msg); - } else { + if (max_ratio == INFINITY) { + std::string msg = fmt::format("One or more tallies with triggers have no scores. Unable to estimate the number of remaining batches."); write_message(msg, 7); + } else { + std::string msg = + fmt::format("The estimated number of batches is {}", n_pred_batches); + if (n_pred_batches > settings::n_max_batches) { + msg.append(" --- greater than max batches"); + warning(msg); + } else { + write_message(msg, 7); + } } } } From 6b20df9652827ec5603d5ccecf34c5db23fd5d50 Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Sat, 15 Apr 2023 15:44:02 -0400 Subject: [PATCH 23/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/weight_windows.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/openmc/weight_windows.py b/openmc/weight_windows.py index c08e5b35a..29b92a7ab 100644 --- a/openmc/weight_windows.py +++ b/openmc/weight_windows.py @@ -1,7 +1,7 @@ from __future__ import annotations from collections.abc import Iterable from numbers import Real, Integral -from typing import Iterable, List, Optional, Union +from typing import Iterable, List, Optional, Union, Dict import pathlib from xml.etree import ElementTree as ET @@ -108,8 +108,8 @@ class WeightWindows(IDManagerMixin): def __init__( self, mesh: MeshBase, - lower_ww_bounds: np.ndarray, - upper_ww_bounds: Optional[np.ndarray] = None, + lower_ww_bounds: Iterable[float], + upper_ww_bounds: Optional[Iterable[float]] = None, upper_bound_ratio: Optional[float] = None, energy_bounds: Optional[Iterable[Real]] = None, particle_type: str = 'neutron', @@ -219,7 +219,7 @@ class WeightWindows(IDManagerMixin): return self._energy_bounds @energy_bounds.setter - def energy_bounds(self, bounds: Iterable[Real]): + def energy_bounds(self, bounds: Iterable[float]): cv.check_type('Energy bounds', bounds, Iterable, Real) self._energy_bounds = np.asarray(bounds) @@ -234,7 +234,7 @@ class WeightWindows(IDManagerMixin): return self._lower_ww_bounds @lower_ww_bounds.setter - def lower_ww_bounds(self, bounds: Iterable[Real]): + def lower_ww_bounds(self, bounds: Iterable[float]): cv.check_iterable_type('Lower WW bounds', bounds, Real, @@ -253,7 +253,7 @@ class WeightWindows(IDManagerMixin): return self._upper_ww_bounds @upper_ww_bounds.setter - def upper_ww_bounds(self, bounds: Iterable[Real]): + def upper_ww_bounds(self, bounds: Iterable[float]): cv.check_iterable_type('Upper WW bounds', bounds, Real, @@ -404,7 +404,7 @@ class WeightWindows(IDManagerMixin): ) @classmethod - def from_hdf5(cls, group: h5py.Group, meshes: dict) -> WeightWindows: + def from_hdf5(cls, group: h5py.Group, meshes: Dict[int, MeshBase]) -> WeightWindows: """Create weight windows from HDF5 group Parameters From b4b4ff79484740417c59249d148ac1e6d29be1f0 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Sat, 15 Apr 2023 15:49:16 -0400 Subject: [PATCH 24/52] added Pathlike to wwinp_to_wws --- openmc/weight_windows.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openmc/weight_windows.py b/openmc/weight_windows.py index 29b92a7ab..fa384f7cc 100644 --- a/openmc/weight_windows.py +++ b/openmc/weight_windows.py @@ -1,6 +1,7 @@ from __future__ import annotations from collections.abc import Iterable from numbers import Real, Integral +import typing from typing import Iterable, List, Optional, Union, Dict import pathlib @@ -11,6 +12,7 @@ import h5py from openmc.filter import _PARTICLES from openmc.mesh import MeshBase, RectilinearMesh, UnstructuredMesh import openmc.checkvalue as cv +from openmc.checkvalue import PathLike from ._xml import get_text from .mixin import IDManagerMixin @@ -449,7 +451,7 @@ class WeightWindows(IDManagerMixin): ) -def wwinp_to_wws(path: Union[str, pathlib.Path]) -> List[WeightWindows]: +def wwinp_to_wws(path: PathLike) -> List[WeightWindows]: """Create WeightWindows instances from a wwinp file .. versionadded:: 0.13.1 From 55b4df553c43cc0d25645621cac6927ba2e287c7 Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Sat, 15 Apr 2023 15:54:41 -0400 Subject: [PATCH 25/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/model/model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openmc/model/model.py b/openmc/model/model.py index 1da6b3bf2..ba44777dd 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -8,7 +8,7 @@ from numbers import Integral from tempfile import NamedTemporaryFile import warnings from xml.etree import ElementTree as ET -from typing import Optional +from typing import Optional, Dict import h5py @@ -141,7 +141,7 @@ class Model: @property @lru_cache(maxsize=None) - def _cells_by_name(self) -> dict: + def _cells_by_name(self) -> Dict[int, openmc.Cell]: # Get the names maps, but since names are not unique, store a set for # each name key. In this way when the user requests a change by a name, # the change will be applied to all of the same name. @@ -154,7 +154,7 @@ class Model: @property @lru_cache(maxsize=None) - def _materials_by_name(self) -> dict: + def _materials_by_name(self) -> Dict[int, openmc.Material]: if self.materials is None: mats = self.geometry.get_all_materials().values() else: From c9a64e6fe0941e8a4bdd25b03473e1f7715e5a21 Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Sat, 15 Apr 2023 16:01:04 -0400 Subject: [PATCH 26/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/geometry.py | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index 88871c544..fae50520d 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -1,6 +1,6 @@ from __future__ import annotations import os -import typing +import typing from collections import OrderedDict, defaultdict from collections.abc import Iterable from copy import deepcopy @@ -167,7 +167,7 @@ class Geometry: tree.write(str(p), xml_declaration=True, encoding='utf-8') @classmethod - def from_xml_element(cls, elem, materials=None) -> openmc.Geometry: + def from_xml_element(cls, elem, materials=None) -> Geometry: """Generate geometry from an XML element Parameters @@ -263,7 +263,7 @@ class Geometry: cls, path: PathLike = 'geometry.xml', materials: typing.Optional[typing.Union[PathLike, 'openmc.Materials']] = 'materials.xml' - ) -> openmc.Geometry: + ) -> Geometry: """Generate geometry from XML file Parameters @@ -357,7 +357,7 @@ class Geometry: return indices if return_list else indices[0] - def get_all_cells(self) -> OrderedDict: + def get_all_cells(self) -> typing.OrderedDict[int, openmc.Cell]: """Return all cells in the geometry. Returns @@ -371,7 +371,7 @@ class Geometry: else: return OrderedDict() - def get_all_universes(self) -> OrderedDict: + def get_all_universes(self) -> typing.OrderedDict[int, openmc.Universe]: """Return all universes in the geometry. Returns @@ -386,7 +386,7 @@ class Geometry: universes.update(self.root_universe.get_all_universes()) return universes - def get_all_materials(self) -> OrderedDict: + def get_all_materials(self) -> typing.OrderedDict[int, openmc.Material]: """Return all materials within the geometry. Returns @@ -401,7 +401,7 @@ class Geometry: else: return OrderedDict() - def get_all_material_cells(self) -> OrderedDict: + def get_all_material_cells(self) -> typing.OrderedDict[int, openmc.Cell]: """Return all cells filled by a material Returns @@ -420,7 +420,7 @@ class Geometry: return material_cells - def get_all_material_universes(self) -> OrderedDict: + def get_all_material_universes(self) -> typing.OrderedDict[int, openmc.Universe]: """Return all universes having at least one material-filled cell. This method can be used to find universes that have at least one cell @@ -443,7 +443,7 @@ class Geometry: return material_universes - def get_all_lattices(self) -> OrderedDict: + def get_all_lattices(self) -> typing.OrderedDict[int, openmc.Lattice]: """Return all lattices defined Returns @@ -461,7 +461,7 @@ class Geometry: return lattices - def get_all_surfaces(self) -> OrderedDict: + def get_all_surfaces(self) -> typing.OrderedDict[int, openmc.Surface]: """ Return all surfaces used in the geometry @@ -495,7 +495,9 @@ class Geometry: domains.sort(key=lambda x: x.id) return domains - def get_materials_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Material]: + def get_materials_by_name( + self, name, case_sensitive=False, matching=False + ) -> typing.List[openmc.Material]: """Return a list of materials with matching names. Parameters @@ -516,7 +518,9 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'material') - def get_cells_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Cell]: + def get_cells_by_name( + self, name, case_sensitive=False, matching=False + ) -> typing.List[openmc.Cell]: """Return a list of cells with matching names. Parameters @@ -537,7 +541,9 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'cell') - def get_surfaces_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Surface]: + def get_surfaces_by_name( + self, name, case_sensitive=False, matching=False + ) -> typing.List[openmc.Surface]: """Return a list of surfaces with matching names. .. versionadded:: 0.13.3 @@ -560,7 +566,9 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'surface') - def get_cells_by_fill_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Cell]: + def get_cells_by_fill_name( + self, name, case_sensitive=False, matching=False + ) -> typing.List[openmc.Cell]: """Return a list of cells with fills with matching names. Parameters @@ -605,7 +613,9 @@ class Geometry: return sorted(cells, key=lambda x: x.id) - def get_universes_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Universe]: + def get_universes_by_name( + self, name, case_sensitive=False, matching=False + ) -> typing.List[openmc.Universe]: """Return a list of universes with matching names. Parameters @@ -626,7 +636,9 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'universe') - def get_lattices_by_name(self, name, case_sensitive=False, matching=False) -> typing.List[openmc.Lattice]: + def get_lattices_by_name( + self, name, case_sensitive=False, matching=False + ) -> typing.List[openmc.Lattice]: """Return a list of lattices with matching names. Parameters @@ -647,7 +659,7 @@ class Geometry: """ return self._get_domains_by_name(name, case_sensitive, matching, 'lattice') - def remove_redundant_surfaces(self) -> dict: + def remove_redundant_surfaces(self) -> typing.Dict[int, openmc.Surface]: """Remove and return all of the redundant surfaces. Uses surface_precision attribute of Geometry instance for rounding and From 5658cd88b184df9340eceb1718932ec0198df951 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Sat, 15 Apr 2023 16:02:59 -0400 Subject: [PATCH 27/52] Added xml.etree to first block of imports --- openmc/geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index fae50520d..275ca45dd 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -6,8 +6,8 @@ from collections.abc import Iterable from copy import deepcopy from pathlib import Path import warnings - from xml.etree import ElementTree as ET + import numpy as np import openmc From 8819b5c1c456371852b08b1b8cd106de023d541a Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Sat, 15 Apr 2023 16:12:38 -0400 Subject: [PATCH 28/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/material.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index 66a626668..fa088d7f0 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -7,7 +7,7 @@ from pathlib import Path import re import typing # imported separately as py3.8 requires typing.Iterable import warnings -from typing import Optional, List, Union +from typing import Optional, List, Union, Dict from xml.etree import ElementTree as ET import h5py @@ -175,7 +175,7 @@ class Material(IDManagerMixin): return self._temperature @property - def density(self) -> float: + def density(self) -> Optional[float]: return self._density @property @@ -227,11 +227,11 @@ class Material(IDManagerMixin): return mass / moles @property - def volume(self) -> float: + def volume(self) -> Optional[float]: return self._volume @property - def ncrystal_cfg(self) -> str: + def ncrystal_cfg(self) -> Optional[str]: return self._ncrystal_cfg @name.setter @@ -292,7 +292,7 @@ class Material(IDManagerMixin): return openmc.data.combine_distributions(dists, probs) if dists else None @classmethod - def from_hdf5(cls, group: h5py.Group) -> openmc.Material: + def from_hdf5(cls, group: h5py.Group) -> Material: """Create material from HDF5 group Parameters @@ -347,7 +347,7 @@ class Material(IDManagerMixin): return material @classmethod - def from_ncrystal(cls, cfg, **kwargs) -> openmc.Material: + def from_ncrystal(cls, cfg, **kwargs) -> Material: """Create material from NCrystal configuration string. Density, temperature, and material composition, and (ultimately) thermal @@ -926,7 +926,7 @@ class Material(IDManagerMixin): return matching_nuclides - def get_nuclide_densities(self) -> dict: + def get_nuclide_densities(self) -> Dict[str, tuple]: """Returns all nuclides in the material and their densities Returns @@ -945,7 +945,7 @@ class Material(IDManagerMixin): return nuclides - def get_nuclide_atom_densities(self, nuclide: Optional[str] = None) -> dict: + def get_nuclide_atom_densities(self, nuclide: Optional[str] = None) -> Dict[str, float]: """Returns one or all nuclides in the material and their atomic densities in units of atom/b-cm @@ -1031,7 +1031,7 @@ class Material(IDManagerMixin): return nuclides def get_activity(self, units: str = 'Bq/cm3', by_nuclide: bool = False, - volume: Optional[float] = None) -> Union[dict, float]: + volume: Optional[float] = None) -> Union[Dict[str, float], float]: """Returns the activity of the material or for each nuclide in the material in units of [Bq], [Bq/g] or [Bq/cm3]. @@ -1078,7 +1078,7 @@ class Material(IDManagerMixin): return activity if by_nuclide else sum(activity.values()) def get_decay_heat(self, units: str = 'W', by_nuclide: bool = False, - volume: Optional[float] = None) -> Union[dict, float]: + volume: Optional[float] = None) -> Union[Dict[str, float], float]: """Returns the decay heat of the material or for each nuclide in the material in units of [W], [W/g] or [W/cm3]. @@ -1126,7 +1126,7 @@ class Material(IDManagerMixin): return decayheat if by_nuclide else sum(decayheat.values()) - def get_nuclide_atoms(self, volume: Optional[float] = None) -> dict: + def get_nuclide_atoms(self, volume: Optional[float] = None) -> Dict[str, float]: """Return number of atoms of each nuclide in the material .. versionadded:: 0.13.1 @@ -1531,7 +1531,7 @@ class Materials(cv.CheckedList): self += materials @property - def cross_sections(self) -> Optional[Union[str, Path]]: + def cross_sections(self) -> Optional[Path]: return self._cross_sections @cross_sections.setter From 5ba3569b3abf67ebeb5b9cd11ee43c42527ca4eb Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 17 Apr 2023 06:37:39 -0500 Subject: [PATCH 29/52] Install vectfit in CI with no-build-isolation --- tools/ci/gha-install-vectfit.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/gha-install-vectfit.sh b/tools/ci/gha-install-vectfit.sh index 5884c6fac..48c59e5aa 100755 --- a/tools/ci/gha-install-vectfit.sh +++ b/tools/ci/gha-install-vectfit.sh @@ -42,4 +42,4 @@ cd xtensor-blas && mkdir build && cd build && cmake .. && sudo make install # Install vectfit cd $HOME git clone https://github.com/liangjg/vectfit.git -pip install ./vectfit +pip install --no-build-isolation ./vectfit From 36a54c896af52fd25d7e2c6ebb736b13ce496086 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 17 Apr 2023 06:59:40 -0500 Subject: [PATCH 30/52] Install wheel for vectfit --- tools/ci/gha-install-vectfit.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/ci/gha-install-vectfit.sh b/tools/ci/gha-install-vectfit.sh index 48c59e5aa..8444c3036 100755 --- a/tools/ci/gha-install-vectfit.sh +++ b/tools/ci/gha-install-vectfit.sh @@ -39,6 +39,9 @@ cd $HOME git clone -b $XTENSOR_BLAS_BRANCH $XTENSOR_BLAS_REPO cd xtensor-blas && mkdir build && cd build && cmake .. && sudo make install +# Install wheel (remove when vectfit supports installation with build isolation) +pip install wheel + # Install vectfit cd $HOME git clone https://github.com/liangjg/vectfit.git From 95a07b8085c20b91f647af2ee3a96f74069708de Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Mon, 17 Apr 2023 15:13:56 +0100 Subject: [PATCH 31/52] adding optional outline to plots --- openmc/universe.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index 2ed96f4bc..3743245b2 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -295,7 +295,7 @@ class Universe(UniverseBase): def plot(self, origin=(0., 0., 0.), width=(1., 1.), pixels=(200, 200), basis='xy', color_by='cell', colors=None, seed=None, - openmc_exec='openmc', axes=None, **kwargs): + openmc_exec='openmc', axes=None, outline=False, **kwargs): """Display a slice plot of the universe. Parameters @@ -332,6 +332,10 @@ class Universe(UniverseBase): **kwargs Keyword arguments passed to :func:`matplotlib.pyplot.imshow` + .. versionadded:: 0.13.4 + outline : bool + Whether outlines between color boundaries should be drawn + Returns ------- matplotlib.image.AxesImage @@ -396,6 +400,18 @@ class Universe(UniverseBase): height = pixels[0]*px/(params.top - params.bottom) fig.set_size_inches(width, height) + if outline: + combined_rgb = np.sum(img, 2) + + axes.contour( + combined_rgb.reshape(img.shape[0], img.shape[1]), + origin="upper", + colors="k", + linestyles="solid", + linewidths=1, + extent=(x_min, x_max, y_min, y_max), + ) + # Plot image and return the axes return axes.imshow(img, extent=(x_min, x_max, y_min, y_max), **kwargs) From 3880d1cec86f12b8289a7f67c1ef3b8364777e43 Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Mon, 17 Apr 2023 12:14:52 -0400 Subject: [PATCH 32/52] line length suggestion Co-authored-by: Jonathan Shimwell --- openmc/universe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index a7f9e3d6e..32768c305 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -404,8 +404,8 @@ class Universe(UniverseBase): # or cell if that was requested if legend: if plot.colors is None: - raise Exception("Must set plot color dictionary if you would" - " like to have an automatic legend.") + raise Exception("Must set plot color dictionary if you " + "would like to have an automatic legend.") if color_by == "cell": expected_key_type = openmc.Cell From e4c332360175b66c8261c9d41643913cb9958e65 Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Mon, 17 Apr 2023 12:15:29 -0400 Subject: [PATCH 33/52] remove unnecessary error checking Co-authored-by: Jonathan Shimwell --- openmc/universe.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 32768c305..a4efb5f73 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -409,10 +409,8 @@ class Universe(UniverseBase): if color_by == "cell": expected_key_type = openmc.Cell - elif color_by == "material": - expected_key_type = openmc.Material else: - raise Exception("wtf?") + expected_key_type = openmc.Material patches = [] for key, color in plot.colors.items(): From f65de85f9fba7e63e8c4db12157e0fa3f89f2d3d Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Mon, 17 Apr 2023 12:17:09 -0400 Subject: [PATCH 34/52] add versionadded for legend kwarg Co-authored-by: Jonathan Shimwell --- openmc/universe.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index a4efb5f73..ed693b84a 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -330,11 +330,12 @@ class Universe(UniverseBase): Axes to draw to .. versionadded:: 0.13.1 - legend : bool - whether a legend showing material or cell names should be drawn **kwargs Keyword arguments passed to :func:`matplotlib.pyplot.imshow` + .. versionadded:: 0.13.4 + legend : bool + Whether a legend showing material or cell names should be drawn Returns ------- matplotlib.image.AxesImage From ad33834e0f659f90efe3ae1154b30a254b61ecf4 Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Mon, 17 Apr 2023 12:18:03 -0400 Subject: [PATCH 35/52] default to legend label using ID if no name given Co-authored-by: Jonathan Shimwell --- openmc/universe.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index ed693b84a..ec9507531 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -424,7 +424,8 @@ class Universe(UniverseBase): "Color dict key type does not match color_by") # this works whether we're doing cells or materials - key_patch = mpatches.Patch(color=color, label=key.name) + label = key.name if key.name != '' else key.id + key_patch = mpatches.Patch(color=color, label=label) patches.append(key_patch) axes.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0) From f08510119c5a6cc6d9333e5153983dfdffe662ea Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Tue, 18 Apr 2023 00:38:33 -0500 Subject: [PATCH 36/52] Applying code formatter --- src/tallies/trigger.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/tallies/trigger.cpp b/src/tallies/trigger.cpp index 590a54773..87f298baa 100644 --- a/src/tallies/trigger.cpp +++ b/src/tallies/trigger.cpp @@ -39,7 +39,8 @@ std::pair get_tally_uncertainty( auto mean = sum / n; // if the result has no contributions, return an invalid pair - if (mean == 0) return {-1 , -1}; + if (mean == 0) + return {-1, -1}; double std_dev = std::sqrt((sum_sq / n - mean * mean) / (n - 1)); double rel_err = (mean != 0.) ? std_dev / std::abs(mean) : 0.; @@ -193,8 +194,10 @@ void check_triggers() keff_ratio); } else { if (tally_ratio == INFINITY) { - msg = fmt::format("Triggers unsatisfied, no result tallied for score {} in tally {}", reaction_name(score), tally_id); - } else{ + msg = fmt::format( + "Triggers unsatisfied, no result tallied for score {} in tally {}", + reaction_name(score), tally_id); + } else { msg = fmt::format( "Triggers unsatisfied, max unc./thresh. is {} for {} in tally {}", tally_ratio, reaction_name(score), tally_id); @@ -212,7 +215,9 @@ void check_triggers() settings::n_inactive + 1; if (max_ratio == INFINITY) { - std::string msg = fmt::format("One or more tallies with triggers have no scores. Unable to estimate the number of remaining batches."); + std::string msg = + fmt::format("One or more tallies with triggers have no scores. Unable " + "to estimate the number of remaining batches."); write_message(msg, 7); } else { std::string msg = From ffaea6187404ede60f5c62d70ae387533e942c85 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Tue, 18 Apr 2023 15:10:49 +0100 Subject: [PATCH 37/52] converting rgb to int --- openmc/universe.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 3743245b2..6863511f8 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -1,3 +1,4 @@ +import typing from abc import ABC, abstractmethod from collections import OrderedDict from collections.abc import Iterable @@ -20,6 +21,14 @@ from .plots import _SVG_COLORS from .surface import _BOUNDARY_TYPES +def get_int_from_rgb(rgb: typing.Tuple[int, int, int]) -> int: + """Converts a tuple of ints into a single int""" + red = rgb[0] + green = rgb[1] + blue = rgb[2] + return (red << 16) + (green << 8) + blue + + class UniverseBase(ABC, IDManagerMixin): """A collection of cells that can be repeated. @@ -401,10 +410,14 @@ class Universe(UniverseBase): fig.set_size_inches(width, height) if outline: - combined_rgb = np.sum(img, 2) + + image_value = [ + [get_int_from_rgb(inner_entry) for inner_entry in outer_entry] + for outer_entry in img + ] axes.contour( - combined_rgb.reshape(img.shape[0], img.shape[1]), + image_value, #combined_rgb.reshape(img.shape[0], img.shape[1]), origin="upper", colors="k", linestyles="solid", @@ -988,4 +1001,4 @@ class DAGMCUniverse(UniverseBase): clone.volume = self.volume clone.auto_geom_ids = self.auto_geom_ids clone.auto_mat_ids = self.auto_mat_ids - return clone \ No newline at end of file + return clone From f1ce0913b3045c132cf9a92f5270c8644d1c6e17 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Tue, 18 Apr 2023 15:37:07 +0100 Subject: [PATCH 38/52] remove comment --- openmc/universe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index 6863511f8..3ad17778e 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -417,7 +417,7 @@ class Universe(UniverseBase): ] axes.contour( - image_value, #combined_rgb.reshape(img.shape[0], img.shape[1]), + image_value, origin="upper", colors="k", linestyles="solid", From 8606e07a6770fd18c86492e86a48c0319abb21f1 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Tue, 18 Apr 2023 16:18:03 +0100 Subject: [PATCH 39/52] added plot axis labels --- openmc/universe.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openmc/universe.py b/openmc/universe.py index 2ed96f4bc..c98b8ea4e 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -344,10 +344,13 @@ class Universe(UniverseBase): # Determine extents of plot if basis == 'xy': x, y = 0, 1 + xlabel, ylabel = 'x [cm]', 'y [cm]' elif basis == 'yz': x, y = 1, 2 + xlabel, ylabel = 'y [cm]', 'z [cm]' elif basis == 'xz': x, y = 0, 2 + xlabel, ylabel = 'x [cm]', 'z [cm]' x_min = origin[x] - 0.5*width[0] x_max = origin[x] + 0.5*width[0] y_min = origin[y] - 0.5*width[1] @@ -391,6 +394,8 @@ class Universe(UniverseBase): if axes is None: px = 1/plt.rcParams['figure.dpi'] fig, axes = plt.subplots() + axes.set_xlabel(xlabel) + axes.set_ylabel(ylabel) params = fig.subplotpars width = pixels[0]*px/(params.right - params.left) height = pixels[0]*px/(params.top - params.bottom) From a02d583ac18925927e02b831efba0b2fcf96ffae Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Tue, 18 Apr 2023 11:24:20 -0400 Subject: [PATCH 40/52] review comments addressed --- openmc/universe.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index ec9507531..b85d36895 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -6,6 +6,7 @@ from numbers import Integral, Real from pathlib import Path from tempfile import TemporaryDirectory from xml.etree import ElementTree as ET +from warnings import warn import h5py import numpy as np @@ -294,9 +295,15 @@ class Universe(UniverseBase): return [self, cell] + cell.fill.find(p) return [] + # default kwargs that are passed to plt.legend in the plot method below. + # If you change this, be sure to change it in the docstring for plot below. + _default_legend_kwargs = {'bbox_to_anchor': ( + 1.05, 1), 'loc': 2, 'borderaxespad': 0.0} + def plot(self, origin=(0., 0., 0.), width=(1., 1.), pixels=(200, 200), basis='xy', color_by='cell', colors=None, seed=None, - openmc_exec='openmc', axes=None, legend=False, **kwargs): + openmc_exec='openmc', axes=None, legend=False, + legend_kwargs=_default_legend_kwargs, **kwargs): """Display a slice plot of the universe. Parameters @@ -330,12 +337,21 @@ class Universe(UniverseBase): Axes to draw to .. versionadded:: 0.13.1 + legend : bool + Whether a legend showing material or cell names should be drawn + + .. versionadded:: 0.13.4 + legend_kwargs : dict + Keyword arguments passed to :func:`matplotlib.pyplot.legend`. + The default is: + + {'bbox_to_anchor': (1.05, 1), 'loc':2, 'borderaxespad': 0.0} + + .. versionadded:: 0.13.4 **kwargs Keyword arguments passed to :func:`matplotlib.pyplot.imshow` .. versionadded:: 0.13.4 - legend : bool - Whether a legend showing material or cell names should be drawn Returns ------- matplotlib.image.AxesImage @@ -405,8 +421,8 @@ class Universe(UniverseBase): # or cell if that was requested if legend: if plot.colors is None: - raise Exception("Must set plot color dictionary if you " - "would like to have an automatic legend.") + raise ValueError("Must pass 'colors' dictionary if you " + "are adding a legend via legend=True.") if color_by == "cell": expected_key_type = openmc.Cell @@ -417,10 +433,10 @@ class Universe(UniverseBase): for key, color in plot.colors.items(): if isinstance(key, int): - raise Exception( + raise TypeError( "Cannot use IDs in colors dict for auto legend.") elif not isinstance(key, expected_key_type): - raise Exception( + raise TypeError( "Color dict key type does not match color_by") # this works whether we're doing cells or materials @@ -428,7 +444,7 @@ class Universe(UniverseBase): key_patch = mpatches.Patch(color=color, label=label) patches.append(key_patch) - axes.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0) + axes.legend(handles=patches, **legend_kwargs) # Plot image and return the axes return axes.imshow(img, extent=(x_min, x_max, y_min, y_max), **kwargs) From f8abaf687af6670387af539f9f22e6aebdec085c Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Tue, 18 Apr 2023 13:45:51 -0400 Subject: [PATCH 41/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/weight_windows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/weight_windows.py b/openmc/weight_windows.py index fa384f7cc..2993db089 100644 --- a/openmc/weight_windows.py +++ b/openmc/weight_windows.py @@ -1,9 +1,9 @@ from __future__ import annotations from collections.abc import Iterable from numbers import Real, Integral +import pathlib import typing from typing import Iterable, List, Optional, Union, Dict -import pathlib from xml.etree import ElementTree as ET import numpy as np From 0280631fe7ee1e6b6ad5f85c8f0f44b51d3ff331 Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Tue, 18 Apr 2023 13:46:33 -0400 Subject: [PATCH 42/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/model/model.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openmc/model/model.py b/openmc/model/model.py index ba44777dd..933e1172e 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -606,7 +606,6 @@ class Model: this method creates the XML files and runs OpenMC via a system call. In both cases this method returns the path to the last statepoint file generated. - .. versionchanged:: 0.12 Instead of returning the final k-effective value, this function now returns the path to the final statepoint written. From 293f02d9912e9d67d91e5ef17d2f968a32350a5c Mon Sep 17 00:00:00 2001 From: christinacai123 <63215816+christinacai123@users.noreply.github.com> Date: Tue, 18 Apr 2023 13:46:57 -0400 Subject: [PATCH 43/52] Apply suggestions from code review Co-authored-by: Paul Romano --- openmc/geometry.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index 275ca45dd..01c0b2714 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -3,7 +3,6 @@ import os import typing from collections import OrderedDict, defaultdict from collections.abc import Iterable -from copy import deepcopy from pathlib import Path import warnings from xml.etree import ElementTree as ET From dd9f03abd22ec6eb0d946290836445dca31cbdc0 Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Tue, 18 Apr 2023 13:49:36 -0400 Subject: [PATCH 44/52] trivial change for CI --- openmc/material.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/material.py b/openmc/material.py index 66a626668..dc2ab0f8b 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -10,8 +10,8 @@ import warnings from typing import Optional, List, Union from xml.etree import ElementTree as ET -import h5py import numpy as np +import h5py import openmc import openmc.data From 37f9bdfaca37d2a0ddfd152b152ccd414d3183ea Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 19 Apr 2023 08:07:41 +0100 Subject: [PATCH 45/52] [skip ci] improve doc string from review Co-authored-by: Paul Romano --- openmc/universe.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index 3ad17778e..f35b1d364 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -341,10 +341,11 @@ class Universe(UniverseBase): **kwargs Keyword arguments passed to :func:`matplotlib.pyplot.imshow` - .. versionadded:: 0.13.4 outline : bool Whether outlines between color boundaries should be drawn + .. versionadded:: 0.13.4 + Returns ------- matplotlib.image.AxesImage From 2487c52d6e75e0fac6e264503fc34fcd8ec51c88 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 19 Apr 2023 12:00:31 +0100 Subject: [PATCH 46/52] working for libpng and no libpng users --- openmc/universe.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index f35b1d364..fd0d6d44a 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -21,14 +21,6 @@ from .plots import _SVG_COLORS from .surface import _BOUNDARY_TYPES -def get_int_from_rgb(rgb: typing.Tuple[int, int, int]) -> int: - """Converts a tuple of ints into a single int""" - red = rgb[0] - green = rgb[1] - blue = rgb[2] - return (red << 16) + (green << 8) + blue - - class UniverseBase(ABC, IDManagerMixin): """A collection of cells that can be repeated. @@ -412,10 +404,8 @@ class Universe(UniverseBase): if outline: - image_value = [ - [get_int_from_rgb(inner_entry) for inner_entry in outer_entry] - for outer_entry in img - ] + rgb = (img * 256).astype(int) + image_value = (rgb[..., 0] << 16) + (rgb[..., 1] << 8) + (rgb[..., 2]) axes.contour( image_value, From 90e7e1d3f06f6074b7574272cc0d04fae8f254ef Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 19 Apr 2023 12:22:46 +0100 Subject: [PATCH 47/52] added outline to plot testing --- tests/unit_tests/test_plots.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tests/unit_tests/test_plots.py b/tests/unit_tests/test_plots.py index 183341c26..ee3b2c1e2 100644 --- a/tests/unit_tests/test_plots.py +++ b/tests/unit_tests/test_plots.py @@ -12,6 +12,7 @@ def myplot(): plot.filename = 'myplot' plot.type = 'slice' plot.basis = 'yz' + plot.outline = True plot.background = 'black' plot.background = (0, 0, 0) @@ -59,26 +60,31 @@ def myprojectionplot(): plot.overlap_color = (255, 211, 0) plot.overlap_color = 'yellow' - + plot.wireframe_thickness = 2 plot.level = 1 return plot + def test_attributes(myplot): assert myplot.name == 'myplot' + def test_attributes_proj(myprojectionplot): assert myprojectionplot.name == 'myprojectionplot' + def test_repr(myplot): r = repr(myplot) assert isinstance(r, str) + def test_repr_proj(myprojectionplot): r = repr(myprojectionplot) assert isinstance(r, str) + def test_from_geometry(): width = 25. s = openmc.Sphere(r=width/2, boundary_type='vacuum') @@ -155,8 +161,8 @@ def test_plots(run_in_tmpdir): # from_xml new_plots = openmc.Plots.from_xml() - assert len(plots) - assert plots[0].origin == p1.origin - assert plots[0].colors == p1.colors - assert plots[0].mask_components == p1.mask_components - assert plots[1].origin == p2.origin + assert len(new_plots) + assert new_plots[0].origin == p1.origin + assert new_plots[0].colors == p1.colors + assert new_plots[0].mask_components == p1.mask_components + assert new_plots[1].origin == p2.origin From 887cfd2e78fe3bd29c614e7d03437bd1a7c49b16 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 19 Apr 2023 15:59:55 +0100 Subject: [PATCH 48/52] [skip ci] review improvment from Paul Co-authored-by: Paul Romano --- openmc/universe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index fd0d6d44a..4f36c3d85 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -403,7 +403,7 @@ class Universe(UniverseBase): fig.set_size_inches(width, height) if outline: - + # Combine R, G, B values into a single int rgb = (img * 256).astype(int) image_value = (rgb[..., 0] << 16) + (rgb[..., 1] << 8) + (rgb[..., 2]) From a8e7d3855585b11c2fc2296c0a856b54064d4761 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 19 Apr 2023 16:02:07 +0100 Subject: [PATCH 49/52] moved plot outline test, added levels --- openmc/universe.py | 1 + tests/unit_tests/test_plots.py | 1 - tests/unit_tests/test_universe.py | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index 4f36c3d85..4054485fd 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -413,6 +413,7 @@ class Universe(UniverseBase): colors="k", linestyles="solid", linewidths=1, + levels=np.unique(image_value), extent=(x_min, x_max, y_min, y_max), ) diff --git a/tests/unit_tests/test_plots.py b/tests/unit_tests/test_plots.py index ee3b2c1e2..0dddc827c 100644 --- a/tests/unit_tests/test_plots.py +++ b/tests/unit_tests/test_plots.py @@ -12,7 +12,6 @@ def myplot(): plot.filename = 'myplot' plot.type = 'slice' plot.basis = 'yz' - plot.outline = True plot.background = 'black' plot.background = (0, 0, 0) diff --git a/tests/unit_tests/test_universe.py b/tests/unit_tests/test_universe.py index a70bd4667..1bfbbf7ff 100644 --- a/tests/unit_tests/test_universe.py +++ b/tests/unit_tests/test_universe.py @@ -59,6 +59,7 @@ def test_plot(run_in_tmpdir, sphere_model): pixels=(10, 10), color_by='material', colors=colors, + outline=True, ) From 2f87ce7f2789b5a5a75ae70099cfcb2d12bae30c Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Wed, 19 Apr 2023 12:22:29 -0400 Subject: [PATCH 50/52] Update openmc/universe.py Co-authored-by: Paul Romano --- openmc/universe.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openmc/universe.py b/openmc/universe.py index b85d36895..3f4982547 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -296,7 +296,6 @@ class Universe(UniverseBase): return [] # default kwargs that are passed to plt.legend in the plot method below. - # If you change this, be sure to change it in the docstring for plot below. _default_legend_kwargs = {'bbox_to_anchor': ( 1.05, 1), 'loc': 2, 'borderaxespad': 0.0} From 22f4fc0902b0ed708a245c6b82a341dbbfee99b5 Mon Sep 17 00:00:00 2001 From: Gavin Ridley Date: Wed, 19 Apr 2023 12:22:39 -0400 Subject: [PATCH 51/52] Update openmc/universe.py Co-authored-by: Paul Romano --- openmc/universe.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/openmc/universe.py b/openmc/universe.py index 3f4982547..d5ae07717 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -342,9 +342,6 @@ class Universe(UniverseBase): .. versionadded:: 0.13.4 legend_kwargs : dict Keyword arguments passed to :func:`matplotlib.pyplot.legend`. - The default is: - - {'bbox_to_anchor': (1.05, 1), 'loc':2, 'borderaxespad': 0.0} .. versionadded:: 0.13.4 **kwargs From bdd34fc64dbe0cd9d034d1531ef5d17237bd342d Mon Sep 17 00:00:00 2001 From: Christina Cai Date: Wed, 19 Apr 2023 14:21:12 -0400 Subject: [PATCH 52/52] added deepcopy back in geometry.py --- openmc/geometry.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openmc/geometry.py b/openmc/geometry.py index 01c0b2714..ee4a58a3b 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -2,6 +2,7 @@ from __future__ import annotations import os import typing from collections import OrderedDict, defaultdict +from copy import deepcopy from collections.abc import Iterable from pathlib import Path import warnings