Using IRDFF-II Cross Section Data in OpenMC

I’m interested in using the IRDFF-II cross section library ([International Reactor Dosimetry and Fusion File (IRDFF-II)]) for simulating certain dosimetry reactions, but I’m having a tough time getting the IRDFF data into the OpenMC HDF5 cross section format. On the website linked above there are download links for the library in ENDF-6 and ACE format, which I’ve tried to convert to the OpenMC format using the openmc.data module with no success.

When I try using the ENDF file I get the following NotImplementedError, which I assume means that this feature simply isn’t available yet:

NotImplementedError: Cannot export incident neutron data that originated from an ENDF file.

When I try using the ACE files I get the following TypeError:

TypeError: <ACE Table: 14028.34y> is not a continuous-energy neutron ACE table.

Am I going about this correctly, or is it possible at all in the current version of OpenMC?

Thanks,
John Ball

@jlball welcome to the community and thanks for your question. You are going about this correct – unfortunately we don’t have a way at present to easily utilize dosimetry data. However, with a few lines of Python, it’s possible to extract data out of the ACE files and use them in an EnergyFunctionFilter for an OpenMC tally. I’ve put together a quick notebook demonstrating this. If you can do me a favor, give this a try and let me know if it works out for you. If so, I’ll add a function in OpenMC with this logic to make it easier in the future to get data out of those dosimetry ACE files.

Thanks @paulromano. It seem the approach will work. I need to tally dosimetry reaction rates in some SINBAD fusion benchmarks. However two things when I tested it:

  1. for ace files of some nuclides e.g tungsten, gold, openmc throws the error 'energy bins must be monotonically increasing.
  2. because of the need to tally reaction rate for specific reaction/nuclides, it seem one should specify the reaction MT number for the reaction/nuclide of interest or the actual reaction type as in ‘tally.scores’ , but this needs checking if it will work with approach using XS from ace files in the energy function filer

would also like to ask if its possible to normalise openmc tally to say number of atoms, without postprocessing.

Hey! Thanks @paulromano for this workaround with the energy filters. Just wanted to add that I had some issues with gold cross sections from IRDFF II, because the energy resolution of the xs is very fine I got duplicate energy boundaries. Consequently OpenMC crashed because energy bins were not monotonically increasing. Got around this issues by finding the culprits and nudging them a bit.
Pseudocode:

  1. find the duplicate boundaries
    au_energy = cross_sections[mat_num].x
    s = np.sort(au_energy, axis=None)
    s[:-1][s[1:] == s[:-1]]

  2. once you have the culprits you can adjust them by hand in the tally.xml file or adjust the elements in the energy array before applying the energy filter to the tallies