armi.materials.material module

Base Material classes.

All temperatures are in K, but Tc can be specified and the functions will convert for you.

Caution

ARMI uses these objects for all material properties. Under the hood, A system called MAT_PROPS is in charge of several material properties. It is a more industrial-strength material property system that is currently a TerraPower proprietary system. You will see references to it in this module.

class armi.materials.material.Material[source]

Bases: armi.reactor.composites.Leaf

A material is made up of elements or isotopes. It has bulk properties like mass density.

params

scalar parameters.

Type

dict

massFrac

The mass fractions of each nuclide in this material. These will not always sum to 1.0 after situations like axial expansion.

Type

dict

massFracNorm

The sum of massFrac, tracked by the setters so it doesn’t have to be added up a lot.

Type

float

cache

Fast storage for commonly computed values.

Type

dict

reference

The literature reference.

Type

str

pDefs = <armi.reactor.parameters.parameterDefinitions.ParameterDefinitionCollection object>
DATA_SOURCE = 'ARMI'
name = 'Material'
enrichedNuclide = None
correctDensityAfterApplyInputParams = True
modelConst = {}
references = {}
duplicate()[source]

copy without needing a deepcopy.

linearExpansion(Tk=None, Tc=None)[source]

the instantaneous linear expansion coefficient (dL/L)/dT

This is used for reactivity coefficients, etc.

linearExpansionPercent(Tk=None, Tc=None)[source]

average thermal expansion dL/L. Used for computing hot dimensions

Defaults to 0.0 for materials that don’t expand.

Parameters
  • Tk (float) – temperature in (K)

  • Tc (float) – Temperature in (C)

Returns

Return type

%dLL(T) in m/m/K

linearExpansionFactor(Tc, T0)[source]

Return a dL/L factor relative to T0 instead of to the material-dependent reference temperature. This factor dL/Lc is a ratio and will be used in dimensions through the formula:

dim = dim0*(1+dLL).

If there is no dLL, it should return 0.0

calculate thermal expansion based on dL/L0, which is dependent on the mat-dep ref temp.:

