Skip to content

Commit 5c10214

Browse files
authored
added openmc.Material.mean_free_path function (#3469)
1 parent 01fa805 commit 5c10214

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

openmc/material.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1718,6 +1718,36 @@ def from_xml_element(cls, elem: ET.Element) -> Material:
17181718
return mat
17191719

17201720

1721+
def mean_free_path(self, energy: float) -> float:
1722+
"""Calculate the mean free path of neutrons in the material at a given
1723+
energy.
1724+
1725+
.. versionadded:: 0.15.3
1726+
1727+
Parameters
1728+
----------
1729+
energy : float
1730+
Neutron energy in eV
1731+
1732+
Returns
1733+
-------
1734+
float
1735+
Mean free path in cm
1736+
1737+
"""
1738+
from openmc.plotter import _calculate_cexs_elem_mat
1739+
1740+
energy_grid, cexs = _calculate_cexs_elem_mat(
1741+
this=self,
1742+
types=["total"],
1743+
)
1744+
total_cexs = cexs[0]
1745+
1746+
interpolated_cexs = float(np.interp(energy, energy_grid, total_cexs))
1747+
1748+
return 1.0 / interpolated_cexs
1749+
1750+
17211751
class Materials(cv.CheckedList):
17221752
"""Collection of Materials used for an OpenMC simulation.
17231753

tests/unit_tests/test_material.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,3 +710,16 @@ def test_avoid_subnormal(run_in_tmpdir):
710710
# When read back in, the density should be zero
711711
mats = openmc.Materials.from_xml()
712712
assert mats[0].get_nuclide_atom_densities()['H2'] == 0.0
713+
714+
715+
def test_mean_free_path():
716+
717+
mat1 = openmc.Material()
718+
mat1.add_nuclide('Si28', 1.0)
719+
mat1.set_density('g/cm3', 2.32)
720+
assert mat1.mean_free_path(energy=14e6) == pytest.approx(11.41, abs=1e-2)
721+
722+
mat2 = openmc.Material()
723+
mat2.add_nuclide('Pb208', 1.0)
724+
mat2.set_density('g/cm3', 11.34)
725+
assert mat2.mean_free_path(energy=14e6) == pytest.approx(5.65, abs=1e-2)

0 commit comments

Comments
 (0)