armi.materials.material module

Base Material classes.

Most temperatures may be specified in either K or C and the functions will convert for you.

class armi.materials.material.Material[source]

Bases: object

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

Variables:
  • parent (Component) – The component to which this material belongs

  • massFrac (dict) – Mass fractions for all nuclides in the material keyed on the nuclide symbols

  • refDens (float) – A reference density used by some materials, for instance `SimpleSolid`s, during thermal expansion

  • theoreticalDensityFrac (float) – Fraction of the material’s density in reality, which is commonly different from 1.0 in solid materials due to the manufacturing process. Can often be set from the blueprints input via the TD_frac material modification. For programmatic setting, use adjustTD().

Notes

Specific material classes may have many more attributes specific to the implementation for that material.

DATA_SOURCE = 'ARMI'

Indication of where the material is loaded from (may be plugin name)

references = {}

citation}

Type:

The literature references {property

enrichedNuclide = None

Name of enriched nuclide to be interpreted by enrichment modification methods

modelConst = {}

Constants that may be used in intepolation functions for property lookups

propertyValidTemperature = {}

Dictionary of valid temperatures over which the property models are valid in the format ‘Property Name’: ((Temperature_Lower_Limit, Temperature_Upper_Limit), Temperature_Units)

thermalScatteringLaws = ()

A tuple of ThermalScattering instances with information about thermal scattering.

property name

Getter for the private name attribute of this Material.

getName()[source]

Duplicate of name property, kept for backwards compatibility.

getChildren(deep=False, generationNum=1, includeMaterials=False, predicate=None)[source]

Return empty list, representing that materials have no children.

getChildrenWithFlags(typeSpec: Optional[Union[Flag, auto, Sequence[Union[Flag, auto]]]], exactMatch=True)[source]

Return empty list, representing that this object has no children.

backUp()[source]

Create and store a backup of the state.

restoreBackup(paramsToApply)[source]

Restore the parameters from previously created backup.

clearCache()[source]

Clear the cache so all new values are recomputed.

duplicate()[source]

Copy without needing a deepcopy.

linearExpansion(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

The instantaneous linear expansion coefficient (dL/L)/dT.

This is used for reactivity coefficients, etc. but will not affect density or dimensions.

See also

linearExpansionPercent

average linear thermal expansion to affect dimensions and density

linearExpansionPercent(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Average thermal expansion dL/L. Used for computing hot dimensions and density.

Defaults to 0.0 for materials that don’t expand.

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

  • Tc (float) – Temperature in (C)

Return type:

dLL(T) in % m/m/K

See also

linearExpansion

handle instantaneous thermal expansion coefficients

linearExpansionFactor(Tc: float, T0: float) float[source]

Return a dL/L factor relative to T0 instead of the material-dependent reference temperature.

Notes

For a detailed description of the linear expansion methodology, see Thermal Expansion in the documentation.

Parameters:
  • Tc (float) – Current (hot) temperature in C

  • T0 (float) – Cold temperature in C

Returns:

dLL – The average thermal expansion between Tc and T0. If there is no dLL, it should return 0.0.

Return type:

float

getThermalExpansionDensityReduction(prevTempInC: float, newTempInC: float) float[source]

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

setDefaultMassFracs()[source]

Mass fractions.

setMassFrac(nucName: str, massFrac: float) None[source]

Assigns the mass fraction of a nuclide within the material.

Notes

This will try to convert the provided massFrac into a float for assignment. If the conversion cannot occur then an error will be thrown.

applyInputParams()[source]

Apply material-specific material input parameters.

adjustMassEnrichment(massEnrichment: float) None[source]

Adjust the enrichment of the material.

See also

adjustMassFrac

adjustMassFrac(nuclideName: str, massFraction: float) None[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: float, tempGuessInC: float) float[source]

Get the temperature at which the perturbed density occurs (in Celcius).

property liquidPorosity: float

Fraction of the material that is liquid void (unitless).

property gasPorosity: float

Fraction of the material that is gas void (unitless).

pseudoDensity(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Return density that preserves mass when thermally expanded in 2D (in g/cm^3).

Warning

This will not typically agree with Material.density() or Component.density() since this method only expands in 2 dimensions. Depending on your use of inputHeightsConsideredHot and Component.temperatureInC, Material.psuedoDensity() may be a factor of (1+dLL) different than Material.density() or Component.density().

In the case of fluids, density and pseudoDensity are the same as density is not driven by linear expansion, but rather an explicit density function dependent on temperature. Material.linearExpansionPercent() is zero for a fluid.

pseudoDensityKgM3(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

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

See also

density

Arguments are forwarded to the g/cc version

density(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Return density that preserves mass when thermally expanded in 3D (in g/cm^3).

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

densityKgM3(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

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

See also

density

Arguments are forwarded to the g/cc version

getCorrosionRate(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Given a temperature, get the corrosion rate of the material (in microns/year).

yieldStrength(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Returns yield strength at given T in MPa.

thermalConductivity(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Thermal conductivity for given T (in units of W/m/K).

getProperty(propName: str, Tk: Optional[float] = None, Tc: Optional[float] = None, **kwargs) float[source]

Gets properties in a way that caches them.

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

Return mass fraction of nucName.

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

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

Notes

self.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

clearMassFrac() None[source]

Zero out all nuclide mass fractions.

removeNucMassFrac(nuc: str) None[source]
checkPropertyTempRange(label, val)[source]

Checks if the given property / value combination fall between the min and max valid temperatures provided in the propertyValidTemperature object.

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

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

Notes

This was designed as a convience method for checkTempRange.

checkTempRange(minT, maxT, val, label='')[source]

Checks if the given temperature (val) is between the minT and maxT temperature limits supplied.

Label identifies what material type or element is being evaluated in the check.

Parameters:
  • minT (float) – The minimum and maximum values that val is allowed to have.

  • maxT (float) – The minimum and maximum values that val is allowed to have.

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

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

densityTimesHeatCapacity(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Return heat capacity * density at a temperature.

Parameters:
  • Tk (float, optional) – Temperature in Kelvin.

  • Tc (float, optional) – Temperature in degrees Celsius

Returns:

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

Return type:

float

getNuclides()[source]

Return nuclides in the component that contains this Material.

Notes

This method is the only reason Materials still have self.parent. Essentially, we want to change that, but right now the logic for finding nuclides in the Reactor is recursive and considers Materials first. The bulk of the work in finally removing this method will come in downstream repos, where users have fully embraced this method and call it directly in many, many places. Please do not use this method, as it is being deprecated.

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

Return a temperature difference for a given density perturbation.

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

Returns heat capacity in units of J/kg/C.

getTD()[source]

Get the fraction of theoretical density for this material.

adjustTD(val)[source]

Set or change the fraction of theoretical density for this material.

class armi.materials.material.Fluid[source]

Bases: Material

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

getThermalExpansionDensityReduction(prevTempInC, newTempInC)[source]

Return the factor required to update thermal expansion going from one temperature (in Celcius) to a new temperature.

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: float, densityFrac: float, quiet: bool = True) float[source]

Return a temperature difference for a given density perturbation.

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

Return the density at the specified temperature for 3D expansion (in g/cm^3).

Notes

For fluids, there is no such thing as 2D expansion so pseudoDensity() is already 3D.

class armi.materials.material.SimpleSolid[source]

Bases: Material

Base material for a simple material that primarily defines density.

See also

armi.materials.pseudoDensity, armi.materials.density

refTempK = 300
linearExpansionPercent(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Average thermal expansion dL/L. Used for computing hot dimensions and density.

Defaults to 0.0 for materials that don’t expand.

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

  • Tc (float) – Temperature in (C)

Return type:

dLL(T) in % m/m/K

Notes

This only method only works for Simple Solid Materials which assumes the density function returns ‘free expansion’ density as a function temperature

density(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

Material density (in g/cm^3).

pseudoDensity(Tk: Optional[float] = None, Tc: Optional[float] = None) float[source]

The same method as the parent class, but with the ability to apply a non-unity theoretical density (in g/cm^3).

class armi.materials.material.FuelMaterial[source]

Bases: Material

Material that is considered a nuclear fuel.

All this really does is enable the special class 1/class 2 isotopics input option.

class1_wt_frac = None
class1_custom_isotopics = None
class2_custom_isotopics = None
puFrac = 0.0
uFrac = 0.0
zrFrac = 0.0
applyInputParams(class1_custom_isotopics=None, class2_custom_isotopics=None, class1_wt_frac=None, customIsotopics=None)[source]

Apply optional class 1/class 2 custom enrichment input.

Notes

This is often overridden to insert customized material modification parameters but then this parent should always be called at the end in case users want to use this style of custom input.

This is only applied to materials considered fuel so we don’t apply these kinds of parameters to coolants and structural material, which are often not parameterized with any kind of enrichment.

duplicate()[source]

Copy without needing a deepcopy.