Skip to content

OpenMC 0.15.0

Latest
Compare
Choose a tag to compare
@paulromano paulromano released this 22 Jun 01:46
· 78 commits to develop since this release
55b52b7

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 user's guide. Other notable additions include a mesh-based source 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 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 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 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 openmc.MaterialFromFilter class allows filtering tallies by which material a particle came from. (#2750)
  • Implemented a openmc.deplete.MicroXS.from_multigroup_flux method that generates microscopic cross sections for depletion from a predetermined multigroup flux. (#2755)
  • A new 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 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 openmc.deplete.Integrator.integrate method. (#2784)
  • Added a openmc.Geometry.get_all_nuclides method. (#2796)
  • A new capability to compute material volume fractions over mesh elements was added in the openmc.lib.Mesh.material_volumes method. (#2802)
  • A new transport solver was added based on the random ray method. (#2823, #2988)
  • Added a openmc.lib.Material.depletable attribute. (#2843)
  • Added a 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 openmc.read_source_file function that enables reading a source file from the Python API. (#2858)
  • Added a bounding_box property on the openmc.RectilinearMesh and openmc.UnstructuredMesh classes. (#2861)
  • Added a openmc_mesh_get_volumes C API function. (#2869)
  • The 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 openmc.Region.plot method that allows regions to be plotted directly. (#2895)
  • Implemented "contains" operator for the openmc.BoundingBox class. (#2906)
  • Generalized source rejection via a new constraints argument to all source classes. (#2916)
  • Added a new openmc.MeshBornFilter class that filters tally events based on which mesh element a particle was born in. (#2925)
  • The 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 openmc.Settings.max_events attribute that controls the maximum number of events a particle can undergo. (#2945)
  • Added support for openmc.UnstructuredMesh in the openmc.MeshSource class. (#2949)
  • Added a openmc.MeshBase.get_homogenized_materials method that computes homogenized materials over mesh elements. (#2971)
  • Add an options argument to 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