Skip to content

OpenMC 0.16.0

Latest

Choose a tag to compare

@paulromano paulromano released this 05 Aug 22:07
· 3 commits to develop since this release
617d35a

This release of OpenMC introduces many new features, improvements, and bug fixes throughout the codebase. The primary Monte Carlo solver has been expanded with surface-flux tallies, reaction and secondary-particle production filters, source biasing, coupled neutron--photon pulse-height support, a shared secondary-particle bank, and generalized particle identifiers based on PDG numbering. The random ray solver gains local adjoint sources, temperature and distributed-density feedback, fission-heating tallies, and a weight-window bootstrapping workflow for multigroup cross sections. Depletion and shutdown-dose workflows now support reactivity control, CRAM substeps, multiple R2S meshes, and decay-spectrum source distributions. The Python API also adds dedicated slice and voxel plot classes, native tokamak sources, new mesh utilities, and photon attenuation and energy-absorption data.

Compatibility Notes and Deprecations

Python 3.11 is no longer supported; OpenMC now requires Python 3.12 or newer and adds support for Python 3.14. The documented minimum build environment is GCC 11.4 and CMake 3.22.

The Python ParticleType interface is now a regular class backed by Particle Data Group Monte Carlo numbers rather than an IntEnum. Particle types stored in OpenMC output files now use PDG numbers, and the corresponding C++ factories use function-call syntax such as ParticleType::neutron().

The Plot compatibility constructor is deprecated. Use SlicePlot for two-dimensional raster plots or VoxelPlot for voxel plots. The openmc.lib.id_map and openmc.lib.property_map functions are also deprecated in favor of openmc.lib.slice_data.

The MeshBase.num_mesh_cells property is deprecated in favor of MeshBase.n_elements. The nparticles and temperature_settings arguments to Model.convert_to_multigroup are deprecated; pass settings such as particles and temperature as keyword arguments instead.

Distributed material, temperature, and density instance lists are now written as XML subelements rather than attributes to support very large models. Existing attribute-based input remains readable.

Photon-induced electrons and positrons are now processed at their birth location. Their energy deposition is attributed to the parent photon in heating tallies.

