==================== What's New in 0.15.0 ==================== .. currentmodule:: openmc ------- Summary ------- This release of OpenMC includes many bug fixes, performance improvements, and several notable new features. The major highlight of this release is the introduction of a new transport solver based on the random ray method, which is fully described in the :ref:`user's guide `. Other notable additions include a mesh-based source class (:class:`openmc.MeshSource`), a generalization of source domain rejection through the notion of "constraints", and new methods on mesh-based classes for computing material volume fractions and homogenized materials. ------------------------------------ Compatibility Notes and Deprecations ------------------------------------ Previously, specifying domain rejection for a source was only possible on the :class:`~openmc.IndependentSoure` class and worked by specifying a `domains` argument. This capability has been generalized to all source classes and expanded as well; specifying a domain to reject on should now be done with the `constraints` argument as follows:: source = openmc.IndependentSource(..., constraints={'domains': [cell]}) The `domains` argument is deprecated and will be removed in a future version of OpenMC. Similarly, the ``only_fissionable`` argument to :class:`openmc.stats.Box` has been replaced by a `'fissionable'` constraint. That is, instead of specifying:: space = openmc.stats.Box(lower_left, upper_right, only_fissionable=True) source = openmc.IndependentSource(space=space) You should now provide the constraint as:: space = openmc.stats.Box(lower_left, upper_right) source = openmc.IndependentSource(space=space, constraints={'fissionable': True}) The :attr:`openmc.Settings.max_splits` attribute was renamed to ``max_history_splits`` and its default value has been changed to 1e7 (`#2954 `_). ------------ New Features ------------ - When running OpenMC in volume calculation mode, only atomic weight ratio data is loaded from data files which reduces initialization time. (`#2741 `_) - Introduced a ``GeometryState`` class in C++ to better separate particle and geometry data. (`#2744 `_)) - A new :class:`openmc.MaterialFromFilter` class allows filtering tallies by which material a particle came from. (`#2750 `_) - Implemented a :meth:`openmc.deplete.MicroXS.from_multigroup_flux` method that generates microscopic cross sections for depletion from a predetermined multigroup flux. (`#2755 `_) - A new :class:`openmc.MeshSource` class enables the specification of a source distribution over a mesh, where each mesh element has a different energy/angle/time distribution. (`#2759 `_) - Improve performance of depletion solver by utilizing CSR sparse matrix representation. (`#2764 `_, `#2771 `_) - Added a :meth:`openmc.CylindricalMesh.get_indices_at_coords` method that provides the mesh element index corresponding to a given point in space. (`#2782 `_) - Added a `path` argument to the :meth:`openmc.deplete.Integrator.integrate` method. (`#2784 `_) - Added a :meth:`openmc.Geometry.get_all_nuclides` method. (`#2796 `_) - A new capability to compute material volume fractions over mesh elements was added in the :meth:`openmc.lib.Mesh.material_volumes` method. (`#2802 `_) - A new transport solver was added based on the `random ray `_ method. (`#2823 `_, `#2988 `_) - Added a :attr:`openmc.lib.Material.depletable` attribute. (`#2843 `_) - Added a :meth:`openmc.lib.Mesh.get_plot_bins` method and corresponding ``openmc_mesh_get_plot_bins`` C API function that can be utilized to generate mesh tally visualizations in the plotter application. (`#2854 `_) - Introduced a :func:`openmc.read_source_file` function that enables reading a source file from the Python API. (`#2858 `_) - Added a ``bounding_box`` property on the :class:`openmc.RectilinearMesh` and :class:`openmc.UnstructuredMesh` classes. (`#2861 `_) - Added a ``openmc_mesh_get_volumes`` C API function. (`#2869 `_) - The :attr:`openmc.Settings.surf_source_write` dictionary now accepts `cell`, `cellfrom`, or `cellto` keys that limit surface source sites to those entering or leaving specific cells. (`#2888 `_) - Added a :meth:`openmc.Region.plot` method that allows regions to be plotted directly. (`#2895 `_) - Implemented "contains" operator for the :class:`openmc.BoundingBox` class. (`#2906 `_) - Generalized source rejection via a new ``constraints`` argument to all source classes. (`#2916 `_) - Added a new :class:`openmc.MeshBornFilter` class that filters tally events based on which mesh element a particle was born in. (`#2925 `_) - The :class:`openmc.Trigger` class now has a ``ignore_zeros`` argument that results in any bins with zero score to be ignored when checking the trigger. (`#2928 `_) - Introduced a :attr:`openmc.Settings.max_events` attribute that controls the maximum number of events a particle can undergo. (`#2945 `_) - Added support for :class:`openmc.UnstructuredMesh` in the :class:`openmc.MeshSource` class. (`#2949 `_) - Added a :meth:`openmc.MeshBase.get_homogenized_materials` method that computes homogenized materials over mesh elements. (`#2971 `_) - Add an ``options`` argument to :class:`openmc.UnstructuredMesh` that allows configuring underlying data structures in MOAB. (`#2976 `_) - Type hints were added to several classes in the :mod:`openmc.deplete` module. (`#2866 `_) --------- Bug Fixes --------- - Fix unit conversion in openmc.deplete.Results.get_mass (`#2761 `_) - Fix Lagrangian interpolation (`#2775 `_) - Depletion restart with MPI (`#2778 `_) - Modify depletion transfer rates test to be more robust (`#2779 `_) - Call simulation_finalize if needed when finalizing OpenMC (`#2790 `_) - F90_NONE Removal (MGMC tallying optimization) (`#2785 `_) - Correctly apply volumes to materials when using DAGMC geometries (`#2787 `_) - Add inline to openmc::interpolate (`#2789 `_) - Use huge_tree=True in lxml parsing (`#2791 `_) - OpenMPMutex "Copying" (`#2794 `_) - Do not link against several transitive dependencies of HDF5 (`#2797 `_) - Added check to length of input arguments for IndependantOperator (`#2799 `_) - Pytest Update Documentation (`#2801 `_) - Move 'import lxml' to third-party block of imports (`#2803 `_) - Fix creation of meshes when from loading settings from XML (`#2805 `_) - Avoid high memory use when writing unstructured mesh VTK files (`#2806 `_) - Consolidating thread information into the openmp interface header (`#2809 `_) - Prevent underflow in calculation of speed (`#2811 `_) - Provide error message if a cell path can't be determined (`#2812 `_) - Fix distribcell labels for lattices used as fill in multiple cells (`#2813 `_) - Make creation of spatial trees based on usage for unstructured mesh. (`#2815 `_) - Ensure particle direction is normalized for plotting / volume calculations (`#2816 `_) - Added missing meshes to documentation (`#2820 `_) - Reset timers at correct place in deplete (`#2821 `_) - Fix config change not propagating through to decay energies (`#2825 `_) - Ensure that implicit complement cells appear last in DAGMC universes (`#2838 `_) - Export model.tallies to XML in CoupledOperator (`#2840 `_) - Fix locating h5m files references in DAGMC universes (`#2842 `_) - Prepare for NumPy 2.0 (`#2845 `_) - Added missing functions and classes to openmc.lib docs (`#2847 `_) - Fix compilation on CentOS 7 (missing link to libdl) (`#2849 `_) - Adding resulting nuclide to cross section plot legend (`#2851 `_) - Updating file extension for Excel files when exporting MGXS data (`#2852 `_) - Removed error raising when calling warn (`#2853 `_) - Setting ``surf_source_`` attribute for DAGMC surfaces. (`#2857 `_) - Changing y axis label for heating plots (`#2859 `_) - Removed unused step_index arg from restart (`#2867 `_) - Fix issue with Cell::get_contained_cells() utility function (`#2873 `_) - Adding energy axis units to plot xs (`#2876 `_) - Set OpenMCOperator materials when diff_burnable_mats = True (`#2877 `_) - Fix expansion filter merging (`#2882 `_) - Added checks that tolerance value is between 0 and 1 (`#2884 `_) - Statepoint file loading refactor and CAPI function (`#2886 `_) - Added check for length of value passed into EnergyFilter (`#2887 `_) - Ensure that Model.run() works when specifying a custom XML path (`#2889 `_) - Updating docker file base to bookworm (`#2890 `_) - Clarifying documentation for cones (`#2892 `_) - Abort on cmake config if openmp requested but not found (`#2893 `_) - Tiny updates from experience building on Mac (`#2894 `_) - Added damage-energy as optional reaction for micro (`#2903 `_) - docs: add missing max_splits in settings specification (`#2910 `_) - Changed CI to use latest actions to get away from the Node 16 deprecation. (`#2912 `_) - Mkdir to always allow parents and exist ok (`#2914 `_) - Fixed small sphinx typo (`#2915 `_) - Hexagonal lattice iterators (`#2921 `_) - Fix Chain.form_matrix to work with scipy 1.12 (`#2922 `_) - Allow get_microxs_and_flux to use OPENMC_CHAIN_FILE environment variable (`#2934 `_) - Polygon fix to better handle colinear points (`#2935 `_) - Fix CMFD to work with scipy 1.13 (`#2936 `_) - Print warning if no natural isotopes when using add_element (`#2938 `_) - Update xtl and xtensor submodules (`#2941 `_) - Ensure two surfaces with different boundary type are not considered redundant (`#2942 `_) - Updated package versions in Dockerfile (`#2946 `_) - Add MPI calls to DAGMC external test (`#2948 `_) - Eliminate deprecation warnings from scipy and pandas (`#2951 `_) - Update math function unit test with catch2 (`#2955 `_) - Support track file writing for particle restart runs. (`#2957 `_) - Make UWUW optional (`#2965 `_) - Allow pure decay IndependentOperator (`#2966 `_) - Added fix to cfloat_endf for length 11 endf floats (`#2967 `_) - Moved apt get to optional CI parts (`#2970 `_) - Update bounding_box docstrings (`#2972 `_) - Added extra error checking on spherical mesh creation (`#2973 `_) - Update CODEOWNERS file (`#2974 `_) - Added error checking on cylindrical mesh (`#2977 `_) - Correction for histogram interpolation of Tabular distributions (`#2981 `_) - Enforce lower_left in lattice geometry (`#2982 `_) - Update random_dist.h comment to be less specific (`#2991 `_) - Apply memoization in get_all_universes (`#2995 `_) - Make sure skewed dataset is cast to bool properly (`#3001 `_) - Hexagonal lattice roundtrip (`#3003 `_) - Fix CylinderSector and IsogonalOctagon translations (`#3018 `_) - Sets used instead of lists when membership testing (`#3021 `_) - Fixing plot xs for when plotting element string reaction (`#3029 `_) - Fix shannon entropy broken link (`#3034 `_) - Only add png or h5 extension if not present in plots.py (`#3036 `_) - Fix non-existent path causing segmentation fault when saving plot (`#3038 `_) - Resolve warnings related to numpy 2.0 (`#3044 `_) - Update IsogonalOctagon to use xz basis (`#3045 `_) - Determine whether nuclides are fissionable in volume calc mode (`#3047 `_) - Avoiding more numpy 2.0 deprecation warnings (`#3049 `_) - Set DAGMC cell instances on surface crossing (`#3052 `_) ------------ Contributors ------------ - `Aidan Crilly `_ - `April Novak `_ - `Davide Mancusi `_ - `Baptiste Mouginot `_ - `Chris Wagner `_ - `Lorenzo Chierici `_ - `Catherine Yu `_ - `Erik Knudsen `_ - `Ethan Peterson `_ - `Gavin Ridley `_ - `hsameer481 `_ - `Hunter Belanger `_ - `Isaac Meyer `_ - `Jin Whan Bae `_ - `Joffrey Dorville `_ - `John Tramm `_ - `Yue Jin `_ - `Sigfrid Stjärnholm `_ - `Kimberly Meagher `_ - `lhchg `_ - `Luke Labrie-Cleary `_ - `Micah Gale `_ - `Nicholas Linden `_ - `pitkajuh `_ - `Rosie Barker `_ - `Paul Romano `_ - `Patrick Shriwise `_ - `Jonathan Shimwell `_ - `Travis Labossiere-Hickman `_ - `Vanessa Lulla `_ - `Olek Yardas `_ - `Perry Young `_