L(T) = L0(1+dL/L0)
(Lh-Lc)/L0 = dL/L0(Th) - dL/L0(Tc)
(Lh-Lc)/Lc = (Lh-Lc)/L0 * L0/Lc = (dL/L0(Th)-dL/L0(Tc)/L0 / (dL/L0(Tc)+1.0)
Parameters
  • Tc (float) – Current (hot) temperature in C

  • T0 (float) – Cold temperature in C

Returns

dL/L_fromCold – The average thermal expansion between T_current and T0

Return type

float

See also

linearExpansionPercent(), components.Component.getThermalExpansionFactor()

getThermalExpansionDensityReduction(prevTempInC, newTempInC)[source]

Return the factor required to update thermal expansion going from temperatureInC to temperatureInCNew.

setDefaultMassFracs()[source]

mass fractions

setMassFrac(nucName, massFrac)[source]

Adjust the composition of this object so the mass fraction of nucName is val.

See also

setMassFracs()

efficiently set multiple mass fractions at the same time.

applyInputParams()[source]

default do-nothing responder to XLS input params

adjustMassEnrichment(massEnrichment)[source]

Adjust the enrichment of the material.

See also

adjustMassFrac()

adjustMassFrac(nuclideName, massFraction)[source]

Change the mass fraction of the specified nuclide.

This adjusts the mass fraction of a specified nuclide relative to other nuclides of the same element. If there are no other nuclides within the element, then it is enriched relative to the entire material. For example, enriching U235 in UZr would enrich U235 relative to U238 and other naturally occurring uranium isotopes. Likewise, enriching ZR in UZr would enrich ZR relative to uranium.

The method maintains a constant number of atoms, and adjusts refDens accordingly.

Parameters
  • nuclideName (str) – Name of nuclide to enrich.

  • massFraction (float) – New mass fraction to achieve.

volumetricExpansion(Tk=None, Tc=None)[source]
getTemperatureAtDensity(targetDensity, temperatureGuessInC)[source]

Get the temperature at which the perturbed density occurs.

property liquidPorosity
property gasPorosity
density(Tk=None, Tc=None)[source]

Return density that preserves mass when thermally expanded in 2D.

Warning

This density will not agree with the component density since this method only expands in 2 dimensions. The component has been manually expanded axially with the manually entered block hot height. The density returned by this should be a factor of 1 + dLL higher than the density on the component. density3 should be in agreement at both cold and hot temperatures as long as the block height is correct for the specified temperature. In the case of Fluids, density and density3 are the same as density is not driven by linear expansion, but rather an exilicit density function dependent on Temperature. linearExpansionPercent is zero for a fluid.

See also

armi.materials.density3()

component density should be in agreement with this density

armi.reactor.blueprints._applyBlockDesign()

2D expansion and axial density reduction occurs here.

densityKgM3(Tk=None, Tc=None)[source]

Return density that preserves mass when thermally expanded in 2D in units of kg/m^3

See also

armi.materials.density()

Arguments are forwarded to the g/cc version

density3(Tk=None, Tc=None)[source]

Return density that preserves mass when thermally expanded in 3D.

Notes

Since refDens is specified at the material-dep reference case, we don’t need to specify the reference temperature. It is already consistent with linearExpansion Percent. - p*(dp/p(T) + 1) =p*( p + dp(T) )/p = p + dp(T) = p(T) - dp/p = (1-(1 + dL/L)**3)/(1 + dL/L)**3

density3KgM3(Tk=None, Tc=None)[source]

Return density that preserves mass when thermally expanded in 3D in units of kg/m^3.

See also

armi.materials.density3()

Arguments are forwarded to the g/cc version

getCorrosionRate(Tk=None, Tc=None)[source]

given a temperature, get the corrosion rate of the material

getLifeMetalCorrelation(days, Tk)[source]

life-metal correlation calculates the wastage of the material due to fission products.

getReverseLifeMetalCorrelation(thicknessFCCIWastageMicrons, Tk)[source]

Life metal correlation reverse lookup. Knowing wastage and Temperature determine the effective time at that temperature.

getLifeMetalConservativeFcciCoeff(Tk)[source]

Return the coefficient to be used in the LIFE-METAL correlation

yieldStrength(Tk=None, Tc=None)[source]

returns yield strength at given T in MPa

thermalConductivity(Tk=None, Tc=None)[source]

thermal conductivity in given T in K

getProperty(propName, Tk=None, Tc=None, **kwargs)[source]

gets properties in a way that caches them.

getMassFrac(nucName=None, elementSymbol=None, nucList=None, normalized=True, expandFissionProducts=False)[source]

return mass fraction of nucName.

If no arguments, send sum of all.

Parameters
  • nucName (str, optional) – Nuclide name to return (‘ZR’,’PU239’,etc.)

  • elementSymbol (str, optional) – Return mass fractions of all isotopes of this element (example: ‘Pu’, ‘U’)

  • nucList (optional, list) – List of nuclides to sum up and return the total

  • normalized (bool, optional) – Return the mass fraction such that the sum of all nuclides is sum to 1.0. Default True

Notes

self.p.massFrac are modified mass fractions that may not add up to 1.0 (for instance, after a axial expansion, the modified mass fracs will sum to less than one. The alternative is to put a multiplier on the density. They’re mathematically equivalent.

This function returns the normalized mass fraction (they will add to 1.0) as long as the mass fracs are modified only by get and setMassFrac

This is a performance-critical method as it is called millions of times in a typical ARMI run.

See also

setMassFrac(), getNDens()

clearMassFrac()[source]

zero out all nuclide mass fractions.

removeNucMassFrac(nuc)[source]
removeLumpedFissionProducts()[source]
getMassFracCopy()[source]
checkTempRange(minV, maxV, val, label='')[source]

Checks if the given temperature (val) is between the minV and maxV temperature limits supplied. Label identifies what material type or element is being evaluated in the check.

Parameters
  • maxV (minV,) – The minimum and maximum values that val is allowed to have.

  • val (float) – The value to check whether it is between minV and maxV.

  • label (str) – The name of the function or property that is being checked.

isBeyondIncubationDose(totalDPA)[source]

Checks if the materials is beyond is incubation dose. Passes if the material does not have an incubation dose assigned (self.modelConst[‘Rincu’]

Parameters

totalDPA (float) – Total DPA accumulated in the material

Returns

Return type

Bool indicating whether the material is beyond its incubation dose or not.

updateDeltaDPApastIncubation(totalDPA, deltaDPA)[source]

If a material has passed its incubation dose, this method updates deltaDPA. The concern here is when a step in DPA crosses the incubation threshold, the amount of DPA input into a calculation is more than is actually contributing to deformation.

Parameters
  • totalDPA (float) – Total DPA accumulated in the material.

  • deltaDPA (float) – Change in DPA over a time step.

Returns

Return type

deltaDPA past the incubation dose of the material.

densityTimesHeatCapacity(Tk=None, Tc=None)[source]

Return heat capacity * density at a temperature :param Tk: Temperature in Kelvin. :type Tk: float, optional :param Tc: Temperature in degrees Celsius. :type Tc: float, optional

Returns

rhoCP – Calculated value for the HT9 density* heat capacity unit (J/m^3-K)

Return type

float

getNuclides()[source]

Determine which nuclides are present in this armi object.

Returns

List of nuclide names that exist in this

Return type

list

getTempChangeForDensityChange(Tc, densityFrac, quiet=True)[source]

Return a temperature difference for a given density perturbation.

heatCapacity(Tk=None, Tc=None)[source]
paramCollectionType

alias of armi.reactor.parameters.parameterCollections.MaterialParameterCollection

class armi.materials.material.Fluid[source]

Bases: armi.materials.material.Material

A material that fills its container. Could also be a gas.

name = 'Fluid'
getThermalExpansionDensityReduction(prevTempInC, newTempInC)[source]

Return the factor required to update thermal expansion going from temperatureInC to temperatureInCNew.

linearExpansion(Tk=None, Tc=None)[source]

for void, lets just not allow temperature changes to change dimensions since it is a liquid it will fill its space.

getTempChangeForDensityChange(Tc, densityFrac, quiet=True)[source]

Return a temperature difference for a given density perturbation.

density3(Tk=None, Tc=None)[source]

Return the density at the specified temperature for 3D expansion.

Notes

for fluids, there is no such thing as 2 d expansion so density() is already 3D.

paramCollectionType

alias of armi.reactor.parameters.parameterCollections.MaterialParameterCollection