armi.reactor.converters.axialExpansionChanger.axialExpansionChanger module

Enable component-wise axial expansion for assemblies and/or a reactor.

armi.reactor.converters.axialExpansionChanger.axialExpansionChanger.getDefaultReferenceAssem(assems)[source]

Return a default reference assembly.

armi.reactor.converters.axialExpansionChanger.axialExpansionChanger.makeAssemsAbleToSnapToUniformMesh(assems, nonUniformAssemFlags, referenceAssembly=None)[source]

Make this set of assemblies aware of the reference mesh so they can stay uniform as they axially expand.

class armi.reactor.converters.axialExpansionChanger.axialExpansionChanger.AxialExpansionChanger(detailedAxialExpansion: bool = False)[source]

Bases: object

Axially expand or contract assemblies or an entire core.

Variables:
  • linked (AssemblyAxialLinkage) – establishes object containing axial linkage information

  • expansionData (ExpansionData) – establishes object to store and access relevant expansion data

Notes

  • Is designed to work with general, vertically oriented, pin-type assembly designs. It is not set up to account for any other assembly type.

  • Useful for fuel performance, thermal expansion, reactivity coefficients, etc.

Build an axial expansion converter.

Parameters:

detailedAxialExpansion (bool, optional) – A boolean to indicate whether or not detailedAxialExpansion is to be utilized.

linked: AssemblyAxialLinkage | None
expansionData: ExpansionData | None
classmethod expandColdDimsToHot(assems: list, isDetailedAxialExpansion: bool, referenceAssembly=None)[source]

Expand BOL assemblies, resolve disjoint axial mesh (if needed), and update block BOL heights.

Implementation: Perform expansion during core construction based on block heights at a specified temperature. I_ARMI_INP_COLD_HEIGHT
signature: expandColdDimsToHot

This method is designed to be used during core construction to axially thermally expand the assemblies to their “hot” temperatures (as determined by Thot values in blueprints). First, The Assembly is prepared for axial expansion via setAssembly. In applyColdHeightMassIncrease, the number densities on each Component is adjusted to reflect that Assembly inputs are at cold (i.e., Tinput) temperatures. To expand to the requested hot temperatures, thermal expansion factors are then computed in computeThermalExpansionFactors. Finally, the Assembly is axially thermally expanded in axiallyExpandAssembly.

If the setting detailedAxialExpansion is False, then each Assembly gets its Block mesh set to match that of the “reference” Assembly (see getDefaultReferenceAssem and setBlockMesh).

Once the Assemblies are axially expanded, the Block BOL heights are updated. To account for the change in Block volume from axial expansion, completeInitialLoading is called to update any volume-dependent Block information.

Parameters:
  • assems (list[Assembly]) – list of assemblies to be thermally expanded

  • isDetailedAxialExpansion (bool) – If False, assemblies will be forced to conform to the reference mesh after expansion

  • referenceAssembly (Assembly, optional) – Assembly whose mesh other meshes will conform to if isDetailedAxialExpansion is False. If not provided, will assume the finest mesh assembly which is typically fuel.

Notes

Calling this method will result in an increase in mass via applyColdHeightMassIncrease!

performPrescribedAxialExpansion(a: Assembly, components: list, percents: list, setFuel=True)[source]

Perform axial expansion/contraction of an assembly given prescribed expansion percentages.

Implementation: Perform expansion/contraction, given a list of components and expansion coefficients. I_ARMI_AXIAL_EXP_PRESC
signature: performPrescribedAxialExpansion

This method performs component-wise axial expansion for an Assembly given expansion coefficients and a corresponding list of Components. In setAssembly, the Assembly is prepared for axial expansion by determining Component-wise axial linkage and checking to see if a dummy Block is in place (necessary for ensuring conservation properties). The provided expansion factors are then assigned to their corresponding Components in setExpansionFactors. Finally, the axial expansion is performed in axiallyExpandAssembly

