From acd6c567c3e44b3cdee15278728f0d1f8e8918ea Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Tue, 21 Jun 2022 14:19:45 +0000 Subject: [PATCH 1/4] added test for remove eleemnt --- tests/unit_tests/test_material.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/unit_tests/test_material.py b/tests/unit_tests/test_material.py index 02e53a28db..3a976da996 100644 --- a/tests/unit_tests/test_material.py +++ b/tests/unit_tests/test_material.py @@ -38,6 +38,17 @@ def test_remove_nuclide(): assert m.nuclides[1].percent == 2.0 +def test_remove_elements(): + """Test removing elements.""" + m = openmc.Material() + for elem, percent in [('Li', 1.0), ('Be', 1.0)]: + m.add_element(elem, percent) + m.remove_nuclide('Li') + assert len(m.nuclides) == 1 + assert m.nuclides == ['Be9'] + assert m.nuclides[0].percent == 1.0 + + def test_elements(): """Test adding elements.""" m = openmc.Material() From 9b36424e1632aa69716f8f07a51fc8c68d6ad3bf Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 22 Jun 2022 08:19:00 +0100 Subject: [PATCH 2/4] added remove element to material --- openmc/material.py | 17 +++++++++++++++++ tests/unit_tests/test_material.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/openmc/material.py b/openmc/material.py index de1b2187be..188ec2d471 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -407,6 +407,23 @@ class Material(IDManagerMixin): if nuclide == nuc.name: self.nuclides.remove(nuc) + def remove_element(self, element): + """Remove an element from the material + + Parameters + ---------- + element : str + Element to remove + + """ + cv.check_type('element', element, str) + + # If the Material contains the element, delete it + for nuc in reversed(self.nuclides): + element_name = re.split(r'(\d+)', nuc) + if nuc == element_name: + self.nuclides.remove(nuc) + def add_macroscopic(self, macroscopic): """Add a macroscopic to the material. This will also set the density of the material to 1.0, unless it has been otherwise set, diff --git a/tests/unit_tests/test_material.py b/tests/unit_tests/test_material.py index 3a976da996..dda75c88be 100644 --- a/tests/unit_tests/test_material.py +++ b/tests/unit_tests/test_material.py @@ -43,7 +43,7 @@ def test_remove_elements(): m = openmc.Material() for elem, percent in [('Li', 1.0), ('Be', 1.0)]: m.add_element(elem, percent) - m.remove_nuclide('Li') + m.remove_element('Li') assert len(m.nuclides) == 1 assert m.nuclides == ['Be9'] assert m.nuclides[0].percent == 1.0 From 839c0fe81b1b65d205429f79dab317b3251b606a Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 22 Jun 2022 08:32:37 +0100 Subject: [PATCH 3/4] refined remove element --- openmc/material.py | 5 +++-- tests/unit_tests/test_material.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index 188ec2d471..d8fd1859f0 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -420,8 +420,9 @@ class Material(IDManagerMixin): # If the Material contains the element, delete it for nuc in reversed(self.nuclides): - element_name = re.split(r'(\d+)', nuc) - if nuc == element_name: + element_name = re.split(r'(\d+)', nuc.name)[0] + print(element_name, element) + if element_name == element: self.nuclides.remove(nuc) def add_macroscopic(self, macroscopic): diff --git a/tests/unit_tests/test_material.py b/tests/unit_tests/test_material.py index dda75c88be..bfa40bb21f 100644 --- a/tests/unit_tests/test_material.py +++ b/tests/unit_tests/test_material.py @@ -45,7 +45,7 @@ def test_remove_elements(): m.add_element(elem, percent) m.remove_element('Li') assert len(m.nuclides) == 1 - assert m.nuclides == ['Be9'] + assert m.nuclides[0].name == 'Be9' assert m.nuclides[0].percent == 1.0 From c2018c41fdc87d069e00cbe4e87cc07b87d8fc52 Mon Sep 17 00:00:00 2001 From: Jonathan Shimwell Date: Wed, 22 Jun 2022 22:45:37 +0200 Subject: [PATCH 4/4] More efficient regex usage Co-authored-by: Paul Romano --- openmc/material.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openmc/material.py b/openmc/material.py index d8fd1859f0..7e142f09ac 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -420,8 +420,7 @@ class Material(IDManagerMixin): # If the Material contains the element, delete it for nuc in reversed(self.nuclides): - element_name = re.split(r'(\d+)', nuc.name)[0] - print(element_name, element) + element_name = re.split(r'\d+', nuc.name)[0] if element_name == element: self.nuclides.remove(nuc)