From 5f1b05f5faea4d00f0d5d359b2fc868a4f0a3c10 Mon Sep 17 00:00:00 2001 From: shimwell Date: Mon, 29 Aug 2022 17:01:34 +0100 Subject: [PATCH 1/3] added element filter to get_nuclide --- openmc/material.py | 22 ++++++++++++++++++---- tests/unit_tests/test_material.py | 17 +++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index d9d4f241d3..ac8e73afe6 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -795,16 +795,30 @@ class Material(IDManagerMixin): return sorted({re.split(r'(\d+)', i)[0] for i in self.get_nuclides()}) - def get_nuclides(self): - """Returns all nuclides in the material + def get_nuclides(self, element: Optional[str] = None): + """Returns a list of all nuclides in the material, if the element + argument is specified then just nuclides of that element are returned. + + Parameters + ---------- + element : str + Specifies the element to match when searching through the nuclides Returns ------- nuclides : list of str List of nuclide names - """ - return [x.name for x in self._nuclides] + + if element: + matching_nuclides = [] + for nuclide in self._nuclides: + if re.split(r'(\d+)', nuclide.name)[0] == element: + matching_nuclides.append(nuclide.name) + return list(set(matching_nuclides)) + + else: + return list(set([x.name for x in self._nuclides])) def get_nuclide_densities(self): """Returns all nuclides in the material and their densities diff --git a/tests/unit_tests/test_material.py b/tests/unit_tests/test_material.py index 8bb8817958..8879119a1f 100644 --- a/tests/unit_tests/test_material.py +++ b/tests/unit_tests/test_material.py @@ -299,6 +299,23 @@ def test_isotropic(): assert m2.isotropic == ['H1'] +def test_get_nuclides(): + mat = openmc.Material() + + mat.add_nuclide('Li6', 1.0) + assert mat.get_nuclides() == ['Li6'] + assert mat.get_nuclides(element='Li') == ['Li6'] + assert mat.get_nuclides(element='Be') == [] + + mat.add_element('Li', 1.0) + assert mat.get_nuclides() == ['Li7', 'Li6'] + assert mat.get_nuclides(element='Be') == [] + + mat.add_element('Be', 1.0) + assert mat.get_nuclides() == ['Li7', 'Li6', 'Be9'] + assert mat.get_nuclides(element='Be') == ['Be9'] + + def test_get_elements(): # test that zero elements exist on creation m = openmc.Material() From b857fbd261f4f04136afee6d80b35d740cbe818c Mon Sep 17 00:00:00 2001 From: shimwell Date: Mon, 29 Aug 2022 18:10:52 +0100 Subject: [PATCH 2/3] appending to list if not in list --- openmc/material.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index ac8e73afe6..f137ec0cd7 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -810,15 +810,18 @@ class Material(IDManagerMixin): List of nuclide names """ + matching_nuclides = [] if element: - matching_nuclides = [] for nuclide in self._nuclides: if re.split(r'(\d+)', nuclide.name)[0] == element: - matching_nuclides.append(nuclide.name) - return list(set(matching_nuclides)) - + if nuclide.name not in matching_nuclides: + matching_nuclides.append(nuclide.name) else: - return list(set([x.name for x in self._nuclides])) + for nuclide in self._nuclides: + if nuclide.name not in matching_nuclides: + matching_nuclides.append(nuclide.name) + + return matching_nuclides def get_nuclide_densities(self): """Returns all nuclides in the material and their densities From 5a0884e9de34cfcaf5cd16dccfb3f28303d962d5 Mon Sep 17 00:00:00 2001 From: shimwell Date: Mon, 29 Aug 2022 22:41:07 +0100 Subject: [PATCH 3/3] corrected get nuclide tests --- tests/unit_tests/test_material.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit_tests/test_material.py b/tests/unit_tests/test_material.py index 8879119a1f..26ccbc9feb 100644 --- a/tests/unit_tests/test_material.py +++ b/tests/unit_tests/test_material.py @@ -308,11 +308,11 @@ def test_get_nuclides(): assert mat.get_nuclides(element='Be') == [] mat.add_element('Li', 1.0) - assert mat.get_nuclides() == ['Li7', 'Li6'] + assert mat.get_nuclides() == ['Li6', 'Li7'] assert mat.get_nuclides(element='Be') == [] mat.add_element('Be', 1.0) - assert mat.get_nuclides() == ['Li7', 'Li6', 'Be9'] + assert mat.get_nuclides() == ['Li6', 'Li7', 'Be9'] assert mat.get_nuclides(element='Be') == ['Be9']