New Features

  • Added reactivity control during coupled transport-depletion calculations (#2693)
  • Added rotation support to MeshFilter (#3176)
  • Added ICRP-74 ambient dose-equivalent coefficients (#3256)
  • Added additional interpolation schemes to openmc.stats.Tabular (#3413)
  • Added ParticleProductionFilter for filtering secondary-particle production by particle type and energy (#3453)
  • Added source-distribution biasing capabilities (#3460)
  • Allowed openmc.stats.CylindricalIndependent to use an arbitrary symmetry axis (#3474)
  • Added SlicePlot and VoxelPlot in place of the legacy Plot interface (#3528)
  • Added angular probability-density evaluation for angle-energy distributions (#3550)
  • Generalized rotational periodic boundary conditions to the x-, y-, and z-axes (#3591)
  • Added VTKHDF output support for unstructured meshes with hexahedral elements (#3623)
  • Allowed nuclides, elements, density, temperature, and volume to be specified in the Material constructor (#3649)
  • Added overlap IDs to Model.id_map (#3669)
  • Added a command-line option for controlling output verbosity (#3680)
  • Added JEFF-4.0 and JENDL-5 thermal-scattering material names (#3693)
  • Added block restriction for libMesh unstructured-mesh tallies (#3694)
  • Added Material.get_photon_contact_dose_rate (#3700)
  • Added lethargy-weighted conversion between multigroup flux structures (#3705)
  • Enabled fission-heating tallies in the random ray solver (#3714)
  • Added local adjoint sources for random ray calculations (#3717)
  • Added distributed cell-density support to the random ray solver (#3720)
  • Added optional material bounding boxes to MeshBase.material_volumes (#3731)
  • Added openmc.examples.random_ray_pin_cell (#3735)
  • Added temperature-feedback support to the random ray solver (#3737)
  • Implemented surface-flux tallies (#3742)
  • Added MeshBase.n_elements and common bounding-box properties to the mesh protocol (#3745)
  • Added C API bindings for random ray execution and configuration (#3749)
  • Generalized ParticleType using the PDG Monte Carlo numbering scheme (#3756)
  • Added a parameterized C++ constructor for spatial box distributions (#3760)
  • Added truncated normal distributions (#3761)
  • Enabled tracklength tallies of microscopic cross sections in void materials (#3771)
  • Allowed tally scores and filters to be supplied to the Tally constructor (#3777)
  • Added support for mixture distributions to openmc.stats.combine_distributions (#3784)
  • Added C API bindings for openmc.lib.SolidRayTracePlot (#3789)
  • Added upper and lower interpolation bounds to multigroup cross-section data (#3803)
  • Added a C API and openmc.lib.slice_data interface for raster slice plots (#3806)
  • Added settings for loading property files and controlling surface-grazing behavior (#3808)
  • Added ReactionFilter for filtering tally events by reaction type (#3809)
  • Added S2 directional sampling to the random ray solver (#3811)
  • Added RegularMesh.get_indices_at_coords (#3824)
  • Allowed MeshBase.from_domain to accept bounding boxes directly (#3828)
  • Added hybrid-domain tallies to openmc.deplete.get_microxs_and_flux (#3831)
  • Added a setting to disable atomic relaxation (#3855)
  • Added openmc.stats.fusion_neutron_spectrum (#3862)
  • Added a shared secondary-particle bank for load balancing histories across threads and MPI ranks (#3863)
  • Added support for multiple meshes in R2S calculations (#3860)
  • Added RectilinearMesh.get_indices_at_coords (#3876)
  • Expanded DAGMC cell material, density, and temperature overrides (#3888)
  • Added from_bounding_box constructors to structured mesh classes (#3903)
  • Added optional substeps to CRAM depletion solves (#3908)
  • Extended RegularMesh.volumes to one- and two-dimensional meshes (#3914)
  • Enabled the tracklength estimator for neutron-heating tallies (#3915)
  • Added SphericalMesh.get_indices_at_coords (#3919)
  • Added openmc.stats.DecaySpectrum and integrated it with R2S workflows (#3930)
  • Enabled pulse-height tallies in coupled neutron--photon calculations (#3937)
  • Added a description attribute to Model (#3956)
  • Allowed a depletion chain to provide half-life data to Material.get_activity (#3957)
  • Added random ray forward-flux storage during adjoint calculations (#3962)
  • Added a weight-window bootstrapping workflow for multigroup cross-section generation (#3965)
  • Added overlap detection to the interactive plotter (#3969)
  • Added TokamakSource for native parametric tokamak source sampling (#3999)
  • Enabled parent-nuclide tally breakdowns in R2S calculations (#4013)
  • Added control over NJOY's damage-energy threshold (#4022)
  • Apply virtual material densities to microscopic tally results (#4029)
  • Added a length multiplier to DAGMCUniverse (#4033)
  • Added elemental photon mass energy-absorption coefficients (#4039)
  • Allow user tallies during R2S neutron transport step (#4046)

Bug Fixes and Small Changes

  • Corrected type handling and generalized openmc.stats.combine_distributions (#3445)
  • Replaced the external vectfit dependency with an internal vector-fitting implementation (#3493)
  • Normalized random ray eigenvalue fluxes consistently with Monte Carlo tallies (#3595)
  • Migrated internal sparse data structures to SciPy sparse arrays (#3613)
  • Added Python 3.14 support and raised the minimum supported Python version to 3.12 (#3642)
  • Modernized and made relocatable the installed CMake package configuration (#3653)
  • Restored the DAGMC universe name when exporting XML (#3657)
  • Improved automatic multigroup cross-section generation for random ray models (#3658)
  • Corrected temperature assignment in openmc.model.borated_water (#3662)
  • Updated the documented minimum build environment to GCC 11.4 and CMake 3.22 (#3666)
  • Fixed DistribcellFilter when applying tally results to a model (#3667)
  • Corrected source-location scaling in plots with non-centimeter axis units (#3668)
  • Limited IFP settings parsing to eigenvalue and fixed-source run modes (#3673)
  • Corrected the HDF5 source-bank structure size (#3676)
  • Reported an error when IFP is used outside eigenvalue mode (#3681)
  • Corrected rotational periodic boundary conditions (#3692)
  • Corrected rectangular-lattice corner crossing behavior (#3703)
  • Ensured DAGMC model files are closed after loading (#3706)
  • Ensured multigroup cross-section HDF5 files are closed after loading (#3707)
  • Corrected subgroup names in multigroup cross-section HDF5 output (#3708)
  • Corrected temperature-list handling in multigroup cross-section libraries (#3712)
  • Accelerated reaction-rate lookup in openmc.deplete.FluxCollapseHelper (#3724)
  • Corrected operator precedence in nested CSG union and intersection expressions (#3730)
  • Preserved material names in depletion results (#3738)
  • Restored compatibility with pandas 3 (#3743)
  • Added warnings when undefined attributes are assigned to Settings (#3746)
  • Fixed plotting models that use multigroup cross sections (#3748)
  • Prevented unstable ground-state Ta180 from being added for natural tantalum (#3750)
  • Resolved conflicts between weight windows and global Russian roulette (#3751)
  • Added approximate neutron velocities when multigroup inverse-velocity data is unavailable (#3766)
  • Parallelized scattering-matrix transposition for adjoint random ray solves (#3768)
  • Removed a variable-length-array compiler extension (#3769)
  • Rejected nonpositive surface IDs (#3772)
  • Corrected length-multiplier use in libMesh methods (#3773)
  • Changed distributed-instance XML data to subelements to support very large instance lists (#3774)
  • Precomputed random ray source-update offsets for improved performance (#3775)
  • Improved radial crossing checks in cylindrical and spherical meshes (#3792)
  • Removed setuptools from runtime dependencies (#3794)
  • Simplified Model.convert_to_multigroup setup for DAGMC models (#3801)
  • Prevented None temperature values in automatically generated multigroup data (#3802)
  • Replaced the xtensor and xtl dependencies with internal tensor and view classes (#3805)
  • Enforced positive mesh radii in the Python API (#3813)
  • Extended ray-traced plot data for use by estimators (#3816)
  • Corrected MeshFilter.get_pandas_dataframe for non-regular meshes (#3817)
  • Corrected pulse-height scoring when no cell filter is present (#3821)
  • Parallelized external-source sampling and made rejection counters thread-safe (#3830)
  • Improved depletion performance for models with transfer rates (#3839)
  • Corrected surface-normal determination in solid ray-traced plots (#3846)
  • Corrected parsing of cell data in the Python API (#3848)
  • Avoided numerical cancellation in rectangular-lattice distance calculations at large pitch (#3853)
  • Closed redirected standard-output file descriptors after use (#3864)
  • Allowed openmc.deplete.StepResult.get_material to accept integer IDs (#3872)
  • Allowed sequences of group boundaries in Model.convert_to_multigroup (#3873)
  • Clipped small negative atom densities produced by CRAM (#3879)
  • Corrected surface-source particle counts under MPI (#3901)
  • Removed self-loops from spontaneous-fission decay modes (#3907)
  • Fixed an MPI hang during depletion calculations (#3910)
  • Added per-cubic-meter units to material activity and decay-heat methods (#3912)
  • Allowed openmc.data.endf.Material objects in nuclear-data from_endf methods (#3932)
  • Reevaluated geometry after close collisions that follow a surface crossing (#3933)
  • Corrected virtual-surface crossing behavior (#3934)
  • Added missing volume checks to material activity and decay-heat calculations (#3939)
  • Reported a missing value for the --threads command-line option (#3940)
  • Guarded average-molar-mass calculations and validated depletion inputs (#3941)
  • Corrected an undefined scattering variable in multigroup library generation (#3943)
  • Corrected collision-track output for photon transport (#3946)
  • Corrected directional index lookup for regular meshes (#3948)
  • Avoided inconsistent sparse data on summed D1S tallies (#3949)
  • Preserved collision counts when particles are split (#3958)
  • Enabled external source rates with transfer rates that specify destination materials (#3959)
  • Prevented 32-bit overflow in tally indexing and weight-window generation (#3960)
  • Updated libMesh node access to non-deprecated methods (#3963)
  • Corrected several independent-operator depletion issues (#3977)
  • Restored compatibility with NumPy 2.5 (#3981)
  • Preserved material names and distinguished same-named materials during multigroup conversion (#3984)
  • Loaded photon cross sections when a file source contains photons (#3988)
  • Disabled weight-window processing for nonpositive lower bounds (#3990)
  • Made openmc.deplete.R2SManager output handling consistent (#3994)
  • Fixed compilation with GCC 16 and newer fmt versions (#4000)
  • Corrected plotting of distributed cell densities by instance (#4006)
  • Enabled weight windows automatically when a weight-window file is specified (#4007)
  • Normalized particle direction after periodic crossings (#4015)
  • Reset cached filter matches correctly during pulse-height scoring (#4019)
  • Avoided accessing atomic-relaxation maps when no relaxation data is present (#4020)
  • Added partial-current labels for MeshSurfaceFilter (#4021)
  • Corrected M_PI availability on affected compilers (#4023)
  • Determined surface-source starting half-spaces from particle direction (#4024)
  • Optimized depletion-chain loading and material activity calculations (#4025)
  • Corrected sparse storage of multidimensional tally results (#4030)
  • Resolved relative input paths against the XML file that contains them (#4031)
  • Corrected Compton-shell selection and Doppler broadening (#4036)
  • Fixed MPI tally reductions with counts larger than INT_MAX (#4037)
  • Limited unstructured-mesh Exodus output to one MPI rank (#4038)
  • Processed photon-induced electrons and positrons at their birth location and attributed their heating to the parent photon (#4040)
  • Fix use of invalidated iterators in Region constructor (#4047)
  • Use && instead of the alternative token 'and' in mesh.h (#4048)
  • Don't name class members in OpenMP reduction clauses (#4049)
  • Give run_mode and rel_max_lost_particles C linkage (#4050)
  • Resolve input file paths with std::filesystem (#4051)
  • Add missing include in event.h (#4052)