From 96753f9af0101d94aa4c3b2e9de9c86d639bf5dd Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 22 Sep 2022 23:31:43 -0500 Subject: [PATCH 1/9] Fix reading source file with time attribute. Closes #2223 --- src/state_point.cpp | 1 + tests/unit_tests/test_source_file.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/state_point.cpp b/src/state_point.cpp index 648d1a249..470dd7718 100644 --- a/src/state_point.cpp +++ b/src/state_point.cpp @@ -527,6 +527,7 @@ hid_t h5banktype() H5Tinsert(banktype, "r", HOFFSET(SourceSite, r), postype); H5Tinsert(banktype, "u", HOFFSET(SourceSite, u), postype); H5Tinsert(banktype, "E", HOFFSET(SourceSite, E), H5T_NATIVE_DOUBLE); + H5Tinsert(banktype, "time", HOFFSET(SourceSite, time), H5T_NATIVE_DOUBLE); H5Tinsert(banktype, "wgt", HOFFSET(SourceSite, wgt), H5T_NATIVE_DOUBLE); H5Tinsert(banktype, "delayed_group", HOFFSET(SourceSite, delayed_group), H5T_NATIVE_INT); diff --git a/tests/unit_tests/test_source_file.py b/tests/unit_tests/test_source_file.py index 1398088e5..78115a1f6 100644 --- a/tests/unit_tests/test_source_file.py +++ b/tests/unit_tests/test_source_file.py @@ -75,3 +75,25 @@ def test_wrong_source_attributes(run_in_tmpdir): with pytest.raises(RuntimeError) as excinfo: openmc.run() assert 'platypus, axolotl, narwhal' in str(excinfo.value) + + +def test_source_file_transport(run_in_tmpdir): + # Create a source file with a single particle + particle = openmc.SourceParticle() + openmc.write_source_file([particle], 'source.h5') + + # Created simple model to use source file + model = openmc.Model() + al = openmc.Material() + al.add_element('Al', 1.0) + al.set_density('g/cm3', 2.7) + sph = openmc.Sphere(r=10.0, boundary_type='vacuum') + cell = openmc.Cell(fill=al, region=-sph) + model.geometry = openmc.Geometry([cell]) + model.settings.source = openmc.Source(filename='source.h5') + model.settings.particles = 10 + model.settings.batches = 3 + model.settings.run_mode = 'fixed source' + + # Try running OpenMC + model.run() From b2270d4aefdaea4f3a2b564742a1a76f2e2e7812 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 23 Sep 2022 08:43:48 -0500 Subject: [PATCH 2/9] Update reference surface source for regression test --- .../surface_source/surface_source_true.h5 | Bin 106088 -> 106144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/regression_tests/surface_source/surface_source_true.h5 b/tests/regression_tests/surface_source/surface_source_true.h5 index 2ea48b2ac16fa4acb1275d48ab3ef28c2136af37..c26afee8671dba0b729d6959614a6856166bd37a 100644 GIT binary patch delta 11162 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 delta 11163 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 j$?zyz#`bI Date: Mon, 26 Sep 2022 16:11:53 +0100 Subject: [PATCH 3/9] added from domain to CylindricalMesh --- openmc/mesh.py | 60 +++++++++++++++++++++++ tests/unit_tests/test_mesh_from_domain.py | 40 +++++++++++++-- 2 files changed, 96 insertions(+), 4 deletions(-) diff --git a/openmc/mesh.py b/openmc/mesh.py index a4c50a608..a64a2f8dd 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -1137,6 +1137,66 @@ class CylindricalMesh(StructuredMesh): return mesh + @classmethod + def from_domain( + cls, + domain, + dimension=[100, 100, 100], + mesh_id=None, + name='' + ): + """Create mesh from an existing openmc cell, region, universe or + geometry by making use of the objects bounding box property. phi_grid + is set to have a range of 0 to 2π by default. + + Parameters + ---------- + domain : {openmc.Cell, openmc.Region, openmc.Universe, openmc.Geometry} + The object passed in will be used as a template for this mesh. The + bounding box of the property of the object passed will be used to + set the The r_grid, z_grid ranges. + dimension : Iterable of int + The number of equally spaced mesh cells in each direction (r_grid, + phi_grid, z_grid) + mesh_id : int + Unique identifier for the mesh + name : str + Name of the mesh + + Returns + ------- + openmc.RegularMesh + RegularMesh instance + + """ + cv.check_type( + "domain", + domain, + (openmc.Cell, openmc.Region, openmc.Universe, openmc.Geometry), + ) + + mesh = cls(mesh_id, name) + + # loaded once to avoid reading h5m file repeatedly + cached_bb = domain.bounding_box + max_bounding_box_radius = max( + [ + cached_bb[0][0], + cached_bb[0][1], + cached_bb[1][0], + cached_bb[1][1], + ] + ) + mesh.r_grid = np.linspace(0, max_bounding_box_radius, num=dimension[0]+1) + mesh.phi_grid = np.linspace(0, 2*np.pi, num=dimension[1]+1) + mesh.z_grid = np.linspace( + cached_bb[0][2], + cached_bb[1][2], + num=dimension[2]+1 + ) + + return mesh + def to_xml_element(self): """Return XML representation of the mesh diff --git a/tests/unit_tests/test_mesh_from_domain.py b/tests/unit_tests/test_mesh_from_domain.py index ce27288ad..64b9424b9 100644 --- a/tests/unit_tests/test_mesh_from_domain.py +++ b/tests/unit_tests/test_mesh_from_domain.py @@ -16,6 +16,22 @@ def test_reg_mesh_from_cell(): assert np.array_equal(mesh.upper_right, cell.bounding_box[1]) +def test_cylindrical_mesh_from_cell(): + """Tests a CylindricalMesh can be made from a Cell and the specified + dimensions are propagated through. Cell is not centralized""" + cy_surface = openmc. openmc.ZCylinder(r=50) + z_surface_1 = openmc. openmc.ZPlane(z0=30) + z_surface_2 = openmc. openmc.ZPlane(z0=0) + cell = openmc.Cell(region=-cy_surface & -z_surface_1 & +z_surface_2) + mesh = openmc.CylindricalMesh.from_domain(cell, dimension=[2, 4, 3]) + + assert isinstance(mesh, openmc.CylindricalMesh) + assert np.array_equal(mesh.dimension, (2, 4, 3)) + assert np.array_equal(mesh.r_grid, [0., 25., 50.]) + assert np.array_equal(mesh.phi_grid, [0., 0.5*np.pi, np.pi, 1.5*np.pi, 2.*np.pi]) + assert np.array_equal(mesh.z_grid, [0., 10., 20., 30.]) + + def test_reg_mesh_from_region(): """Tests a RegularMesh can be made from a Region and the default dimensions are propagated through. Region is not centralized""" @@ -29,9 +45,25 @@ def test_reg_mesh_from_region(): assert np.array_equal(mesh.upper_right, region.bounding_box[1]) +def test_cylindrical_mesh_from_region(): + """Tests a CylindricalMesh can be made from a Region and the specified + dimensions are propagated through. Cell is centralized""" + cy_surface = openmc. openmc.ZCylinder(r=6) + z_surface_1 = openmc. openmc.ZPlane(z0=30) + z_surface_2 = openmc. openmc.ZPlane(z0=-30) + cell = openmc.Cell(region=-cy_surface & -z_surface_1 & +z_surface_2) + mesh = openmc.CylindricalMesh.from_domain(cell, dimension=[6, 2, 3]) + + assert isinstance(mesh, openmc.CylindricalMesh) + assert np.array_equal(mesh.dimension, (6, 2, 3)) + assert np.array_equal(mesh.r_grid, [0., 1., 2., 3., 4., 5., 6.]) + assert np.array_equal(mesh.phi_grid, [0., np.pi, 2.*np.pi]) + assert np.array_equal(mesh.z_grid, [-30., -10., 10., 30.]) + + def test_reg_mesh_from_universe(): - """Tests a RegularMesh can be made from a Universe and the default dimensions - are propagated through. Universe is centralized""" + """Tests a RegularMesh can be made from a Universe and the default + dimensions are propagated through. Universe is centralized""" surface = openmc.Sphere(r=42) cell = openmc.Cell(region=-surface) universe = openmc.Universe(cells=[cell]) @@ -44,8 +76,8 @@ def test_reg_mesh_from_universe(): def test_reg_mesh_from_geometry(): - """Tests a RegularMesh can be made from a Geometry and the default dimensions - are propagated through. Geometry is centralized""" + """Tests a RegularMesh can be made from a Geometry and the default + dimensions are propagated through. Geometry is centralized""" surface = openmc.Sphere(r=42) cell = openmc.Cell(region=-surface) universe = openmc.Universe(cells=[cell]) From 4e5d9bf5963fb8a857057fdacb16af7a5e0ecce1 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Mon, 26 Sep 2022 16:17:48 +0100 Subject: [PATCH 4/9] fixed typo --- openmc/mesh.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/mesh.py b/openmc/mesh.py index a64a2f8dd..0dc390ebe 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -1154,7 +1154,7 @@ class CylindricalMesh(StructuredMesh): domain : {openmc.Cell, openmc.Region, openmc.Universe, openmc.Geometry} The object passed in will be used as a template for this mesh. The bounding box of the property of the object passed will be used to - set the The r_grid, z_grid ranges. + set the r_grid, z_grid ranges. dimension : Iterable of int The number of equally spaced mesh cells in each direction (r_grid, phi_grid, z_grid) From a32a5fbf0d18bf31eaa79b2d11e2bd11f2e4c4bf Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Mon, 3 Oct 2022 16:58:11 +0100 Subject: [PATCH 5/9] review suggestion from @RemDelaporteMathurin --- openmc/mesh.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openmc/mesh.py b/openmc/mesh.py index 0dc390ebe..e0d8eb61b 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -1143,6 +1143,7 @@ class CylindricalMesh(StructuredMesh): domain, dimension=[100, 100, 100], mesh_id=None, + phi_grid=[0.0, 2*pi], name='' ): """Create mesh from an existing openmc cell, region, universe or @@ -1160,6 +1161,9 @@ class CylindricalMesh(StructuredMesh): phi_grid, z_grid) mesh_id : int Unique identifier for the mesh + phi_grid : numpy.ndarray + 1-D array of mesh boundary points along the phi-axis in radians. + The default value is [0, 2π], i.e. the full phi range. name : str Name of the mesh @@ -1188,7 +1192,7 @@ class CylindricalMesh(StructuredMesh): ] ) mesh.r_grid = np.linspace(0, max_bounding_box_radius, num=dimension[0]+1) - mesh.phi_grid = np.linspace(0, 2*np.pi, num=dimension[1]+1) + mesh.phi_grid = np.linspace(phi_grid[0], phi_grid[1], num=dimension[1]+1) mesh.z_grid = np.linspace( cached_bb[0][2], cached_bb[1][2], From afbd994d4ff0504bd35722873152813efe907321 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 5 Oct 2022 08:45:59 +0100 Subject: [PATCH 6/9] review suggestions from Remi and Paul MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Paul Romano Co-authored-by: Rémi Delaporte-Mathurin <40028739+RemDelaporteMathurin@users.noreply.github.com> --- openmc/mesh.py | 8 ++++---- tests/unit_tests/test_mesh_from_domain.py | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/openmc/mesh.py b/openmc/mesh.py index e0d8eb61b..57fd8fb21 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -1141,9 +1141,9 @@ class CylindricalMesh(StructuredMesh): def from_domain( cls, domain, - dimension=[100, 100, 100], + dimension=(100, 100, 100), mesh_id=None, - phi_grid=[0.0, 2*pi], + phi_grid=(0.0, 2*pi), name='' ): """Create mesh from an existing openmc cell, region, universe or @@ -1152,7 +1152,7 @@ class CylindricalMesh(StructuredMesh): Parameters ---------- - domain : {openmc.Cell, openmc.Region, openmc.Universe, openmc.Geometry} + domain : openmc.Cell or openmc.Region or openmc.Universe or openmc.Geometry The object passed in will be used as a template for this mesh. The bounding box of the property of the object passed will be used to set the r_grid, z_grid ranges. @@ -1163,7 +1163,7 @@ class CylindricalMesh(StructuredMesh): Unique identifier for the mesh phi_grid : numpy.ndarray 1-D array of mesh boundary points along the phi-axis in radians. - The default value is [0, 2π], i.e. the full phi range. + The default value is (0, 2π), i.e., the full phi range. name : str Name of the mesh diff --git a/tests/unit_tests/test_mesh_from_domain.py b/tests/unit_tests/test_mesh_from_domain.py index 64b9424b9..cbc32b8fa 100644 --- a/tests/unit_tests/test_mesh_from_domain.py +++ b/tests/unit_tests/test_mesh_from_domain.py @@ -19,9 +19,9 @@ def test_reg_mesh_from_cell(): def test_cylindrical_mesh_from_cell(): """Tests a CylindricalMesh can be made from a Cell and the specified dimensions are propagated through. Cell is not centralized""" - cy_surface = openmc. openmc.ZCylinder(r=50) - z_surface_1 = openmc. openmc.ZPlane(z0=30) - z_surface_2 = openmc. openmc.ZPlane(z0=0) + cy_surface = openmc.ZCylinder(r=50) + z_surface_1 = openmc.ZPlane(z0=30) + z_surface_2 = openmc.ZPlane(z0=0) cell = openmc.Cell(region=-cy_surface & -z_surface_1 & +z_surface_2) mesh = openmc.CylindricalMesh.from_domain(cell, dimension=[2, 4, 3]) @@ -48,9 +48,9 @@ def test_reg_mesh_from_region(): def test_cylindrical_mesh_from_region(): """Tests a CylindricalMesh can be made from a Region and the specified dimensions are propagated through. Cell is centralized""" - cy_surface = openmc. openmc.ZCylinder(r=6) - z_surface_1 = openmc. openmc.ZPlane(z0=30) - z_surface_2 = openmc. openmc.ZPlane(z0=-30) + cy_surface = openmc.ZCylinder(r=6) + z_surface_1 = openmc.ZPlane(z0=30) + z_surface_2 = openmc.ZPlane(z0=-30) cell = openmc.Cell(region=-cy_surface & -z_surface_1 & +z_surface_2) mesh = openmc.CylindricalMesh.from_domain(cell, dimension=[6, 2, 3]) From 9a61aed2efe4bb798f16b9018ad3a8edb003d68e Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 5 Oct 2022 09:03:30 +0100 Subject: [PATCH 7/9] doc string related review suggestions --- openmc/mesh.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/openmc/mesh.py b/openmc/mesh.py index 57fd8fb21..d4db5011b 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -514,7 +514,7 @@ class RegularMesh(StructuredMesh): def from_domain( cls, domain, - dimension=[100, 100, 100], + dimension=(10, 10, 10), mesh_id=None, name='' ): @@ -1141,14 +1141,12 @@ class CylindricalMesh(StructuredMesh): def from_domain( cls, domain, - dimension=(100, 100, 100), + dimension=(10, 10, 10), mesh_id=None, - phi_grid=(0.0, 2*pi), + phi_grid_bounds=(0.0, 2*pi), name='' ): - """Create mesh from an existing openmc cell, region, universe or - geometry by making use of the objects bounding box property. phi_grid - is set to have a range of 0 to 2π by default. + """Creates a regular CylindricalMesh from an existing openmc domain. Parameters ---------- @@ -1161,9 +1159,9 @@ class CylindricalMesh(StructuredMesh): phi_grid, z_grid) mesh_id : int Unique identifier for the mesh - phi_grid : numpy.ndarray - 1-D array of mesh boundary points along the phi-axis in radians. - The default value is (0, 2π), i.e., the full phi range. + phi_grid_bounds : numpy.ndarray + Mesh bounds points along the phi-axis in radians. The default value + is (0, 2π), i.e., the full phi range. name : str Name of the mesh @@ -1191,8 +1189,16 @@ class CylindricalMesh(StructuredMesh): cached_bb[1][1], ] ) - mesh.r_grid = np.linspace(0, max_bounding_box_radius, num=dimension[0]+1) - mesh.phi_grid = np.linspace(phi_grid[0], phi_grid[1], num=dimension[1]+1) + mesh.r_grid = np.linspace( + 0, + max_bounding_box_radius, + num=dimension[0]+1 + ) + mesh.phi_grid = np.linspace( + phi_grid_bounds[0], + phi_grid_bounds[1], + num=dimension[1]+1 + ) mesh.z_grid = np.linspace( cached_bb[0][2], cached_bb[1][2], From 6a9a1ad2937b40c7a23fc16086518b2f99bac297 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 5 Oct 2022 11:46:00 +0100 Subject: [PATCH 8/9] added phi_grid_bounds to CylindricalMesh tests --- tests/unit_tests/test_mesh_from_domain.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tests/unit_tests/test_mesh_from_domain.py b/tests/unit_tests/test_mesh_from_domain.py index cbc32b8fa..b4edae196 100644 --- a/tests/unit_tests/test_mesh_from_domain.py +++ b/tests/unit_tests/test_mesh_from_domain.py @@ -40,24 +40,28 @@ def test_reg_mesh_from_region(): mesh = openmc.RegularMesh.from_domain(region) assert isinstance(mesh, openmc.RegularMesh) - assert np.array_equal(mesh.dimension, (100, 100, 100)) # default values + assert np.array_equal(mesh.dimension, (10, 10, 10)) # default values assert np.array_equal(mesh.lower_left, region.bounding_box[0]) assert np.array_equal(mesh.upper_right, region.bounding_box[1]) def test_cylindrical_mesh_from_region(): """Tests a CylindricalMesh can be made from a Region and the specified - dimensions are propagated through. Cell is centralized""" + dimensions and phi_grid_bounds are propagated through. Cell is centralized""" cy_surface = openmc.ZCylinder(r=6) z_surface_1 = openmc.ZPlane(z0=30) z_surface_2 = openmc.ZPlane(z0=-30) cell = openmc.Cell(region=-cy_surface & -z_surface_1 & +z_surface_2) - mesh = openmc.CylindricalMesh.from_domain(cell, dimension=[6, 2, 3]) + mesh = openmc.CylindricalMesh.from_domain( + cell, + dimension=(6, 2, 3), + phi_grid_bounds=(0., np.pi) + ) assert isinstance(mesh, openmc.CylindricalMesh) assert np.array_equal(mesh.dimension, (6, 2, 3)) assert np.array_equal(mesh.r_grid, [0., 1., 2., 3., 4., 5., 6.]) - assert np.array_equal(mesh.phi_grid, [0., np.pi, 2.*np.pi]) + assert np.array_equal(mesh.phi_grid, [0., 0.5*np.pi, np.pi]) assert np.array_equal(mesh.z_grid, [-30., -10., 10., 30.]) @@ -70,7 +74,7 @@ def test_reg_mesh_from_universe(): mesh = openmc.RegularMesh.from_domain(universe) assert isinstance(mesh, openmc.RegularMesh) - assert np.array_equal(mesh.dimension, (100, 100, 100)) # default values + assert np.array_equal(mesh.dimension, (10, 10, 10)) # default values assert np.array_equal(mesh.lower_left, universe.bounding_box[0]) assert np.array_equal(mesh.upper_right, universe.bounding_box[1]) @@ -85,7 +89,7 @@ def test_reg_mesh_from_geometry(): mesh = openmc.RegularMesh.from_domain(geometry) assert isinstance(mesh, openmc.RegularMesh) - assert np.array_equal(mesh.dimension, (100, 100, 100)) # default values + assert np.array_equal(mesh.dimension, (10, 10, 10)) # default values assert np.array_equal(mesh.lower_left, geometry.bounding_box[0]) assert np.array_equal(mesh.upper_right, geometry.bounding_box[1]) From 0a04c20c744ca10dce3e2b9e254635a3d7245bf6 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Thu, 6 Oct 2022 15:57:48 +0100 Subject: [PATCH 9/9] removed py3.6 --- .github/workflows/ci.yml | 3 --- docs/source/devguide/styleguide.rst | 2 +- docs/source/usersguide/install.rst | 2 +- setup.py | 4 ++-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 050c8e287..b7c548a37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,9 +34,6 @@ jobs: vectfit: [n] include: - - python-version: 3.6 - omp: n - mpi: n - python-version: 3.7 omp: n mpi: n diff --git a/docs/source/devguide/styleguide.rst b/docs/source/devguide/styleguide.rst index 44d80915e..2a744b819 100644 --- a/docs/source/devguide/styleguide.rst +++ b/docs/source/devguide/styleguide.rst @@ -142,7 +142,7 @@ Style for Python code should follow PEP8_. Docstrings for functions and methods should follow numpydoc_ style. -Python code should work with Python 3.6+. +Python code should work with Python 3.7+. Use of third-party Python packages should be limited to numpy_, scipy_, matplotlib_, pandas_, and h5py_. Use of other third-party packages must be diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index b57958814..74be9ba0b 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -511,7 +511,7 @@ to install the Python package in :ref:`"editable" mode `. Prerequisites ------------- -The Python API works with Python 3.6+. In addition to Python itself, the API +The Python API works with Python 3.7+. In addition to Python itself, the API relies on a number of third-party packages. All prerequisites can be installed using Conda_ (recommended), pip_, or through the package manager in most Linux distributions. diff --git a/setup.py b/setup.py index 477f29dec..2a7e6a58d 100755 --- a/setup.py +++ b/setup.py @@ -57,14 +57,14 @@ kwargs = { 'Topic :: Scientific/Engineering' 'Programming Language :: C++', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', ], # Dependencies - 'python_requires': '>=3.6', + 'python_requires': '>=3.7', 'install_requires': [ 'numpy>=1.9', 'h5py', 'scipy', 'ipython', 'matplotlib', 'pandas', 'lxml', 'uncertainties'