===================
What's New in 0.9.0
===================

.. currentmodule:: openmc

This release of OpenMC is the first release to use a new native HDF5 cross
section format rather than ACE format cross sections. Other significant new
features include a nuclear data interface in the Python API (:mod:`openmc.data`)
a stochastic volume calculation capability, a random sphere packing algorithm
that can handle packing fractions up to 60%, and a new XML parser with
significantly better performance than the parser used previously.

.. caution:: With the new cross section format, the default energy units are now
             **electronvolts (eV)** rather than megaelectronvolts (MeV)! If you
             are specifying an energy filter for a tally, make sure you use
             units of eV now.

The Python API continues to improve over time; several backwards incompatible
changes were made in the API which users of previous versions should take note
of:

- Each type of tally filter is now specified with a separate class. For example::

    energy_filter = openmc.EnergyFilter([0.0, 0.625, 4.0, 1.0e6, 20.0e6])

- Several attributes of the :class:`Plot` class have changed (``color`` ->
  ``color_by`` and ``col_spec`` > ``colors``). :attr:`Plot.colors` now accepts a
  dictionary mapping :class:`Cell` or :class:`Material` instances to RGB
  3-tuples or string colors names, e.g.::

    plot.colors = {
        fuel: 'yellow',
        water: 'blue'
    }

- ``make_hexagon_region`` is now :func:`get_hexagonal_prism`
- Several changes in :class:`Settings` attributes:

  - ``weight`` is now set as ``Settings.cutoff['weight']``
  - Shannon entropy is now specified by passing a :class:`openmc.Mesh` to
    :attr:`Settings.entropy_mesh`
  - Uniform fission site method is now specified by passing a
    :class:`openmc.Mesh` to :attr:`Settings.ufs_mesh`
  - All ``sourcepoint_*`` options are now specified in a
    :attr:`Settings.sourcepoint` dictionary
  - Resonance scattering method is now specified as a dictionary in
    :attr:`Settings.resonance_scattering`
  - Multipole is now turned on by setting ``Settings.temperature['multipole'] =
    True``
  - The ``output_path`` attribute is now ``Settings.output['path']``

- All the ``openmc.mgxs.Nu*`` classes are gone. Instead, a ``nu`` argument was
  added to the constructor of the corresponding classes.

-------------------
System Requirements
-------------------

There are no special requirements for running the OpenMC code. As of this
release, OpenMC has been tested on a variety of Linux distributions and Mac
OS X. Numerous users have reported working builds on Microsoft Windows, but your
mileage may vary. Memory requirements will vary depending on the size of the
problem at hand (mostly on the number of nuclides and tallies in the problem).

------------
New Features
------------

- Stochastic volume calculations
- Multi-delayed group cross section generation
- Ability to calculate multi-group cross sections over meshes
- Temperature interpolation on cross section data
- Nuclear data interface in Python API, :mod:`openmc.data`
- Allow cutoff energy via :attr:`Settings.cutoff`
- Ability to define fuel by enrichment (see :meth:`Material.add_element`)
- Random sphere packing for TRISO particle generation,
  :func:`openmc.model.pack_trisos`
- Critical eigenvalue search, :func:`openmc.search_for_keff`
- Model container, :class:`openmc.model.Model`
- In-line plotting in Jupyter, :func:`openmc.plot_inline`
- Energy function tally filters, :class:`openmc.EnergyFunctionFilter`
- Replaced FoX XML parser with `pugixml <http://pugixml.org/>`_
- Cell/material instance counting, :meth:`Geometry.determine_paths`
- Differential tallies (see :class:`openmc.TallyDerivative`)
- Consistent multi-group scattering matrices
- Improved documentation and new Jupyter notebooks
- OpenMOC compatibility module, :mod:`openmc.openmoc_compatible`

---------
Bug Fixes
---------

- c5df6c_: Fix mesh filter max iterator check
- 1cfa39_: Reject external source only if 95% of sites are rejected
- 335359_: Fix bug in plotting meshlines
- 17c678_: Make sure system_clock uses high-resolution timer
- 23ec0b_: Fix use of S(a,b) with multipole data
- 7eefb7_: Fix several bugs in tally module
- 7880d4_: Allow plotting calculation with no boundary conditions
- ad2d9f_: Fix filter weight missing when scoring all nuclides
- 59fdca_: Fix use of source files for fixed source calculations
- 9eff5b_: Fix thermal scattering bugs
- 7848a9_: Fix combined k-eff estimator producing NaN
- f139ce_: Fix printing bug for tallies with AggregateNuclide
- b8ddfa_: Bugfix for short tracks near tally mesh edges
- ec3cfb_: Fix inconsistency in filter weights
- 5e9b06_: Fix XML representation for verbosity
- c39990_: Fix bug tallying reaction rates with multipole on
- c6b67e_: Fix fissionable source sampling bug
- 489540_: Check for void materials in tracklength tallies
- f0214f_: Fixes/improvements to the ARES algorithm

.. _c5df6c: https://github.com/openmc-dev/openmc/commit/c5df6c
.. _1cfa39: https://github.com/openmc-dev/openmc/commit/1cfa39
.. _335359: https://github.com/openmc-dev/openmc/commit/335359
.. _17c678: https://github.com/openmc-dev/openmc/commit/17c678
.. _23ec0b: https://github.com/openmc-dev/openmc/commit/23ec0b
.. _7eefb7: https://github.com/openmc-dev/openmc/commit/7eefb7
.. _7880d4: https://github.com/openmc-dev/openmc/commit/7880d4
.. _ad2d9f: https://github.com/openmc-dev/openmc/commit/ad2d9f
.. _59fdca: https://github.com/openmc-dev/openmc/commit/59fdca
.. _9eff5b: https://github.com/openmc-dev/openmc/commit/9eff5b
.. _7848a9: https://github.com/openmc-dev/openmc/commit/7848a9
.. _f139ce: https://github.com/openmc-dev/openmc/commit/f139ce
.. _b8ddfa: https://github.com/openmc-dev/openmc/commit/b8ddfa
.. _ec3cfb: https://github.com/openmc-dev/openmc/commit/ec3cfb
.. _5e9b06: https://github.com/openmc-dev/openmc/commit/5e9b06
.. _c39990: https://github.com/openmc-dev/openmc/commit/c39990
.. _c6b67e: https://github.com/openmc-dev/openmc/commit/c6b67e
.. _489540: https://github.com/openmc-dev/openmc/commit/489540
.. _f0214f: https://github.com/openmc-dev/openmc/commit/f0214f

------------
Contributors
------------

This release contains new contributions from the following people:

- `Will Boyd <wbinventor@gmail.com>`_
- `Sterling Harper <sterlingmharper@gmail.com>`_
- `Qingming He <906459647@qq.com>`_
- `Colin Josey <cjosey@mit.edu>`_
- `Travis Labossiere-Hickman <tjlaboss@mit.edu>`_
- `Jingang Liang <liangjg2008@gmail.com>`_
- `Amanda Lund <alund@anl.gov>`_
- `Adam Nelson <nelsonag@umich.edu>`_
- `Paul Romano <paul.k.romano@gmail.com>`_
- `Sam Shaner <samuelshaner@gmail.com>`_
- `Jon Walsh <jonathan.a.walsh@gmail.com>`_
