Skip to content

Commit

Permalink
+ openmc model neutron source
Browse files Browse the repository at this point in the history
  • Loading branch information
SteSeg committed Dec 9, 2024
1 parent eef7af6 commit c693621
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 1 deletion.
1 change: 1 addition & 0 deletions libra_toolbox/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from . import tritium
from . import neutron_detection
from . import neutronics
16 changes: 16 additions & 0 deletions libra_toolbox/_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# file generated by setuptools_scm
# don't change, don't track in version control
TYPE_CHECKING = False
if TYPE_CHECKING:
from typing import Tuple, Union
VERSION_TUPLE = Tuple[Union[int, str], ...]
else:
VERSION_TUPLE = object

version: str
__version__: str
__version_tuple__: VERSION_TUPLE
version_tuple: VERSION_TUPLE

__version__ = version = '0.1.dev87+geef7af6.d20241209'
__version_tuple__ = version_tuple = (0, 1, 'dev87', 'geef7af6.d20241209')
1 change: 1 addition & 0 deletions libra_toolbox/neutronics/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import neutron_source
Empty file.
57 changes: 57 additions & 0 deletions libra_toolbox/neutronics/neutron_source/mvng_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# building the MIT-VaultLab neutron generator
# angular and energy distribution

import numpy as np
import h5py
import openmc


def mvng_source_diamond(center=(0, 0, 0), reference_uvw=(0, 0, 1)):
'''method for building the MIT-VaultLab neutron generator in OpenMC
with data tabulated from John Ball and Shon Mackie characterization
via diamond detectors
Parameters
----------
center : coordinate position of the source (it is a point source)
reference_uvw : direction for the polar angle (tuple or list of versors)
it is the same for the openmc.PolarAzimuthal class
more specifically, polar angle = 0 is the direction of the D accelerator
towards the Zr-T target
'''

angles = ["0", "15", "30", "45", "60", "75", "90", "105", "120", "135", "150"]

with h5py.File('mvng_source_diamond.h5', 'r') as mvng_source:
# energy values
energies = mvng_source['values/table']['Energy (MeV)'] * 1e6
# angular bins in [0, pi)
pbins = np.cos([np.deg2rad(float(a)) for a in angles] + [np.pi])
spectra = [mvng_source['values/table'][col] for col in angles]

# yield values for strengths
yields = np.sum(spectra, axis=-1) * np.diff(pbins)
yields /= np.sum(yields)

# azimuthal values
phi = openmc.stats.Uniform(a=0, b=2*np.pi)

all_sources = []
for i, angle in enumerate(pbins[:-1]):

mu = openmc.stats.Uniform(a=pbins[i+1], b=pbins[i])

space = openmc.stats.Point(center)
angle = openmc.stats.PolarAzimuthal(
mu=mu, phi=phi, reference_uvw=reference_uvw)
energy = openmc.stats.Tabular(
energies, spectra[i], interpolation='linear-linear')
strength = yields[i]

my_source = openmc.Source(
space=space, angle=angle, energy=energy, strength=strength, particle='neutron')

all_sources.append(my_source)

return all_sources
Binary file not shown.
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,7 @@ dependencies = ["numpy", "pint", "scipy", "matplotlib", "sympy", "pandas"]
tests = ["pytest>=5.4.3", "pytest-cov", "nbconvert", "ipykernel"]

[tool.setuptools_scm]
write_to = "libra_toolbox/_version.py"
write_to = "libra_toolbox/_version.py"

[tool.setuptools.package-data]
mvng_source = ["libra_toolbox/neutronics/neutron_source/mvng_source_diamond.h5"]

0 comments on commit c693621

Please sign in to comment.