diff --git a/tests/regression_tests/filter_mesh/inputs_true.dat b/tests/regression_tests/filter_mesh/inputs_true.dat
index 37716c02e..38b20b7e3 100644
--- a/tests/regression_tests/filter_mesh/inputs_true.dat
+++ b/tests/regression_tests/filter_mesh/inputs_true.dat
@@ -53,36 +53,58 @@
-7.5 -6.617647058823529 -5.735294117647059 -4.852941176470589 -3.9705882352941178 -3.0882352941176467 -2.2058823529411766 -1.3235294117647065 -0.4411764705882355 0.4411764705882355 1.3235294117647065 2.2058823529411757 3.0882352941176467 3.9705882352941178 4.852941176470587 5.735294117647058 6.617647058823529 7.5
1.0 1.223224374241637 1.4962778697388448 1.8302835609029084 2.2388474634702153 2.7386127875258306 3.3499379133114306 4.09772570775871 5.012437964687018 6.131336292779302 7.500000000000001
+
+ 0.0 0.4411764705882353 0.8823529411764706 1.3235294117647058 1.7647058823529411 2.2058823529411766 2.6470588235294117 3.0882352941176467 3.5294117647058822 3.9705882352941178 4.411764705882353 4.852941176470588 5.294117647058823 5.735294117647059 6.1764705882352935 6.617647058823529 7.0588235294117645 7.5
+ 0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 220.0 240.0 260.0 280.0 300.0 320.0 340.0 360.0
+ -7.5 -6.5625 -5.625 -4.6875 -3.75 -2.8125 -1.875 -0.9375 0.0 0.9375 1.875 2.8125 3.75 4.6875 5.625 6.5625 7.5
+
+
+ 0.0 0.4411764705882353 0.8823529411764706 1.3235294117647058 1.7647058823529411 2.2058823529411766 2.6470588235294117 3.0882352941176467 3.5294117647058822 3.9705882352941178 4.411764705882353 4.852941176470588 5.294117647058823 5.735294117647059 6.1764705882352935 6.617647058823529 7.0588235294117645 7.5
+ 0.0 22.5 45.0 67.5 90.0 112.5 135.0 157.5 180.0
+ 0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 220.0 240.0 260.0 280.0 300.0 320.0 340.0 360.0
+
1
-
+
1
2
-
+
2
3
-
+
3
4
-
+
4
+
+ 5
+
+
+ 5
+
+
+ 6
+
+
+ 6
+
1
total
- 5
+ 7
current
@@ -90,7 +112,7 @@
total
- 6
+ 8
current
@@ -98,7 +120,7 @@
total
- 7
+ 9
current
@@ -106,7 +128,23 @@
total
- 8
+ 10
+ current
+
+
+ 5
+ total
+
+
+ 11
+ current
+
+
+ 6
+ total
+
+
+ 12
current
diff --git a/tests/regression_tests/filter_mesh/results_true.dat b/tests/regression_tests/filter_mesh/results_true.dat
index 332c8b36c..ec9fe47a3 100644
--- a/tests/regression_tests/filter_mesh/results_true.dat
+++ b/tests/regression_tests/filter_mesh/results_true.dat
@@ -1 +1 @@
-97cf099a24099d2af794752e145841a9ef9f24980c53ee71e3fdd400d4249a7e6f3f52f63132fe2fe8d1973604a72d87910ab13bc3721f7d0bec533b87756847
\ No newline at end of file
+cacc0cedfa243b31f6c44e22bedea400744af14ad139631ec7141c0812ade18e1b53f59e65865ef90d296716a555718cc06108db9c2d434d9d04ec9bb878a81d
\ No newline at end of file
diff --git a/tests/regression_tests/filter_mesh/test.py b/tests/regression_tests/filter_mesh/test.py
index c8aa871a8..eddf0a991 100644
--- a/tests/regression_tests/filter_mesh/test.py
+++ b/tests/regression_tests/filter_mesh/test.py
@@ -51,18 +51,32 @@ def model():
recti_mesh.y_grid = np.linspace(-7.5, 7.5, 18)
recti_mesh.z_grid = np.logspace(0, np.log10(7.5), 11)
+ cyl_mesh = openmc.CylindricalMesh()
+ cyl_mesh.r_grid = np.linspace(0, 7.5, 18)
+ cyl_mesh.phi_grid = np.linspace(0, 360, 19)
+ cyl_mesh.z_grid = np.linspace(-7.5, 7.5, 17)
+
+ sph_mesh = openmc.SphericalMesh()
+ sph_mesh.r_grid = np.linspace(0, 7.5, 18)
+ sph_mesh.theta_grid = np.linspace(0, 180, 9)
+ sph_mesh.phi_grid = np.linspace(0, 360, 19)
+
# Create filters
reg_filters = [
openmc.MeshFilter(mesh_1d),
openmc.MeshFilter(mesh_2d),
openmc.MeshFilter(mesh_3d),
- openmc.MeshFilter(recti_mesh)
+ openmc.MeshFilter(recti_mesh),
+ openmc.MeshFilter(cyl_mesh),
+ openmc.MeshFilter(sph_mesh)
]
surf_filters = [
openmc.MeshSurfaceFilter(mesh_1d),
openmc.MeshSurfaceFilter(mesh_2d),
openmc.MeshSurfaceFilter(mesh_3d),
- openmc.MeshSurfaceFilter(recti_mesh)
+ openmc.MeshSurfaceFilter(recti_mesh),
+ openmc.MeshSurfaceFilter(cyl_mesh),
+ openmc.MeshSurfaceFilter(sph_mesh)
]
# Create tallies
diff --git a/tests/unit_tests/test_lib.py b/tests/unit_tests/test_lib.py
index ccff33ac3..3572e9863 100644
--- a/tests/unit_tests/test_lib.py
+++ b/tests/unit_tests/test_lib.py
@@ -580,6 +580,68 @@ def test_rectilinear_mesh(lib_init):
msf = openmc.lib.MeshSurfaceFilter(mesh)
assert msf.mesh == mesh
+def test_cylindrical_mesh(lib_init):
+ deg2rad = lambda deg: deg*np.pi/180
+ mesh = openmc.lib.CylindricalMesh()
+ x_grid = [0., 5., 10.]
+ y_grid = [0., 10., 20.]
+ z_grid = [10., 20., 30.]
+ mesh.set_grid(x_grid, y_grid, z_grid)
+ assert np.all(mesh.lower_left == (0., 0., 10.))
+ assert np.all(mesh.upper_right == (10., deg2rad(20.), 30.))
+ assert np.all(mesh.dimension == (2, 2, 2))
+ for i, diff_x in enumerate(np.diff(x_grid)):
+ for j, diff_y in enumerate(np.diff(y_grid)):
+ for k, diff_z in enumerate(np.diff(z_grid)):
+ assert np.all(mesh.width[i, j, k, :] == (5, deg2rad(10), 10))
+
+ with pytest.raises(exc.AllocationError):
+ mesh2 = openmc.lib.CylindricalMesh(mesh.id)
+
+ meshes = openmc.lib.meshes
+ assert isinstance(meshes, Mapping)
+ assert len(meshes) == 3
+
+ mesh = meshes[mesh.id]
+ assert isinstance(mesh, openmc.lib.CylindricalMesh)
+
+ mf = openmc.lib.MeshFilter(mesh)
+ assert mf.mesh == mesh
+
+ msf = openmc.lib.MeshSurfaceFilter(mesh)
+ assert msf.mesh == mesh
+
+def test_spherical_mesh(lib_init):
+ deg2rad = lambda deg: deg*np.pi/180
+ mesh = openmc.lib.SphericalMesh()
+ x_grid = [0., 5., 10.]
+ y_grid = [0., 10., 20.]
+ z_grid = [10., 20., 30.]
+ mesh.set_grid(x_grid, y_grid, z_grid)
+ assert np.all(mesh.lower_left == (0., 0., deg2rad(10.)))
+ assert np.all(mesh.upper_right == (10., deg2rad(20.), deg2rad(30.)))
+ assert np.all(mesh.dimension == (2, 2, 2))
+ for i, diff_x in enumerate(np.diff(x_grid)):
+ for j, diff_y in enumerate(np.diff(y_grid)):
+ for k, diff_z in enumerate(np.diff(z_grid)):
+ assert np.all(abs(mesh.width[i, j, k, :] - (5, deg2rad(10), deg2rad(10))) < 1e-16)
+
+ with pytest.raises(exc.AllocationError):
+ mesh2 = openmc.lib.SphericalMesh(mesh.id)
+
+ meshes = openmc.lib.meshes
+ assert isinstance(meshes, Mapping)
+ assert len(meshes) == 4
+
+ mesh = meshes[mesh.id]
+ assert isinstance(mesh, openmc.lib.SphericalMesh)
+
+ mf = openmc.lib.MeshFilter(mesh)
+ assert mf.mesh == mesh
+
+ msf = openmc.lib.MeshSurfaceFilter(mesh)
+ assert msf.mesh == mesh
+
def test_restart(lib_init, mpi_intracomm):
# Finalize and re-init to make internal state consistent with XML.