Capabilities of OpenMC

We are looking to see if we can use OpenMC for irradiation experiment analysis for ATR and TREAT reactors at INL. I was wondering if someone could quickly answer what requirements OpenMC would be able to satisfy and what could not.

|F.1|The software shall provide depletion/activation of isotopes specified by the user for the following reactions: (n,fission), (n,γ), (n,alpha), (n,p), and (n,xn’).|
|F.2|The software shall track isotopic depletion and transmutation of materials in user specified regions.|
|F.3|The software shall be able to accurately calculate an eigenvalue (keff) for the geometric configuration for the ATR, ATRC, and TREAT.|
|F.4|The software shall allow for the reactor operating cycle simulation and changes in conditions such as reactor power, shutdown, rotating movement of control shims and axial movement of control shims.|
|F.5|The software shall be able to calculate the energy deposition from prompt and delayed neutrons and photons as the result of fission in various user specified regions within the reactor.|
|F.6|The software shall calculate fission density in a fueled region of interest|
|F.7|The software shall allow for the user to input compositions for irradiated fuel elements and experiments.|
|F.8|The software shall be able to calculate the neutron flux for multiple user specified energy bins for a geometric configuration similar to the ATR.|
|F.9|The software shall provide results for eigenvalue and neutron/photon heating rate tallies with statistical uncertainty. |
|F.10|The software shall allow the development of ATR, ATRC, and TREAT to support efficient analysis. |
|F.11|The software shall calculate neutron kinetics parameters.|
|F.12|The software shall Doppler broaden neutron cross sections.|

Hey @nukespud and welcome to the community! Glad to hear you’re interested in the possibility of using OpenMC. To address each of these requirements:

OpenMC has a depletion capability that satisfies this. Notably, there is a lot of flexibility in how depletion chains are created including specifying which reactions should be accounted for (see the reactions argument to Chain.from_endf). For cross-code comparisons, see this paper.

Depletion is done based on materials and you can mark any material to be depletable or not (including materials with no fuel).

No problem here – I’ve run an autoconverted ATR OpenMC model before based on the MCNP model in ICSBEP.

When running a depletion simulation, you can specify a time-varying power level as well as cooling periods where there is no power. We don’t have a super straightforward way to make geometry modifications in the middle of a depletion simulation, but it can be done by running successive depletion simulations, making the geometry changes manually in between.

No problem with this one. We wrote an ANS transactions paper (requires login) that goes over some energy deposition comparisons to Serpent/MCNP. Some more documentation on energy deposition here.

We have an extensive tally system that handles this.

User’s guide section on how to input material compositions.

This can be done with an EnergyFilter.

All user-specified and global tallies (e.g., k-effective) are reported with the statistical uncertainty.

Through our Python API, you can do some really sophisticated analysis. I’d encourage you to check out the list of example Jupyter notebooks that should give a good sense of what’s possible.

This is the one area that OpenMC is currently lacking. There have been a few developmental branches where such capabilities were added but they never made it back to the main branch. If this is a showstopper for you guys, I’d be happy to discuss this further and see how we could work together to get such capabilities in the code.

Our Python API includes an openmc.data module for processing, manipulating, and inspecting nuclear data. If you have an ENDF file, you can easily create an HDF5 data file for OpenMC with cross sections at multiple temperatures as follows:

h1 = openmc.data.IncidentNeutron.from_endf(
    'n-001_H_001.endf',
    temperatures=[300., 400., 500.]
)
h1.export_to_hdf5('H1.h5')

There has also been a lot of R&D on a fundamentally different representation of of cross section data called the windowed multipole format that allows cross sections to be calculated at any energy and temperature at runtime without storing the cross sections in pregenerated tables. We have windowed multipole data available for ENDF/B-VII.1 and expect to have data for ENDF/B-VIII.0 in the near-term as well. In general, you can find pregenerated HDF5 files for the major nuclear data libraries at Official Data Libraries | OpenMC.

Let me know if you have further questions.

1 Like

This is a great list. Thank you so much for the time. What would it take to do geometry changes between time steps. How much effort would be to rotate and translate geometry between time steps.

You should be able to do it today by running each timestep as its own depletion simulation, and then in between timesteps make the required geometry changes. Hopefully the geometry changes you’re imagining don’t result in any changes in the volume of depletable materials? If so, it might be a little more complicated. We have an open issue on Github discussing the design of a built-in capability to be able to perform arbitrary logic between timesteps that you might find interesting; feel free to chime in if you have thoughts or potential user requirements for such a capability.