Releases: terrapower/armi
Release of ARMI 0.6.2
Release Date: 2025-12-17
This was a minor release. There was a refactoring cleanup done to NulcideBases. And there were some very minor API-breaking changes to the HistoryTrackerInterface and Interface.function was renamed to Interface.purpose. The coolest new feature is the improvements made to loadTestReactor, which can now cache a variety of test reactors to improve your test performance.
Code Changes, Features
- PR#2335 Moving to use Reactor.nuclideBases, where possible
- PR#2374 Changing MPI_COMM to the Pickle Protocol 5
Code Changes, Bugs and Fixes
- PR#2364 Fixing HoledHexagon.holeRadFromCenter type
Code Changes, Maintenance, or Trivial
- PR#2177 Changing Interface.function to Interface.purpose
- PR#2334 Refactoring loadTestReactor to pickle multiple test reactors
- PR#2358 Adding code coverage
- PR#2359 Cleaning up DB version logic
- PR#2360 Cleaning out broken tryPickleOnAllContents3
- PR#2366 Raising instead of returning errors
- PR#2369 Moving three test reactors to the testing module
- PR#2371 Moving more ARMI testing tools to the testing module
- PR#2375 Cleaning unused parts of HistoryTrackerInterface
- PR#2387 Removing Five Unused Settings
- PR#2389 Improving HexBlock.hasPinPitch
Documentation-Only Changes
- PR#2351 Updating PR form to use the word Rationale
- PR#2363 Starting 0.6.2 release cycle
- PR#2365 Improving and correcting the ARMI version semantics
- PR#2367 Formatting code in docstrings
- PR#2372 Documenting database cycle and node values
- PR#2373 Fixing docs deploying across GitHub repos
- PR#2383 Clarifying parameter doc headers
- PR#2388 Updating SCR to use the term Rationale
Release of ARMI 0.6.1
Release Date: 2025-11-05
This was a minor release. While a lot of technical debt was address, no major feature work was done. There were some minor bugs fixed, but again nothing worth a release. This is being tagged as a release because the API is stable and this commit was tested heavily downstream and is trustworthy.
Code Changes, Features
- PR#2303 Encapsulating global nuclide data in classes
- PR#2317 Simplify thermal scattering
- PR#2320 Providing interface method
interactRestartfor managing restarts - PR#2321 Adding
Core.hasLibto check if there is a XS library - PR#2323 Enabling user-specified distribution of MPI actions across nodes
- PR#2324 Adding
orientationBOLto full core modifier - PR#2325 Creating a new setting to specify memory requirement for cross section calculation
- PR#2344 Changing default for
guideTubeTopElevationto zero
Code Changes, Bugs and Fixes
- PR#2328 Ensuring that users define isotopics for custom materials
- PR#2331 Resolve
TEST_ROOTpath - PR#2336 Checking number of jobs against available ranks in
runBatchedActions - PR#2347 Fixing missing f-string in component blueprints
- PR#2350 Fixing
compareLinesfor a multiple numbers edge case
Code Changes, Maintenance, or Trivial
- PR#2306 Removing volume from
getMgFlux() - PR#2309 Moving plotting functions into
utilsmodule - PR#2310 Removing unnecessary code from
Assembly.getBlocksBetweenElevations - PR#2315 Moving some testing utils to testing module
- PR#2327 Adding a unit test to
HexGrid.generateSortedHexLocationList - PR#2348 Make
singleMixedAssemblymore flexible for downstream testing
Documentation-Only Changes
- PR#2250 Logging redundant material modifications
- PR#2280 Improving the new shuffling docs
- PR#2311 Starting the ARMI 0.6.1 release cycle
- PR#2312 Updating XS group manager requirements
- PR#2314 Documenting ARMI’s testing tools for devs
- PR#2332 Adding settings header to the settings YAML
- PR#2337 Fixing docs build
- PR#2339 Adding contributor to SCR doc automation script
- PR#2342 Documenting how to use the
zonesFileSetting - PR#2343 Improving documentation for
zoneDefinionsSetting - PR#2354 Clarifying that ARMI materials are of testing quality
Release of ARMI 0.6.0
Release Date: 2025-09-25
This was a big release. A lot of technical debt has been cleaned up (XML geom files are finally gone), but there was a lot a lot of feature work: multi-pin blocks, axial expansion improvements, more powerful shuffle logic, and the ability to more freely load an ARMI database.
Code Changes, Features
- PR#1995 Improving HexBlock.getFlowArea
- PR#2031 Providing better composite iteration methods
- PR#2045 Adding a check on the grid/component consistency in the BPs
- PR#2092 Allowing ARMI to use tmp dir on Mac/Linux
- PR#2105 Removing support for XML geom files
- PR#2106 Add Core.iterBlocks and Assembly.iterBlocks
- PR#2107 Handing empty string defaults better in copyInterfaceInputs
- PR#2109 Store number densities in numpy arrays instead of dictionary
- PR#2114 Allowing component area to be queried at arbitrary temp
- PR#2118 Adding a FilletedHexagon shape
- PR#2121 Supporting growing DBto full core on db load
- PR#2135 Retooling single-warnings report as all warnings report
- PR#2138 Allowing the BOL orientations to be set in the blueprints
- PR#2162 Make axial linking aware of block grids for axial expansion
- PR#2173 Improving Core.libs to look for the current cycle and node
- PR#2175 Blocking duplicate flags from being added
- PR#2198 Updating Axial Expansion Changer for improved mass redistribution
- PR#2199 Add 3 nuclides to getDefaultNuclideFlags
- PR#2202 Provide Component.pinIndices for helping understand where pins are
- PR#2208 Making ParamMapper symmetry-aware
- PR#2209 Block collection nuclides
- PR#2218 Adding a method to get cycle/node combinations for a time interval
- PR#2219 Refactoring Shuffle Logic Inputs to YAML
- PR#2221 Update logic for number density arrays and other cleanup
- PR#2223 Move the zonesFile setting to the framework and add building of zones to the interface stack
- PR#2225 Advancing r.p.time in the Operator
- PR#2227 Symmetry testing
- PR#2233 Remove axialPowerProfile* parameters
- PR#2235 Adding two geometry parameters
- PR#2243 Updating wetted perimeter calculation
- PR#2251 Comparing special formatting parameters in DBs
- PR#2255 Add b10NumFrac attribute to B4C class to allow for flexible setDefaultMassFracs
- PR#2266 Allow assembly parameters to be symmetry aware during core transformations and move operations
- PR#2269 Track assemblies if discharged to SFP
- PR#2272 Adding new Component param enrichmentBOL
- PR#2275 Cleaning internal state out of some materials
- PR#2277 Enhance fuel handler logic to support module imports
- PR#2278 Adding support for moving assemblies from SFP to Core in YAML shuffle input
- PR#2292 Support mixed Blocks for smear density calculation
- PR#2305 Raising error if no driverBlock is found by latticePhysicsWriter
Code Changes, Bugs and Fixes
- PR#1654 Use clearer input syntax for hexagonal lattice pitch
- PR#1998 Fixing a couple of plots to use initial block height
- PR#2098 Removing the HTML reports feature
- PR#2102 Fixing issue in copyInterfaceInputs with one file
- PR#2111 fix side effects from tests
- PR#2115 Adding Reactor construction hook to Database.load()
- PR#2120 Cylindrical Cross Section model updates
- PR#2129 OperatorMPI doesn’t need to bcast quits if there no other workers
- PR#2153 Hiding duplicate warning messages
- PR#2160 Fixing bad Return in safeCopy
- PR#2163 Using gamma groups instead of neutron groups in gamiso.addDummyNuclidesToLibrary
- PR#2176 Using np.int32 when reading GEODST files
- PR#2180 Remove assert statements from FilletedHexagon instantiation
- PR#2186 Ensuring full core BPs aren’t converted like 1/3 core
- PR#2187 Fixing bug in Uranium.pseudoDensity
- PR#2189 Fixing bug in finding ISOTXS libraries to merge
- PR#2191 Fixing issue with full core BP geometry conversion
- PR#2195 Fixing round trip of hex lattice maps
- PR#2226 Fix equality of MultiIndexLocator and CoordinateLocation
- PR#2228 Fixing bug in Air.pseudoDensity when given Celsius T
- PR#2229 Change initialization of modArea for database load
- PR#2231 Fixing issue initial time node in previous PR
- PR#2236 Handle pinIndices for blocks that don’t have fuel
- PR#2245 Fixing invalid any() signature
- PR#2248 Fixing issue loading from snapshots database
- PR#2253 Making a unit test thread safe
- PR#2259 Re-assigning pin indices when sorting a Block
- PR#2260 Fixing compareLines so that it doesn’t trip on zeros
- PR#2268 Fixing Uranium enrichment calculations
- PR#2276 Fixing Composite.extend to correctly set the parent
- PR#2282 Fixing incorrect variable name in Pitch class
- PR#2291 Conserve molesHmBOL / massHmBOL when performing axial expansion
- PR#2294 Ensuring settings file can be found when writing one DB from another
- PR#2298 Preserve loading of CoordinateLocation in db load
- PR#2302 Handle pin indices for fuel + non fuel on the same grid
- PR#2307 Clearing out Component.p.pinIndices prior to assignment
Code Changes, Maintenance, or Trivial
- PR#1386 Improve “smallRun” settings names
- PR#2085 Dropping black formatter for ruff
- PR#2093 Speed up axial expansion unit tests
- PR#2096 Fixing spelling errors
- PR#2103 Fixing spelling in docs and docstrings
- PR#2104 Removing defunct references to Cinder
- PR#2110 Combining three .gitignore files into one
- PR#2116 Cleaning up the codeTiming reports
- PR#2117 Reducing the warnings from Block.autoCreateSpatialGrids
- PR#2123 Removing permanently skipped tests
- PR#2126 Removing old TODO comments from the codebase
- PR#2127 Removing 3 unused Settings
- PR#2128 Created a fast flux ene...
Release of ARMI 0.5.1
Release Date: 2025-03-14
This release was all about QA documentation. We open-sourced our QA documentation, even our software requirements. There were also several bug fixes.
New Features
- Move instead of copy files from
TemporaryDirectoryChanger. PR#2022 - Creating the
armi.testingmodule, to share ARMI testing tools. PR#2028 - Using inner diameter for sorting components when outer diameter is identical. PR#1882
- Invoking
component.material.density()does not log an expensive stack tracefor fluids. PR#2075 - ARMI will now try to use the
/tmp/directory for its temp files, on Linux and MacOS. PR#2092
API Changes
- Removing
Database3from the API, useDatabase. PR#2052
Bug Fixes
- Fixing check for jagged arrays during
_writeParams. PR#2051 - Fixing BP-section ignoring tool in
PassiveDBLoadPlugin. PR#2055 - Making sure SFPs have spatial grids. PR#2082
- Fixing number densities when custom isotopics are combined with Fluid components. PR#2071
- Fixing scaling of volume-integrated parameters on edge assemblies. PR#2060
- Fixing strictness of
HexGridrough equality check. PR#2058 - Fixing treatment of symmetry factors when calculating component flux and reaction rates. PR#2068
Quality Work
Release of ARMI 0.5.0
Release Date: 2024-12-14
New Features
- Supporting Python 3.12. PR#1813
- Supporting Python 3.13. PR#1996
- Adding data models for ex-core structures in ARMI. PR#1891
- Opening some DBs without the
Appthat created them. PR#1917 - Adding support for ENDF/B-VII.1-based MC2-3 libraries. PR#1982
- Adding setting
mcnpLibraryVersionto chosen ENDF library for MCNP. PR#1989 - Removing the
tabulatedependency by ingesting it toarmi.utils.tabulate. PR#1811 HexBlock.rotateupdates the spatial locator for children of that block. PR#1943- Provide
Block.getInputHeightfor determining the height of a block from blueprints. PR#1927 - Provide
Parameter.hasCategoryfor quickly checking if a parameter is defined with a given category. PR#1899 - Provide
ParameterCollection.wherefor efficient iteration over parameters who's definition matches a given condition. PR#1899 - Flags can now be defined with letters and numbers. PR#1966
- Provide utilities for determining location of a rotated object in a hexagonal lattice (
getIndexOfRotatedCell). PR#1846 - Allow merging a component with zero area into another component. PR#1858
- New plugin hook
getAxialExpansionChangerto customize axial expansion. PR#1870 - New plugin hook
beforeReactorConstructionto process settings before reactor init. PR#1945 - Improving performance in the lattice physics interface by not updating cross sections at
everyNodeduring coupled calculations. PR#1963 - Allow merging a component with zero area into another component. PR#1858
- Updating
copyOrWarnandgetFileSHA1Hashto support directories. PR#1984 - Improve efficiency of reaction rate calculations. PR#1887
- Adding new options for simplifying 1D cross section modeling. PR#1949
- Adding
--skip-inspectionflag toCompareCasesCLI. PR#1842 - Exposing skip inspection options for
armi.initanddb.loadOperator. PR#2005 - Exposing
detailedNDensto components. PR#1954 - Adding a method
getPinMgFluxesto get pin-wise multigroup fluxes from a Block. PR#1990
API Changes
nuclideBases.byMcc3IDandgetMcc3Id()return IDs consistent with ENDF/B-VII.1. PR#1982- Moving
settingsValidationfromoperatorstosettings. PR#1895 - Allowing for unknown Flags when opening a DB. PR#1844
- Renaming
Reactor.moveListtoReactor.moves. PR#1881 - Transposing
pinMgFluxesparameters so that leading dimension is pin index. PR#1937 Block.getPinCoordinatesreturns an(N, 3)array, rather than a list of arrays. PR#1943- Alphabetizing
Flags.toString()results. PR#1912 copyInterfaceInputsno longer requires a valid setting object. PR#1934- Changing
synDbAfterWritedefault toTrue. PR#1968 - Removing
Assembly.rotatePinsandBlock.rotatePins. PreferAssembly.rotateandBlock.rotate. PR#1846 - Removing broken plot
buVsTime. PR#1994 - Removing class
AssemblyListandassemblyLists.py. PR#1891 - Removing class
globalFluxInterface.DoseResultsMapper. PR#1952 - Removing class
SmartList. PR#1992 - Removing flags
COREandREACTOR. PR#1835 - Removing method
Assembly.doubleResolution(). PR#1951 - Removing method
buildEqRingSchedule. PR#1928 - Removing method
prepSearch. PR#1845 - Removing method
SkippingXsGen_BuChangedLessThanTolerance. PR#1845 - Removing setting
autoGenerateBlockGrids. PR#1947 - Removing setting
mpiTasksPerNodeand renamingnumProcessorstonTasks. PR#1958 - History Tracker: "detail assemblies" are now fuel and control assemblies. PR#1990
- Removing
Block.breakFuelComponentsIntoIndividuals(). PR#1990 - Moving
getPuMolesfrom blocks.py up to composites.py. PR#1990 - Requiring
buReducingAssemblyRotationandgetOptimalAssemblyOrientationto have pin-level burnup. PR#2019
Bug Fixes
- Fixed spatial grids of pins in Blocks on flats-up grids. PR#1947
- Fixed
DerivedShape.getAreaforcold=True. PR#1831 - Fixed error parsing command line integers in
ReportsEntryPoint. PR#1824 - Fixed
PermissionErrorwhen usingsyncDbAfterWrite. PR#1857 - Fixed
MpiDirectoryChanger. PR#1853 - Changed data type of
thKernelsetting frombooltostrinThermalHydraulicsPlugin. PR#1855 - Update height of fluid components after axial expansion. PR#1828
- Rotate hexagonal assembly patches correctly on facemap plots. PR#1883
- Material theoretical density is serialized to and read from database. PR#1852
- Removed broken and unused column in
summarizeMaterialData. PR#1925 - Fixed hex block rotation in
plotBlockDiagram. PR#1926 - Fixed edge case in
assemblyBlueprint._checkParamConsistency(). PR#1928 - Fixed wetted perimeter for hex inner ducts. PR#1985
- Fixing number densities when custom isotopics and material properties are combined. PR#1822
Quality Work
Release version 0.4.0
ARMI v0.4.0
Release Date: 2024-08-14
What's new in ARMI
- Conserve mass by component in
assembly.setBlockMesh(). PR#1665 - Removal of the
Block.reactorproperty. PR#1425 - System information is now also logged on Linux. PR#1689
- Reset
Reactordata on worker processors after every interaction to free memory from state distribution.
[PR#1729](https://github.com/terrapower/armi/pull/1729>`_ and `PR#1750](#1750) - Density can be specified for components via
custom isotopicsin the blueprints. PR#1745 - Implement a new
JaggedArrayclass that handles HDF5 interface for jagged data. PR#1726
API Changes
- Replacing the concrete material with a better reference. PR#1717
- Adding more detailed time information to logging. PR#1796
- Renaming
structuredgrid.pyto camelCase. PR#1650 - Removing unused argument from
Block.coords(). PR#1651 - Removing unused method
HexGrid.allPositionsInThird(). PR#1655 - Removed unused methods:
Reactor.getAllNuclidesIn(),plotTriangleFlux(). PR#1656 - Removed
armi.utils.dochelpers; not relevant to nuclear modeling. PR#1662 - Removing old tools created to help people convert to the current database format:
armi.bookkeeping.db.convertDatabase()andConvertDB. PR#1658 - Removing the unused method
Case.buildCommand(). PR#1773 - Removed the variable
armi.physics.neutronics.isotopicDepletion.ORDER. PR#1671 - Removing extraneous
ArmiOjbectmethods. PR#1667- Moving
ArmiObject.getBoronMassEnrich()toBlock. - Moving
ArmiObject.getPuMoles()toBlock. - Moving
ArmiObject.getUraniumMassEnrich()toBlock. - Removing
ArmiObject.getMaxUraniumMassEnrich.(). - Removing
ArmiObject.getMaxVolume()&Block.getMaxVolume(). - Removing
ArmiObject.getPuFrac(). - Removing
ArmiObject.getPuMass(). - Removing
ArmiObject.getPuN(). - Removing
ArmiObject.getZrFrac(). - Removing
ArmiObject.printDensities(). - Moving
Composite.isOnWhichSymmetryLine()toAssembly. - Removing
Block.isOnWhichSymmetryLine().
- Moving
- Removing the
Block.reactorproperty. PR#1425 - Moving several
ArmiObjectmethods. PR#1425- Moving
ArmiObject.getNeutronEnergyDepositionConstantstoBlock. - Moving
ArmiObject.getGammaEnergyDepositionConstantstoBlock. - Moving
ArmiObject.getTotalEnergyGenerationConstantstoBlock. - Moving
ArmiObject.getFissionEnergyGenerationConstantstoBlock. - Moving
ArmiObject.getCaptureEnergyGenerationConstantstoBlock.
- Moving
- Removing the parameter
rdIterNum. PR#1704 - Removing the parameters
outsideFuelRingandoutsideFuelRingFluxFr. PR#1700 - Removing the setting
doOrificedTH. PR#1706 - Changing the Doppler constant params to
VOLUME_INTEGRATED. PR#1659 - Change
Operator._expandCycleAndTimeNodeArgsto be a non-static method. PR#1766 - Database now writes state at the last time node of a cycle rather than during the
DatabaseInterface.interactEOCinteraction. PR#1090
Bug fixes
- Fixed four bugs with "corners up" hex grids. PR#1649
- Fixed
safeCopyto work on both Windows and Linux with strict permissions PR#1691 - When creating a new XS group, inherit settings from initial group. [PR#1653](https://github.com/terrapower/armi/pull/1653>`_, `PR#1751](#1751)
- Fixed a bug with
Core.getReactionRates. PR#1771 - Fixed a bug with interactive versus batch mode checking on windows versus linux. PR#1786
Quality Work
- Creating a single-block test reactor, to speed up unit tests. PR#1737
- Supporting MacOS in CI. PR#1713
- We now enforce a maximum line length of 120 characters, using
ruff. PR#1646 - Updating
ruffto version0.5.1. PR#1770 - Move
.coveragercfile information intopyproject.toml. PR#1692
Changes that Affect Requirements
Release version 0.3.0
ARMI v0.3.0
Release Date: 2024-02-02
What's new in ARMI
- The
_copyInputsHelper()gives relative path and not absolute after copy. PR#1416 - Attempt to set representative block number densities by component if possible. PR#1412
- Use
functoolsto preserve function attributes when wrapping withcodeTiming.timedPR#1466 - Remove a number of deprecated block, assembly, and core parameters related to a defunct internal plugin.
Bug fixes
StructuredGrid.getNeighboringCellIndices()was incorrectly implemented for the second neighbor. PR#1614
Quality Work
Release version 0.2.9
ARMI v0.2.9
Release Date: 2023-09-27
What's new in ARMI
- Moved the
Reactorassembly number from the global scope to aParameter. PR#1383 - Removed the global
CaseSettingsobject,getMasterCs(), andsetMasterCs(). PR#1399 - Moved the Spent Fuel Pool (
sfp) from theCoreto theReactor. PR#1336 - Made the
sfpa child of theReactorso it is stored in the database. PR#1349 - Broad cleanup of
Parameters: filled in all empty units and descriptions, removed unused params. PR#1345 - Updated some parameter definitions and defaults. PR#1355
- Removed redundant
Material.namevariable. PR#1335 - Added
powerDensityas a high-level alternative topowerto configure aReactor. PR#1395 - Added SHA1 hashes of XS control files to the welcome text. PR#1334
Build changes
- Moved from
setup.pytopyproject.toml. PR#1409 - Added Python 3.11 to ARMI's CI on GH actions. PR#1341
- Updated
blackto version 22.6. PR#1396
Bug fixes
Release version 0.2.8
ARMI v0.2.8
Release Date: 2023-06-21
What's new in ARMI
- Added
Composite.sort()to allow the user to recursively sort any part of theReactor. PR#1280 - Switching from
pylintto therufflinter. PR#1296 - Move cross section group manager Interface stack position to be just before lattice physics. PR#1288
- Add
interactCoupledmethod forSnapshotInterface. PR#1294 - Calculate weighted-average percent burnup of
BlockCollections. PR#1265 - Add method
sortAssemsByRingto sortReactorassemblies by spatial location (interior first) PR#1320
Bug fixes
- Changed
units.FLOAT_DIMENSION_DECIMALSfrom 10 to 8. PR#1183 - Improved
HexBlock.getWettedPerimeter()to include wire. PR#1299 - Fixed a bug in the ISOTXS file name used for snapshots. PR#1277
- Fix a bug in uniform mesh decusping when assemblies of same type have drastically different height. PR#1282
- Sort
ComponentsonrepresentativeBlockfor consistency check. PR#1275
Release version 0.2.7
ARMI v0.2.7
What's new in ARMI
- The method
Material.density3is now calleddensity, and the olddensityis now calledpseudoDensity. PR#1163 - Removed
metadatasetting section, and createdversions. PR#1274 - Remove unused
HCFcoretypesetting. PR#1179 - Use
minimumNuclideDensitysetting when generating macroscopic XS. PR#1248 - Introduce new
LatticePhysicsFrequencysetting to control lattice physics calculation. PR#1239 - Added new setting
assemFlagsToSkipAxialExpansionto enable users to list flags of assemblies to skip axial expansion. PR#1235 - Added documentation for the thermal expansion approach used in ARMI. PR#1204
- Use
TemporaryDirectoryChangerforexecuter.run()so dirs are cleaned up during run. PR#1219 - New option
copyOutputfor globalFluxInterface to not copy output back to working directory. PR#1218, PR#1227 Executerclass has adcTypeattribute to define the type ofDirectoryChangerit will use. PR#1228- Enabling one-way (upwards) axial expansion of control assemblies. PR#1226
- Implement control rod decusping option for uniform mesh converter. PR#1229
createRepresentativeBlocksFromExistingBlocksnow returns the mapping of original to new XS IDs. PR#1217- Added a capability to prioritize
MpiActionexecution and exclusivity. PR#1237 - Improve support for single component axial expansion and general cleanup of axial expansion unit tests. PR#1230
- New cross section group representative block type for 1D cylindrical models. PR#1238
- Store the axial expansion target component name as a block parameter. PR#1256
- When using non-uniform mesh, detailed fission/activation products have cross sections generated to avoid blocks without xs data. PR#1257
- Made sure all material classes could be resolved via name. PR#1270
- Read flux directly from output into Gamma uniform mesh instead of mapping it in from block params. PR#1213
- Forced GAMISO/PMATRX file path extensions to be lower case for linux support. PR#1216