armi.reactor.converters.axialExpansionChanger.assemblyAxialLinkage module
- armi.reactor.converters.axialExpansionChanger.assemblyAxialLinkage.areAxiallyLinked(componentA: Component, componentB: Component) bool [source]
Determine axial component linkage for two components.
- Parameters:
Notes
If componentA and componentB are both solids and the same type, geometric overlap can be checked via getCircleInnerDiameter and getBoundingCircleOuterDiameter. Four different cases are accounted for. If they do not meet these initial criteria, linkage is assumed to be False. Case #1: Unshaped Components. There is no way to determine overlap so they’re assumed to be not linked. Case #2: Blocks with specified grids. If componentA and componentB have identical grid indices (cannot be a partial case, ALL of the indices must be contained by one or the other), then overlap can be checked. Case #3: If Component position is not specified via a grid, the multiplicity is checked. If consistent, they are assumed to be in the same positions and their overlap is checked. Case #4: Components are either not both solids, are not the same type, or Cases 1-3 are not True.
- Returns:
linked – status is componentA and componentB are axially linked to one another
- Return type:
- class armi.reactor.converters.axialExpansionChanger.assemblyAxialLinkage.AxialLink(lower: list[Comp] | None = None)[source]
Bases:
Generic
[Comp
]Small class for named references to objects above and below a specific object.
Axial expansion in ARMI works by identifying what objects occupy the same axial space. For components in blocks, identify which below axially align. This is used to determine what, if any, mass needs to be re-assigned across blocks during expansion. For blocks, the linking determines what blocks need to move as a result of a specific block’s axial expansion.
- Variables:
lower (list[armi.reactor.converters.axialExpansionChanger.assemblyAxialLinkage.Comp] | None) – Object below, if any.
Notes
This class is “templated” by the type of composite that could be assigned and fetched. A block-to-block linkage could be type-hinted via
AxialLink[Block]
orAxialLink[Component]
for component-to-component link.See also
AxialAssemblyLinkage.linkedBlocks
AxialAssemblyLinkage.linkedComponents
- class armi.reactor.converters.axialExpansionChanger.assemblyAxialLinkage.AssemblyAxialLinkage(assem: Assembly)[source]
Bases:
object
Determines and stores the block- and component-wise axial linkage for an assembly.
- Parameters:
assem (armi.reactor.assemblies.Assembly) – Assembly to be linked
- Variables:
a (
Assembly
) – reference to original assembly; is directly modified/changed during expansion.linkedBlocks (dict) – Keys are blocks in the assembly. Their values are
AxialLink
withupper
andlower
attributes for the blocks potentially above and below this block.linkedComponents (dict) – Keys are solid components in the assembly. Their values are
AxialLink
withupper
andlower
attributes for the solid components potentially above and below this block.
- classmethod getLinkedBlocks(blocks: Sequence[Block]) dict[Block, AxialLink[Block]] [source]
Produce a mapping showing how blocks are linked.
- Parameters:
blocks (sequence of armi.reactor.blocks.Block) – Ordered sequence of blocks from bottom to top. Could just as easily be an
armi.reactor.assemblies.Assembly
.- Returns:
Dictionary where keys are individual blocks and their corresponding values point to blocks above and below.
- Return type: