Published June 22, 2024 | Version v0.15.0
Software Open

openmc-dev/openmc: OpenMC 0.15.0

  • 1. Argonne National Laboratory
  • 2. @Argonne-National-Laboratory
  • 3. MIT
  • 4. Tsinghua University
  • 5. Copenhagen Atomics
  • 6. MIT Plasma Science and Fusion Center (PSFC)
  • 7. @idaholab
  • 8. University of Wisconsin - Madison
  • 9. United Kingdom Atomic Energy Authority @ukaea
  • 10. University of Illinois
  • 11. Fraunhofer INT
  • 12. University of Michigan
  • 13. Radiant Industries, Inc.

Description

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

  • @aidancrilly
  • @aprilnovak
  • @arekfu
  • @bam241
  • @chrwagne
  • @church89
  • @cxtherineyu
  • @ebknudsen
  • @eepeterson
  • @gridley
  • @hsameer481
  • @HunterBelanger
  • @icmeyer
  • @jbae11
  • @JoffreyDorville
  • @jtramm
  • @kingyue737
  • @Kladdy
  • @kmeag
  • @lhchg
  • @LukeLabrie
  • @MicahGale
  • @nplinden
  • @pitkajuh
  • @rlbarker
  • @paulromano
  • @pshriwise
  • @Shimwell
  • @tjlaboss
  • @vanessalulla
  • @yardasol
  • @yrrepy

Files

openmc-dev/openmc-v0.15.0.zip

Files (8.4 MB)

Name Size Download all
md5:babf7e0eab64a2e94b170e6473880001
8.4 MB Preview Download

Additional details

Related works