Skip to content

mit-crpg/WMP_Library

Repository files navigation

Windowed Multipole Library

This repository contains neutron cross section data for isotopes in windowed multipole (WMP) format which requires less memory than pointwise cross sections and allows on-the-fly Doppler broadening to arbitrary temperature.

In WMP format, the entire energy range is chopped into equal-in-momentum domains , or windows. For each window, poles in certain range are evaluated exactly and the rest is curve-fitted by low-order polynomials. The 0K cross section can be expressed as:

wmp 0k

where wmp 0k and wmp 0k are poles and residues in the complex plane and wmp 0k is the polynomial coefficients.

Both the poles term and polynomial term can be analytically Doppler broadened to any temperature.

wmp Tk

wmp Tk cont wmp Tk cont wmp Tk cont

wmp Tk cont wmp Tk cont wmp Tk cont

wmp Tk cont

The poles of the nuclides in this library have been generated using Vector Fitting technique [1]. Then the OpenW code is used to process the multipole cross sections into windowed multipole library.

The current library includes 423 nuclides processed from ENDF/B VII.1 library, with a target maximum relative error for all cross sections of 0.1%. An overview of the library can be found in the table in 'nuclides.md'.

More details about the windowed multipole method or multipole representation can be found in [2-4].

  • [1] J. Liang, X. Peng, S. Liu, C. Josey, B. Forget and K. Smith. "Processing Of A Comprehensive Windowed Multipole Library via Vector Fitting." PHYSOR 2018: Reactor Physics paving the way towards more efficient systems. Cancun, Mexico, April 22-26, 2018.
  • [2] C. Josey, P. Ducru, B. Forget, and K. Smith. "Windowed multipole for cross section Doppler broadening." Journal of Computational Physics, volume 307, pp. 715–727 (2016).
  • [3] B. Forget, S. Xu, and K. Smith. "Direct Doppler broadening in Monte Carlo simulations using the multipole representation." Annals of Nuclear Energy, volume 64, pp. 78–85 (2014).
  • [4] R. N. Hwang. "A rigorous pole representation of multilevel cross sections and its practical applications." Nuclear Science and Engineering, volume 96(3), pp. 192–209 (1987).

Library format specifications

Windowed multipole data is stored in HDF5 files, containing the energy boundaries, window structure, poles/residues, and curve fit coefficients, etc.

Detailed specifications can be found in 'Windowed Multipole Library Format'.

Download

  • download the compressed library from the latest releases: https://github.com/mit-crpg/WMP_Library/releases

    $ wget https://github.com/mit-crpg/WMP_Library/releases/download/v1.0.1/WMP_Library_v1.0.1.tar.gz
  • clone from git repository

    Git LFS is used to store the binary HDF5 files. To download the real WMP library, you need to firstly install Git LFS and then clone this repository.

    $ git clone https://github.com/mit-crpg/WMP_Library.git

Usage

With the windowed multipole library, it is convenient and efficient to compute cross sections at arbitrary temperature (in 0 K-3000 K range) and energy (in the resolved resonance range) for 4 reactions: total, elastic scattering, absorption, and fission.

An excellent reference is OpenMC, which implements WMP in both the transport solver and the OpenMC Python API. You can also check the scripts scripts/WMP.py for a Python implementation, which illustrates how to read, evaluate and export an windowed multipole format library. For example, the following script demonstrates how to utilize WMP library using the nuclear data interface WindowedMultipole.

# load a library
import WMP
u238_multipole = WMP.WindowedMultipole.from_hdf5('092238.h5')

# evaluate cross sections at a given energy and temperature
scatt_xs, absorption_xs, fission_xs = u238_multipole(E=1.0, T=300.)

# comparison with ACE library (HDF5 format used in OpenMC)
import openmc.data
u238_ace = openmc.data.IncidentNeutron.from_hdf5('U238.h5')
energy = np.logspace(np.log10(u238_multipole.E_min), np.log10(u238_multipole.E_max), 1E4)
scatt_xs_wmp = u238_multipole(energy, T=293.75)[0]
scatt_xs_ace = u238_ace[2].xs['294K'](energy)
# then you can plot the cross sections with energies

Reporting