armi.reactor.converters.meshConverters module

Mesh specifiers update the mesh structure of a reactor by increasing or decreasing the number of mesh coordinates.

class armi.reactor.converters.meshConverters.MeshConverter(converterSettings: dict)[source]

Bases: object

Base class for the reactor mesh conversions.

Parameters

converterSettings (dict) – A set of str, value settings used in mesh conversion. Required settings are implementation specific.

generateMesh(r=None)[source]
writeMeshData()[source]
class armi.reactor.converters.meshConverters.RZThetaReactorMeshConverter(converterSettings)[source]

Bases: armi.reactor.converters.meshConverters.MeshConverter

Handles mesh conversions for r-z-theta reactor geometries.

Variables

converterSettings (dict) – This is a dictionary of settings that are used for the RZThetaReactorMeshConverter. Required converter settings: uniformThetaMesh,``thetaBins``

generateMesh(r=None)[source]
writeMeshData()[source]

Write a summary table of the radial, axial, and theta bins that will be used for geometry conversion.

Notes

This should be on the ThetaRZGrid object.

_writeMeshLogData()[source]
_logMeshData(listType, listName, listDataType)[source]
setRingsToConvert(core)[source]
setAxialMesh()[source]
setThetaMesh()[source]

Generate a uniform theta mesh in radians.

_generateUniformThetaMesh()[source]

Create a uniform theta mesh over 2*pi using the user specified number of theta bins.

_generateNonUniformThetaMesh()[source]
_checkRingList(core)[source]

Check for any errors in the radial rings.

_combineLastTwoRadialBins()[source]
_checkAxialMeshList()[source]

Check for errors in the axial mesh coordinates.

_checkThetaMeshList()[source]

Check for errors in the theta mesh coordinates.

class armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByAxialCoordinates(converterSettings)[source]

Bases: armi.reactor.converters.meshConverters.RZThetaReactorMeshConverter

Generate an axial mesh based on user provided axial mesh coordinates.

setAxialMesh()[source]

Set up the reactor’s new radial rings based on a user-specified axial coordinate list (axial mesh).

class armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByAxialBins(converterSettings)[source]

Bases: armi.reactor.converters.meshConverters.RZThetaReactorMeshConverter

Generate an axial mesh based on user provided axial bins.

Notes

The new mesh structure is formed by merging multiply “bins” together (i.e. numPerBin = 2 and the original mesh is [1, 2, 3, 4, 5, 6, 7, 8], the new mesh structure will be [2, 4, 6, 8]).

setAxialMesh()[source]

Set up axial mesh coordinates using user-specified number of axial segments per bins.

Notes

Example:

Original core axial mesh list - [25.0, 50.0, 75.0, 100.0, 175.0] cm axialSegsPerBin = 2 Merged core axial mesh list - [50.0, 100.0, 175.0] cm

_mergeAxialMeshByAxialSegsPerBin()[source]
class armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByRingComposition(cs)[source]

Bases: armi.reactor.converters.meshConverters.RZThetaReactorMeshConverter

Generate a new mesh based on the radial compositions in the core.

setRingsToConvert(core)[source]

Set up the reactor’s new radial rings based on the ring compositions (assembly types).

_getCompositionTypesPerRing(core)[source]

Set composition of each ring in the reactor by the assembly type.

_checkRingList(core)[source]

Check for initialization errors in the radial ring list provided by the user.

_writeMeshLogData()[source]
class armi.reactor.converters.meshConverters.RZThetaReactorMeshConverterByRingCompositionAxialBins(cs)[source]

Bases: armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByRingComposition, armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByAxialBins

Generate a new mesh based on the radial compositions and axial bins in the core.

class armi.reactor.converters.meshConverters.RZThetaReactorMeshConverterByRingCompositionAxialCoordinates(cs)[source]

Bases: armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByRingComposition, armi.reactor.converters.meshConverters._RZThetaReactorMeshConverterByAxialCoordinates

Generate a new mesh based on the radial compositions and axial coordinates in the core.

armi.reactor.converters.meshConverters.checkLastValueInList(inputList, listName, expectedValue, eps=0.001, adjustLastValue=False)[source]

Check that the last value in the list is equal to the expected value within +/- eps

armi.reactor.converters.meshConverters.checkListBounds(inputList, listName, minVal, maxVal, eps=0.001)[source]

Ensure that each value in a list does not exceed the allowable bounds

armi.reactor.converters.meshConverters.generateBins(totalNumDataPoints, numPerBin, minNum)[source]

Fill in a list based on the total number of data points and the number of data points per bin

class armi.reactor.converters.meshConverters.AxialExpansionModifier(percent, fuelLockedToClad=False, cs=None)[source]

Bases: armi.reactor.converters.meshConverters.MeshConverter

Axially expand or contract a reactor.

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

Build an axial expansion converter.

Parameters
  • percent (float) – the desired axial expansion in percent. If negative, use special treatment of down-expanding

  • fuelLockedToClad (bool) – Specify whether or not to conserve mass on structure due to the fuel being locked to the clad. Note: this should generally be set to False even if the fuel is locked to the clad because the duct will not be axially expanding.

convert(r=None, converterSettings=None)[source]

Perform an axial expansion of the core.

Notes

This loops through the fuel blocks, making their height larger by a fraction of maxPercent. It reduces the homogenized actinide number densities to conserve atoms.

This is a first approximation, adjusting the whole core uniformly and adjusting fuel with structure and everything.

When fuel is locked to clad, this only expands the actinides! So the structural materials and sodium stay as they are in terms of density. By growing the mesh, we are introducing NEW ATOMS of these guys, thus violating conservation of atoms. However, the new ones are effectively piled up on top of the reactor where they are neutronically uninteresting. This approximates fuel movement without clad/duct movement.

armi.reactor.converters.meshConverters.getAxialExpansionNuclideAdjustList(r, componentFlags: Union[armi.utils.flags.Flag, armi.utils.flags.auto, Sequence[Union[armi.utils.flags.Flag, armi.utils.flags.auto]], None] = None)[source]

Determine which nuclides should have their mass conserved during axial expansion

Parameters
  • r (Reactor) – The Reactor object to search for nuclide instances

  • componentFlags (TypeSpec, optional) – A type specification to use for filtering components that should conserve mass. If None, Flags.FUEL is used.