Parameters:
  • a (Assembly) – ARMI assembly to be changed

  • components (list[Component]) – list of Components to be expanded

  • percents (list[float]) – list of expansion percentages for each component listed in components

  • setFuel (boolean, optional) – Boolean to determine whether or not fuel blocks should have their target components set This is useful when target components within a fuel block need to be determined on-the-fly.

Notes

  • percents may be positive (expansion) or negative (contraction)

performThermalAxialExpansion(a: Assembly, tempGrid: list, tempField: list, setFuel: bool = True, expandFromTinputToThot: bool = False)[source]

Perform thermal expansion/contraction for an assembly given an axial temperature grid and field.

Implementation: Perform thermal expansion/contraction, given an axial temperature distribution over an assembly. I_ARMI_AXIAL_EXP_THERM
signature: performThermalAxialExpansion

This method performs component-wise thermal expansion for an assembly given a discrete temperature distribution over the axial length of the Assembly. In setAssembly, the Assembly is prepared for axial expansion by determining Component-wise axial linkage and checking to see if a dummy Block is in place (necessary for ensuring conservation properties). The discrete temperature distribution is then leveraged to update Component temperatures and compute thermal expansion factors (via updateComponentTempsBy1DTempField and computeThermalExpansionFactors, respectively). Finally, the axial expansion is performed in axiallyExpandAssembly.

Parameters:
  • a (Assembly) – ARMI assembly to be changed

  • tempGrid (float, list) – Axial temperature grid (in cm) (i.e., physical locations where temp is stored)

  • tempField (float, list) – Temperature values (in C) along grid

  • setFuel (boolean, optional) – Boolean to determine whether or not fuel blocks should have their target components set This is useful when target components within a fuel block need to be determined on-the-fly.

  • expandFromTinputToThot (bool) – determines if thermal expansion factors should be calculated from c.inputTemperatureInC to c.temperatureInC (True) or some other reference temperature and c.temperatureInC (False)

reset()[source]
setAssembly(a: Assembly, setFuel=True, expandFromTinputToThot=False)[source]

Set the armi assembly to be changed and init expansion data class for assembly.

Parameters:

a (Assembly) – ARMI assembly to be changed

setFuelboolean, optional

Boolean to determine whether or not fuel blocks should have their target components set This is useful when target components within a fuel block need to be determined on-the-fly.

expandFromTinputToThot: bool

determines if thermal expansion factors should be calculated from c.inputTemperatureInC to c.temperatureInC (True) or some other reference temperature and c.temperatureInC (False)

Notes

When considering thermal expansion, if there is an axial temperature distribution on the assembly, the axial expansion methodology will NOT perfectly preserve mass. The magnitude of the gradient of the temperature distribution is the primary factor in determining the cumulative loss of mass conservation.

applyColdHeightMassIncrease()[source]

Increase component mass because they are declared at cold dims.

Notes

A cold 1 cm tall component will have more mass that a component with the same mass/length as a component with a hot height of 1 cm. This should be called when the setting inputHeightsConsideredHot is used. This adjusts the expansion factor applied during applyMaterialMassFracsToNumberDensities.

axiallyExpandAssembly()[source]

Utilizes assembly linkage to do axial expansion.

Implementation: Preserve the total height of an ARMI assembly, during expansion. I_ARMI_ASSEM_HEIGHT_PRES
signature: axiallyExpandAssembly

The total height of an Assembly is preserved by not changing the ztop position of the top-most Block in an Assembly. The zbottom of the top-most Block is adjusted to match the Block immediately below it. The height of the top-most Block is is then updated to reflect any expansion/contraction.

manageCoreMesh(r)[source]

Manage core mesh post assembly-level expansion.

Parameters:

r (Reactor) – ARMI reactor to have mesh modified

Notes

  • if no detailedAxialExpansion, then do “cheap” approach to uniformMesh converter.

  • update average core mesh values with call to r.core.updateAxialMesh()

  • oldMesh will be None during initial core construction at processLoading as it has not yet been set.