armi.physics.fuelCycle.hexAssemblyFuelMgmtUtils module

This is a selection of fuel management utilities that seem generally useful enough to keep in ARMI, but they still only apply to hex assembly reactors.

Notes

We are keeping these in ARMI even if they appear unused internally.

armi.physics.fuelCycle.hexAssemblyFuelMgmtUtils.getOptimalAssemblyOrientation(a, aPrev)[source]

Get optimal assembly orientation/rotation to minimize peak burnup.

Notes

Works by placing the highest-BU pin in the location (of 6 possible locations) with lowest expected pin power. We evaluated “expected pin power” based on the power distribution in aPrev, which is the previous assembly located here. If aPrev has no pin detail, then we must use its corner fast fluxes to make an estimate.

Parameters:
  • a (Assembly object) – The assembly that is being rotated.

  • aPrev (Assembly object) –

    The assembly that previously occupied this location (before the last shuffle).

    If the assembly “a” was not shuffled, then “aPrev” = “a”.

    If “aPrev” has pin detail, then we will determine the orientation of “a” based on the pin powers of “aPrev” when it was located here.

    If “aPrev” does NOT have pin detail, then we will determine the orientation of “a” based on the corner fast fluxes in “aPrev” when it was located here.

Returns:

rot – An integer from 0 to 5 representing the “orientation” of the assembly. This orientation is relative to the current assembly orientation. rot = 0 corresponds to no rotation. rot represents the number of pi/3 counterclockwise rotations for the default orientation.

Return type:

int

Examples

>>> getOptimalAssemblyOrientation(a, aPrev)
4

See also

rotateAssemblies

calls this to figure out how to rotate

armi.physics.fuelCycle.hexAssemblyFuelMgmtUtils.buildRingSchedule(maxRingInCore, chargeRing=None, dischargeRing=None, jumpRingFrom=None, jumpRingTo=None, coarseFactor=0.0)[source]

Build a ring schedule for shuffling.

Notes

General enough to do convergent, divergent, or any combo, plus jumprings.

The center of the core is ring 1, based on the DIF3D numbering scheme.

Jump ring behavior can be generalized by first building a base ring list where assemblies get charged to H and discharge from A:

[A,B,C,D,E,F,G,H]

If a jump should be placed where it jumps from ring G to C, reversed back to F, and then discharges from A, we simply reverse the sublist [C,D,E,F], leaving us with:

[A,B,F,E,D,C,G,H]

A less-complex, more standard convergent-divergent scheme is a subcase of this, where the sublist [A,B,C,D,E] or so is reversed, leaving:

[E,D,C,B,A,F,G,H]

So the task of this function is simply to determine what subsection, if any, to reverse of the baselist.

Parameters:
  • maxRingInCore (int) – The number of rings in the hex assembly reactor.

  • chargeRing (int, optional) – The peripheral ring into which an assembly enters the core. Default is outermost ring.

  • dischargeRing (int, optional) – The last ring an assembly sits in before discharging. Default is jumpRing-1

  • jumpRingFrom (int) – The last ring an assembly sits in before jumping to the center

  • jumpRingTo (int, optional) – The inner ring into which a jumping assembly jumps. Default is 1.

  • coarseFactor (float, optional) – A number between 0 and 1 where 0 hits all rings and 1 only hits the outer, rJ, center, and rD rings. This allows coarse shuffling, with large jumps. Default: 0

Returns:

  • ringSchedule (list) – A list of rings in order from discharge to charge.

  • ringWidths (list) – A list of integers corresponding to the ringSchedule determining the widths of each ring area

Examples

>>> f.buildRingSchedule(17,1,jumpRingFrom=14)
([13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 14, 15, 16, 17],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
armi.physics.fuelCycle.hexAssemblyFuelMgmtUtils.buildConvergentRingSchedule(chargeRing, dischargeRing=1, coarseFactor=0.0)[source]

Builds a ring schedule for convergent shuffling from chargeRing to dischargeRing.

Parameters:
  • chargeRing (int) – The peripheral ring into which an assembly enters the core. A good default is outermost ring: r.core.getNumRings().

  • dischargeRing (int, optional) – The last ring an assembly sits in before discharging. If no discharge, this is the one that gets placed where the charge happens. Default: Innermost ring

  • coarseFactor (float, optional) – A number between 0 and 1 where 0 hits all rings and 1 only hits the outer, rJ, center, and rD rings. This allows coarse shuffling, with large jumps. Default: 0

Returns:

  • convergent (list) – A list of rings in order from discharge to charge.

  • conWidths (list) – A list of integers corresponding to the ringSchedule determining the widths of each ring area

armi.physics.fuelCycle.hexAssemblyFuelMgmtUtils.buildEqRingSchedule(core, ringSchedule, circularRingOrder)[source]

Expands simple ringSchedule input into full-on location schedule.

Parameters:
  • core (Core object) – Fully initialized Core object, for a hex assembly reactor.

  • ringSchedule (list) – List of ring bounds that is required to be an even number of entries. These entries then are used in a from - to approach to add the rings. The from ring will always be included.

  • circularRingOrder (str) – From the circularRingOrder setting. Valid values include angle and distanceSmart, anything else will

Returns:

list

Return type:

location schedule