diff --git a/openmc/lattice.py b/openmc/lattice.py index ee21363355..441c81b651 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -1012,9 +1012,12 @@ class RectLattice(Lattice): sub_universe = sub_cell.fill try: - sub_neighbors = [pattern[0][0], pattern[0][1], + if strategy == "lns": + sub_neighbors = [pattern[0][0], pattern[0][1], pattern[0][2], pattern[1][0], pattern[1][2], pattern[2][0], pattern[2][1], pattern[2][2]] + elif strategy == "degenerate": + sub_neighbors = [] sub_universe.discretize(strategy, rotate_universe_with_neighbors, universes_to_ignore, @@ -1041,7 +1044,8 @@ class RectLattice(Lattice): cell.fill = material_clone # Build a symmetric universe for the transposed lattices - if any(pattern_data['transpositions']): + if rotate_universe_with_neighbors and\ + any(pattern_data['transpositions']): sym_universe = new_universe.clone(clone_materials=False, clone_regions=False) for cell_id, sub_cell in sym_universe.cells.items(): diff --git a/tests/unit_tests/test_lattice_discretization.py b/tests/unit_tests/test_lattice_discretization.py index b4a89ea19b..cf4e101d64 100644 --- a/tests/unit_tests/test_lattice_discretization.py +++ b/tests/unit_tests/test_lattice_discretization.py @@ -52,6 +52,11 @@ def test_discretization_lns(rlat2): rlat_clone = rlat2.clone() rlat_clone.discretize(strategy="lns") + assert rlat_clone.get_universe((0, 2)) == rlat_clone.get_universe((2, 2)) + + rlat_clone = rlat2.clone() + rlat_clone.discretize(strategy="lns", rotate_universe_with_neighbors=True) + assert rlat_clone.get_universe((0, 2)) == \ next(iter(rlat_clone.get_universe((2, 2)).cells.values())).fill @@ -61,15 +66,20 @@ def test_discretization_lns_using_names(rlat2): rlat_clone = rlat2.clone() rlat_clone.discretize(strategy="lns", attribute="name") - assert rlat_clone.get_universe((0, 2)) == \ - rlat_clone.get_universe((2, 2)) + assert rlat_clone.get_universe((0, 2)) == rlat_clone.get_universe((2, 2)) rlat_clone = rlat2.clone() + rlat_clone.get_universe((0, 1)).name="u1" rlat_clone.get_universe((1, 0)).name="u1" rlat_clone.discretize(strategy="lns", attribute="name") - assert rlat_clone.get_universe((0, 2)) == \ - next(iter(rlat_clone.get_universe((2, 2)).cells.values())).fill + assert rlat_clone.get_universe((0, 2)) == rlat_clone.get_universe((2, 0)) + assert rlat_clone.get_universe((2, 2)) == rlat_clone.get_universe((0, 0)) + assert rlat_clone.get_universe((0, 2)) == rlat_clone.get_universe((2, 2)) + assert rlat_clone.get_universe((1, 2)) == rlat_clone.get_universe((1, 0)) + assert rlat_clone.get_universe((2, 1)) == rlat_clone.get_universe((0, 1)) + assert rlat_clone.get_universe((1, 2)) == rlat_clone.get_universe((0, 1)) + assert rlat_clone.get_universe((0, 0)) != rlat_clone.get_universe((0, 1)) def test_discretization_lns_with_neighbor_list(rlat2): @@ -80,10 +90,8 @@ def test_discretization_lns_with_neighbor_list(rlat2): rlat_clone.discretize(strategy="lns", lattice_neighbors=[u1.id,u1.id,u2.id,u1.id,u2.id,u2.id,u1.id,u2.id]) - assert rlat_clone.get_universe((0, 1)) == \ - next(iter(rlat_clone.get_universe((0, 0)).cells.values())).fill - assert rlat_clone.get_universe((1, 1)) != \ - next(iter(rlat_clone.get_universe((0, 0)).cells.values())).fill + assert rlat_clone.get_universe((0, 1)) == rlat_clone.get_universe((0, 0)) + assert rlat_clone.get_universe((1, 1)) != rlat_clone.get_universe((0, 0)) def test_discretization_lns_nested_lattices(rlat2): @@ -101,26 +109,39 @@ def test_discretization_lns_nested_lattices(rlat2): main_lattice.pitch = (20, 20) main_lattice.universes = [[u1,u1,u1], [u2,u1,u2], [u1,u1,u2]] + main_lattice_clone = main_lattice.clone() main_lattice.discretize(strategy="lns") # Both involved a transposition from (2,0) neighbor pattern - assert next(iter(main_lattice.get_universe((0, 0)).cells.values())).fill\ - == next(iter(main_lattice.get_universe((2, 2)).cells.values())).fill + assert main_lattice.get_universe((0, 0)) == \ + main_lattice.get_universe((2, 2)) # Transposition creates a clone so the two universes cant match assert main_lattice.get_universe((2, 0)) != \ - next(iter(main_lattice.get_universe((2, 2)).cells.values())).fill + main_lattice.get_universe((2, 2)) # Different neighbor pattern assert main_lattice.get_universe((1, 1)) != \ - next(iter(main_lattice.get_universe((0, 0)).cells.values())).fill + main_lattice.get_universe((0, 0)) # Look inside inner lattices for i in range(3): for j in range(3): assert next(iter(main_lattice.get_universe((0, 2)).cells.values())\ ).fill.get_universe((i, j)).name == \ - next(iter(next(iter(main_lattice.get_universe((2, 2)).cells\ - .values())).fill.cells.values())).fill.get_universe((2-j, - 2-i)).name + next(iter(main_lattice.get_universe((2, 2)).cells.values( + ))).fill.get_universe((i, j)).name + + # Test when rotating the sublattices with their neighbors + main_lattice_clone.discretize(strategy="lns", + rotate_universe_with_neighbors=True) + + # Look inside inner lattices + for i in range(3): + for j in range(3): + assert next(iter(main_lattice_clone.get_universe((0, 2) + ).cells.values())).fill.get_universe((i, j)).name == \ + next(iter(next(iter(main_lattice_clone.get_universe((2, 2) + ).cells.values())).fill.cells.values())).fill.get_universe( + (2-j, 2-i)).name