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:
  • componentA (Component) – component of interest

  • componentB (Component) – component to compare and see if is linked to componentA

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:

bool

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] or AxialLink[Component] for component-to-component link.

See also

  • AxialAssemblyLinkage.linkedBlocks

  • AxialAssemblyLinkage.linkedComponents

lower: list[Comp] | None = None
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 with upper and lower attributes for the blocks potentially above and below this block.

  • linkedComponents (dict) – Keys are solid components in the assembly. Their values are AxialLink with upper and lower attributes for the solid components potentially above and below this block.

linkedBlocks: dict[Block, AxialLink[Block]]
linkedComponents: dict[Component, AxialLink[Component]]
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:

dict[Block, AxialLink[Block]]

static areAxiallyLinked(componentA: Component, componentB: Component) bool[source]

Check if two components are axially linked.

Parameters:
  • componentA (Component) – component of interest

  • componentB (Component) – component to compare and see if is linked to componentA

Returns:

Status of linkage check

Return type:

bool

See also

areAxiallyLinked(), including, This