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.