diff --git a/libra_toolbox/__init__.py b/libra_toolbox/__init__.py index d7bf500..6cf8257 100644 --- a/libra_toolbox/__init__.py +++ b/libra_toolbox/__init__.py @@ -1,2 +1,3 @@ from . import tritium from . import neutron_detection +from . import neutronics \ No newline at end of file diff --git a/libra_toolbox/_version.py b/libra_toolbox/_version.py new file mode 100644 index 0000000..dcdd831 --- /dev/null +++ b/libra_toolbox/_version.py @@ -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') diff --git a/libra_toolbox/neutronics/__init__.py b/libra_toolbox/neutronics/__init__.py new file mode 100644 index 0000000..ce942a2 --- /dev/null +++ b/libra_toolbox/neutronics/__init__.py @@ -0,0 +1 @@ +from . import neutron_source \ No newline at end of file diff --git a/libra_toolbox/neutronics/neutron_source/__init__.py b/libra_toolbox/neutronics/neutron_source/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/libra_toolbox/neutronics/neutron_source/mvng_source.py b/libra_toolbox/neutronics/neutron_source/mvng_source.py new file mode 100644 index 0000000..2568d79 --- /dev/null +++ b/libra_toolbox/neutronics/neutron_source/mvng_source.py @@ -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 diff --git a/libra_toolbox/neutronics/neutron_source/mvng_source_diamond.h5 b/libra_toolbox/neutronics/neutron_source/mvng_source_diamond.h5 new file mode 100644 index 0000000..8afe5fa Binary files /dev/null and b/libra_toolbox/neutronics/neutron_source/mvng_source_diamond.h5 differ diff --git a/pyproject.toml b/pyproject.toml index e6c18e9..1728774 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" \ No newline at end of file +write_to = "libra_toolbox/_version.py" + +[tool.setuptools.package-data] +mvng_source = ["libra_toolbox/neutronics/neutron_source/mvng_source_diamond.h5"] \ No newline at end of file