Skip to content

A multi isotope enrichment module for the nuclear fuel cycle simulator Cyclus

License

Notifications You must be signed in to change notification settings

maxschalz/miso_enrichment

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

misoenrichment: a nuclear archaeology module for Cyclus

GitHub Code style: black

misoenrichment is a module for the nuclear fuel cycle simulator Cyclus and is developed at the Nuclear Verification and Disarmament Group at RWTH Aachen University. It currently provides two Cyclus facilities, MIsoEnrich and GprReactor.

MIsoEnrich is an enrichment facility that enriches streams composed of two or more uranium isotopes taking into account the different enrichment behaviour of minor isotopes such as 234U (present in natural as well as in reprocessed uranium) or 236U (present in reprocessed uranium from spent nuclear fuel). The tracking of minor isotopes makes this module suitable for nuclear archaeology, see, e.g., Ref 3.

GprReactor is a Cyclus reactor facility that uses Gaussian Process Regression (GPR) to calculate the composition of the irradiated fuel depending on various input parameters. Generally, this implementation works for any reactor type and any input parameters. However, one needs the appropriate GPR model (which needs to be generated using training data) and depending on which input parameters are chosen, the source code of GprReactor may need minor tweaking. Additional information on this issue will be given in future commits.

MIsoEnrich

Installation

This module has some dependencies. Python dependencies (scipy and numpy are installed automatically via pip, while the C++ dependencies (CppOptimizationLibrary, Eigen and JSON for Modern C++) are included as Git submodules. These need to be fetched first, as shown below:

$ git clone https://github.com/Nuclear-Verification-and-Disarmament/miso_enrichment.git
$ cd miso_enrichment
$ git submodule update --init --recursive  # Download C++ dependencies
$ python3 install.py  # Install misoenrichment module
$ misoenrichment_unit_tests  # Run unit tests (optional).

Getting started

An example input file is found in input/main.py featuring a cycamore::Source source agent, a MIsoEnrich enrichment facility and two cycamore::Sink agents, one for enriched and one for depleted uranium.

Note that the sink requests a binary composition of enriched uranium (90% 235U, 10% 238 U) and that the enrichment facility enriches to a level at least equal to the requested one while keeping track of the minor isotopes. This implies that one does not need to know the final composition of enriched uranium beforehand (its desired assay is sufficient). In fact, one cannot request a material with a certain concentration in minor isotopes or with a constraint on the minor isotopes concentration (e.g., to make it ASTM compliant, see Ref 4).

Additionally, it should be noted that the facility allows to select between integer number of stages (default) or decimal number of stages. The former option will exceed (undershoot) the desired product (tails) assay, the latter option will match both assays as close as possible.

Also note that when using an integer number of stages, the facility supports downblending of uranium. This means that the facility tries to match the desired enrichment level as precise as possible by first enriching the uranium (to a higher level, as explained above) and then blending the product with uranium from the feed. This procedure is only performed if the use_downblending variable is set to True in the input file.

Theoretical background

The implementation of the facility itself and the interaction with Cyclus' Dynamic Resource Exchange is based on the binary enrichment facility from the Cycamore package.

The multi-component isotope calculations are based on mainly on Refs 1 and 2. Ref 1 derives the mathematical formalism of a matched abundance ratio cascade using constant overall stage separation factors while Ref 2 gives a new physically founded approach to calculating said separation factors.

GprReactor

🚨 Please note that this module does not work at the moment. I do not manage to correctly include the JSON dependency in the build system and will have to investigate this further or even remove this package entirely. For updates see issue #6.

Requirements

This facility needs Niels Lohmann's JSON for Modern C++ library. It can be downloaded from his GitHub repository or using one of the many package managers, see here. Successfully tested using conda install -c conda-forge nlohmann_json and using CMake. When using CMake, then the package needs to be installed globally (i.e., under /usr/local), as shown in the following:

$ git clone https://github.com/nlohmann/json
$ cd json
$ mkdir build
$cd build
$ cmake ..
$ make
$ sudo make install

While it should be possible to install JSON for Modern C++ locally, i.e. in ~/.local, this results in CMake not finding nlohmann/json.hpp during the misoenrichment installation. I will hopefully manage to fix this in future versions.

Additionally, one needs Python3 in combination with the NumPy and SciPy packages.

References

  1. E. von Halle, Multicomponent Isotope Separation in Matched Abundance Ratio Cascades Composed of Stages With Large Separation Factors. International Technology Programs (K/ITP--131). Oak Ridge, TN (1987).
  2. Houston G. Wood, Effects of Separation Processes on Minor Uranium Isotopes in Enrichment Cascades. Science and Global Security, 16:26–36 (2008), DOI: 10.1080/08929880802361796.
  3. Steve Fetter, Nuclear Archaeology: Verifying Declarations of Fissile-material Production. Science and Global Security, 3:237-261 (1993).
  4. ASTM International. C787-20 Standard Specification for Uranium Hexafluoride for Enrichment. West Conshohocken, PA; ASTM International, 2020. DOI: 10.1520/C0787-20.

About

A multi isotope enrichment module for the nuclear fuel cycle simulator Cyclus

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 77.8%
  • Python 16.1%
  • CMake 6.1%