OpenMC 0.14.0
This release of OpenMC includes many bug fixes, performance improvements, and several notable new features. Some of the highlights include projection plots, pulse height tallies for photons, weight window generation, and an ability to specify continuous removal or feed of nuclides/elements during depletion. Additionally, one of the longstanding annoyances of depletion calculations, namely the need to include initial "dilute" nuclides, has been eliminated. There are also a wide array of general improvements in the Python API.
Compatibility Notes and Deprecations
- The
openmc.deplete.MicroXS
class has been completely redesigned and improved. See further comments below under "New Features". (#2572, #2579, #2595, #2700) - The
rectangular_prism
function has been replaced by theopenmc.model.RectangularPrism
class and thehexagonal_prism
function has been replaced by theopenmc.model.HexagonalPrism
class. Note that whereas therectangular_prism
andhexagonal_prism
functions returned a region representing the interior of the prism, the newopenmc.model.RectangularPrism
and
openmc.model.HexagonalPrism
classes return composite surfaces, so you need to use the unary-
or+
operators to obtain a region that can be assigned to a cell. (#2739) - The
Source
class has been refactored and split up into three separate classes:openmc.IndependentSource
,openmc.FileSource
, andopenmc.CompiledSource
. (#2524) - The
vertices
andcentroids
attributes on mesh classes now always return Cartesian coordinates and the shape of the returned arrays has changed to allowijk
indexing using a tuple (i.e.,xyz = vertices[i, j, k]
). (#2711) - The
openmc.Material.decay_photon_energy
attribute has been replaced by theopenmc.Material.get_decay_photon_energy
method. (#2715)
New Features
- A new
openmc.ProjectionPlot
class enables the generation of orthographic or perspective projection plots. (#1926) - The
openmc.model.RightCircularCylinder
class now supports optional filleted edges. (#2309) - Continuous removal or feed of nuclides/elements between materials can now be modeled during depletion via the
openmc.deplete.abc.Integrator.add_transfer_rate
method. (#2358, #2564, #2626) - The MAGIC method for global weight window generation has been implemented as part of the C++ API. (#2359)
- A new capability for pulse height tallies (currently limited to photons) has been added and can be used via the "pulse-height" tally score. (#2452)
- A
openmc.model.CruciformPrism
class has been added that provides a generalized cruciform prism composite surface. (#2457) - Type hints have been added in various places throughout the Python API. (#2462 , #2467, #2468, #2470, #2471, #2601)
- Voxel plots can now be generated through the
openmc.Plot.to_vtk
method. (#2464) - The
openmc.mgxs.EnergyGroups
class now allows you to alternatively pass a string of the group structure name (e.g., "CCFE-709") instead of the energy group boundaries. (#2466) - Several enhancements have been made to the
openmc.Universe.plot
method (addition of axis labels with units, ability to show legend and/or outlines, automatic determination of origin/width, ability to pass total number of pixels). (#2472 , #2482, #2483, #2492, #2513, #2575) - Functionality in the Python API dealing with bounding boxes now relies on a new
openmc.BoundingBox
class. (#2475) - Users now have more flexibility in specifying nuclides and reactions in the
openmc.plot_xs
function. (#2478) - The import time of the
openmc
Python module has been improved by deferring the import of matplotlib. (#2488) - Mesh clases in the Python API now support a
bounding_box
property. (#2507, #2620, #2621) - The
Source
class has been refactored and split up into three separate classes:openmc.IndependentSource
,openmc.FileSource
, andopenmc.CompiledSource
. (#2524) - Support was added for curvilinear elements when exporting cylindrical and spherical meshes to VTK. (#2533)
- The
openmc.Tally
class now has aopenmc.Tally.multiply_density
attribute that indicates whether reaction rate tallies should include the number density of the nuclide of interest. (#2539) - The
openmc.wwinp_to_wws
function now supportswwinp
files with cylindrical or spherical meshes. (#2556) - Depletion no longer relies on adding initial "dilute" nuclides to each depletable material in order to compute reaction rates. (#2559, #2568)
- The
openmc.deplete.Results
class now hasopenmc.deplete.Results.get_mass
(#2565),openmc.deplete.Results.get_activity
(#2617), andopenmc.deplete.Results.get_decay_heat
(#2625) methods. - The
openmc.deplete.StepResult.save
method now supports apath
argument. (#2567) - The
openmc.deplete.MicroXS
has been completely redesigned and improved. First, it no longer relies on theopenmc.mgxs
module, no longer subclassespandas.DataFrame
, and doesn't require adding initial "dilute" nuclides into material compositions. It now enables users to specify an energy group structure to collect multigroup cross sections, specify nuclides/reactions, and works with mesh domains in addition to the existing domains. A newopenmc.deplete.get_microxs_and_flux
function was added that improves the workflow for calculating microscopic cross sections along with fluxes. Altogether, these changes make it straightforward to switch between coupled and independent operators for depletion/activation calculations. (#2572, #2579 , #2595, #2700) - The
openmc.Geometry
class now hasmerge_surfaces
andsurface_precision
arguments. (#2602) - Several predefined energy group structures have been added ("MPACT-51", "MPACT-60", "MPACT-69", "SCALE-252"). (#2614)
- When running a depletion calculation, you are now allowed to include nuclides in the initial material compositions that do not have neutron cross sections (decay-only nuclides). (#2616)
- The
openmc.CylindricalMesh
andopenmc.SphericalMesh
classes can now be fully formed using the constructor. (#2619) - A time cutoff can now be specified in the
openmc.Settings.cutoff
attribute. (#2631) - The
openmc.Material.add_element
method now supports across_sections
argument that allows a cross section data source to be specified. (#2633 ) - The
openmc.Cell
class now has aplot
method. (#2648) - The
openmc.Geometry
class now has aplot
method. (#2661) - When weight window checks are performed can now be explicitly specified with the
openmc.Settings.weight_window_checkpoints
attribute. (#2670) - The
openmc.Settings
class now has amax_write_lost_particles
attribute that can limit the number of lost particle files written. (#2688) - The
openmc.deplete.CoupledOperator
class now has adiff_volume_method
argument that specifies how the volume of new materials should be determined. (#2691) - The
openmc.DAGMCUniverse.bounding_region
method now has apadding_distance
argument. (#2701) - A new
openmc.Material.get_decay_photon_energy
method replaces thedecay_photon_energy
attribute and includes an ability to eliminate low-importance points. This is facilitated by a newopenmc.stats.Discrete.clip
method. (#2715) - The
openmc.model.Model.differentiate_depletable_mats
method allows depletable materials to be differentiated independent of the depletion calculation itself. (#2718) - Albedos can now be specified on surface boundary conditions. (#2724)
Bug Fixes
- Enable use of NCrystal materials in plot_xs (#2435)
- Avoid segfault from extern "C" std::string (#2455)
- Fix several issues with the Model class (#2465)
- Provide alternative batch estimation message (#2479)
- Correct index check for remove_tally (#2494)
- Support for NCrystal material in from_xml_element (#2496)
- Fix compilation with gcc 5 (#2498)
- Fixed in the Tally::add_filter method (#2501)
- Fix meaning of "masking" for plots (#2510)
- Fix description of statepoint.batches in Settings class (#2514)
- Reorder list initialization of Plot constructor (#2519)
- Added mkdir to cwd argument in Model.run (#2523)
- Fix export of spherical coordinates in SphericalMesh (#2538)
- Add virtual destructor on PlottableInterface (#2541)
- Ensure parent directory is created during depletion (#2543)
- Fix potential out-of-bounds access in TimeFilter (#2532)
- Remove use of sscanf for reading surface coefficients (#2574)
- Fix torus intersection bug (#2589)
- Multigroup per-thread cache fixes (#2591)
- Bank surface source particles in all active cycles (#2592)
- Fix for muir standard deviation (#2598)
- Check for zero fission cross section (#2600)
- XML read fixes in Plot classes (#2623)
- Added infinity check in VolumeCalculation (#2634)
- Fix sampling issue in Mixture distributions (#2658)
- Prevent segfault in distance to boundary calculation (#2659)
- Several CylindricalMesh fixes (#2676, #2680, #2684, #2710)
- Add type checks on Intersection, Union, Complement (#2685)
- Fixed typo in CF4Integrator docstring (#2704)
- Ensure property setters are used in CylindricalMesh and SphericalMesh (#2709)
- Fix sample_external_source bug (#2713)
- Fix localization issue affecting openmc-plotter (#2723)
- Correct openmc.lib wrapper for evaluate_legendre (#2729)
- Bug fix in Region.from_expression during tokenization (#2733)
- Fix bug in temperature interpolation (#2734)
- Check for invalid domain IDs in volume calculations (#2742)
- Skip boundary condition check for volume calculations (#2743)
- Fix loop over coordinates for source domain rejection (#2751)
Contributors
- @aprilnovak
- @bam241
- @bscollin
- @caderache2014
- @cfichtlscherer
- @christinacai123
- @church89
- @dubway420
- @ecasglez
- @ebknudsen
- @eepeterson
- @egor1abs
- @gonuke
- @gridley
- @HunterBelanger
- @j-fletcher
- @johvincau
- @joshmay1
- @jtramm
- @kevinm387
- @kingyue737
- @lewisgross1296
- @LukeLabrie
- @myerspat
- @nicriz
- @nutcasev15
- @paulromano
- @pshriwise
- @rlbarker
- @shimwell
- @stchaker
- @tjlaboss
- @XinyanBradley
- @yardasol
- @zoeprieto