What’s New in 0.15.1

Summary

This release of OpenMC includes many bug fixes, performance improvements, and several notable new features. The random ray solver continues to receive many updates and improvements, which are listed below in more detail. A new SolidRayTracePlot class has been added that enables attractive 3D visualization using Phong shading. Several composite surfaces have been introduced (which help to further expand the capabilities of the openmc_mcnp_adapter). The openmc.Mesh.material_volumes() method has been completely reimplemented with a new approach based on ray tracing that greatly improves performance and can be executed in parallel. Tally results can be automatically applied to input Tally objects with openmc.Model.run(), bypassing boilerplate code for collecting tally results from statepoint files. Finally, a new openmc.deplete.d1s submodule has been added that enables Direct 1-Step (D1S) calculations of shutdown dose rate for fusion applications.

Compatibility Notes and Deprecations

The openmc.ProjectionPlot class has been renamed to openmc.WireframeRayTracePlot to be in better alignment with the newly introduced openmc.SolidRayTracePlot class.

NCrystal has been moved from a build-time dependency to a runtime dependency, which means there is no longer a OPENMC_USE_NCRYSTAL CMake option. Instead, OpenMC will look for an installed version of NCrystal using the ncrystal-config command.

New Features

  • Numerous improvements have been made in the random ray solver: - Calculation of Shannon entropy now works with random ray (#3030) - Support for linear sources (#3072) - Ability to slove for adjoint flux (#3191) - Support randomized Quasi-Monte Carlo sampling (#3268) - FW-CADIS weight window generation (#3273) - Source region mesh subdivision(#3333)

  • Several new composite surfaces have been added: - openmc.model.OrthogonalBox (#3118) - openmc.model.ConicalFrustum (#3151) - openmc.model.Vessel (#3168)

  • The openmc.Model.plot() method now supports plotting source sites (#2863)

  • The openmc.stats.delta_function() convenience function can be used for specifying distributions with a single point (#3090)

  • Added a openmc,Material.get_element_atom_densities() method (#3103)

  • Several third-party dependencies have been removed:
  • Added a new openmc.MuSurfaceFilter class that filters tally events by the cosine of angle of a surface crossing (#2768)

  • Introduced a openmc.ParticleList class for manipulating a list of source particles (#3148)

  • Support dose coefficients from ICRP 74 in openmc.data.dose_coefficients() (#3020)

  • Introduced a new openmc.Settings.uniform_source_sampling option (#3195)

  • Ability to differentiate materials in DAGMC universes (#3056)

  • Added methods to automatically apply results to existing Tally objects. (#2671)

  • Implemented a new openmc.SolidRayTracePlot class that can produce a 3D visualization based on Phong shading (#2655)

  • The openmc.UnstructuredMesh.write_data_to_vtk() method now supports writing a VTU file (#3290)

  • Composite surfaces now have a component_surfaces attribute that provides the underlying primitive surfaces (#3167)

  • A new openmc.deplete.d1s submodule has been added that enables Direct 1-Step (D1S) calculations of shutdown dose rate for fusion applications (#3235)

Bug Fixes and Small Changes

  • run microxs with mpi (#3028)

  • Rely on std::filesystem for file_utils (#3042)

  • Random Ray Normalization Improvements (#3051)

  • Alternative Random Ray Volume Estimators (#3060)

  • Random Ray Testing Simplification (#3061)

  • Fix hyperlinks in random_ray.rst (#3064)

  • Add missing show_overlaps option to plots.xml input file documentation (#3068)

  • Remove use of pkg_resources package (#3069)

  • Add option for survival biasing source normalization (#3070)

  • Enforce sequence type when setting Setting.track (#3071)

  • Moving most of setup.py to pyproject.toml (#3074)

  • Enforce non-negative percents for material.add_nuclide to prevent unintended ao/wo flipping (#3075)

  • Include batch statistics discussion in methodology introduction (#3076)

  • Add -DCMAKE_BUILD_TYPE=Release flag for MOAB in Dockerfile (#3077)

  • Adjust decay data reader to better handle non-normalized branching ratios (#3080)

  • Correct openmc.Geometry initializer to accept iterables of openmc.Cell (#3081)

  • Replace all deprecated Python typing imports and syntax with updated forms (#3085)

  • Fix ParticleFilter to work with set inputs (#3092)

  • packages used for testing moved to tests section of pyprojects.toml (#3094)

  • removed unused which function in CI scripts (#3095)

  • Improve description of probabilities for openmc.stats.Tabular class (#3099)

  • Ensure RegularMesh repr shows value for width of the mesh (#3100)

  • Replacing endf c functions with package (#3101)

  • Fix random ray solver to correctly simulate fixed source problems with fissionable materials (#3106)

  • Improve error for nuclide temperature not found (#3110)

  • Added error if cross sections path is a folder (#3115)

  • Implement bounding_box operation for meshes (#3119)

  • allowing varible offsets for polygon.offset (#3120)

  • Write surface source files per batch (#3124)

  • Mat ids reset (#3125)

  • Tweaking title of feature issue template (#3127)

  • Fix a typo in feature request template (#3128)

  • Update quickinstall instructions for macOS (#3130)

  • adapt the openmc-update-inputs script for surfaces (#3131)

  • Theory documentation on PCG random number generator (#3134)

  • Adding tmate action to CI for debugging (#3138)

  • Add Versioning Support from version.txt (#3140)

  • Correct failure due to progress bar values (#3143)

  • Avoid writing subnormal nuclide densities to XML (#3144)

  • Immediately resolve complement operators for regions (#3145)

  • Improve Detection of libMesh Installation via LIBMESH_ROOT and CMake’s PkgConfig (#3149)

  • Fix for UWUW Macro Conflict (#3150)

  • Consistency in treatment of paths for files specified within the Model class (#3153)

  • Improve clipping of Mixture distributions (#3154)

  • Fix check for trigger score name (#3155)

  • Prepare point query data structures on meshes when applying Weight Windows (#3157)

  • Add PointCloud spatial distribution (#3161)

  • Update fmt submodule to version 11.0.2 (#3162)

  • Move to support python 3.13 (#3165)

  • avoid zero division if source rate of previous result is zero (#3169)

  • Fix path handling for thermal ACE generation (#3171)

  • Update fmt Formatters for Compatibility with Versions below 11 (#3172)

  • added subfolders to txt search command in pyproject (#3174)

  • added list to doc string arg for plot_xs (#3178)

  • enable polymorphism for mix_materials (#3180)

  • Fix plot_xs type hint (#3184)

  • Enable adaptive mesh support on libMesh tallies (#3185)

  • Reset values of lattice offset tables when allocated (#3188)

  • Update surface_composite.py (#3189)

  • add export_model_xml arguments to Model.plot_geometry and Model.calculate_volumes (#3190)

  • Fixes in MicroXS.from_multigroup_flux (#3192)

  • Fix documentation typo in boundary_type (#3196)

  • Fix docstring for Model.plot (#3198)

  • Apply weight windows at collisions in multigroup transport mode. (#3199)

  • External sources alias sampler (#3201)

  • Add test for flux bias with weight windows in multigroup mode (#3202)

  • Fix bin index to DoF ID mapping bug in adaptive libMesh meshes (#3206)

  • Ensure libMesh::ReplicatedMesh is used for LibMesh tallies (#3208)

  • Set Model attributes only if needed (#3209)

  • adding unstrucutred mesh file suffix to docstring (#3211)

  • Write and read mesh name attribute (#3221)

  • Adjust for secondary particle energy directly in heating scores (#3227)

  • Correct normalization of thermal elastic in non standard ENDF-6 files (#3234)

  • Adding ‘#define _USE_MATH_DEFINES’ to make M_PI declared in Intel and MSVC compilers (#3238)

  • updated link to log mapping technique (#3241)

  • Fix for erroneously non-zero tally results of photon threshold reactions (#3242)

  • Fix type comparison (#3244)

  • Enable the LegendreFilter filter to be used in photon tallies for orders greater than P0. (#3245)

  • Enable UWUW library when building with DAGMC in CI (#3246)

  • Remove top-level import of openmc.lib (#3250)

  • updated docker file to latest DAGMC (#3251)

  • Write mesh type as a dataset always (#3253)

  • Update to a consistent definition of the r2 parameter for cones (#3254)

  • Add Patrick Shriwise to technical committee (#3255)

  • Change Zernike documentation in polynomial.py (#3258)

  • Bug fix for Polygon ‘yz’ basis (#3259)

  • Add constant for invalid surface tokens. (#3260)

  • Update plots.py for PathLike to string handling error (#3261)

  • Fix bug in WeightWindowGenerator for empty energy bounds (#3263)

  • Update recognized thermal scattering materials for ENDF/B-VIII.1 (#3267)

  • simplify mechanism to detect if geometry entity is DAG (#3269)

  • Fix bug in Surface.normalize (#3270)

  • Tweak To Sphinx Install Documentation (#3271)

  • add continue feature for depletion (#3272)

  • Updates for building with NCrystal support (and fix CI) (#3274)

  • Added missing documentation (#3275)

  • fix the bug in function differentiate_mats() (#3277)

  • Fix the bug in the Material.from_xml_element function (#3278)

  • Doc typo fix for rand ray mgxs (#3280)

  • Consolidate plotting capabilities in Model.plot (#3282)

  • adding non elastic MT number (#3285)

  • Fix Tabular.from_xml_element for histogram case (#3287)

  • Random Ray Source Region Refactor (#3288)

  • added terminal output showing compile options selected (#3291)

  • Random ray consistency changes (#3298)

  • Random Ray Explicit Void Treatment (#3299)

  • removed old command line scripts (#3300)

  • Avoid end of life ubuntu 20.04 in ReadTheDocs runner (#3301)

  • Avoid error in CI from newlines in commit message (#3302)

  • Handle reflex angles in CylinderSector (#3303)

  • Relax requirement on polar/azimuthal axis for wwinp conversion (#3307)

  • Add nuclides_to_ignore argument on Model export methods (#3309)

  • Enable overlap plotting from Python API (#3310)

  • Fix access order issues after applying tally results from Model.run (#3313)

  • Random Ray Void Accuracy Fix (#3316)

  • Fixes for problems encountered with version determination (#3320)

  • Clarify effect of CMAKE_BUILD_TYPE in docs (#3321)

  • Random Ray Linear Source Stability Improvement (#3322)

  • Mark a canonical URL for docs (#3324)

  • Random Ray Adjoint Source Logic Improvement (#3325)

  • Reflect multigroup MicroXS in IndependentOperator docstrings (#3327)

  • NCrystal becomes runtime rather than buildtime dependency (#3328)

  • Adding per kg as unit option on material functions (#3329)

  • Fix reading of horizontal field of view for ray-traced plots (#3330)

  • Manually fix broken links (#3331)

  • Update pugixml to v1.15 (#3332)

  • Determine nuclides correctly for DAGMC models in d1s.get_radionuclides (#3335)

  • openmc.Material.mix_materials() allows for keyword arguments (#3336)

  • Fix bug in Mesh::material_volumes for void materials (#3337)

  • added stable and unstable nuclides to the Chain object (#3338)