added element filter to get_nuclide

This commit is contained in:
shimwell 2022-08-29 17:01:34 +01:00
parent 4599c06918
commit 5f1b05f5fa
2 changed files with 35 additions and 4 deletions

View file

@ -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

View file

@ -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()