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 mass density.
- Variables
~Material.parent (Component) – The component to which this material belongs
~Material.massFrac (dict) – Mass fractions for all nuclides in the material keyed on the nuclide symbols
~Material.refDens (float) – A reference density used by some materials, for instance `SimpleSolid`s, during thermal expansion
~Material.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)
- name = 'Material'¶
String identifying the material
- 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.
- getChildren(deep=False, generationNum=1, includeMaterials=False, predicate=None)[source]¶
Return empty list, representing that materials have no children.
- getChildrenWithFlags(typeSpec: Optional[Union[armi.utils.flags.Flag, armi.utils.flags.auto, Sequence[Union[armi.utils.flags.Flag, armi.utils.flags.auto]]]], exactMatch=True)[source]¶
Return empty list, representing that this object has no children.
- 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
- 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 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
- Returns
dL/L_fromCold – The average thermal expansion between T_current and T0
- Return type
See also
linearExpansionPercent
,components.Component.getThermalExpansionFactor
- getThermalExpansionDensityReduction(prevTempInC: float, newTempInC: float) float [source]¶
Return the factor required to update thermal expansion going from temperatureInC to temperatureInCNew.
- adjustMassEnrichment(massEnrichment: float) None [source]¶
Adjust the enrichment of the material.
See also
- 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.
- getTemperatureAtDensity(targetDensity: float, temperatureGuessInC: float) float [source]¶
Get the temperature at which the perturbed density occurs.
- density(Tk: Optional[float] = None, Tc: Optional[float] = None) float [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 explicit 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: 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
armi.materials.density
Arguments are forwarded to the g/cc version
- density3(Tk: Optional[float] = None, Tc: Optional[float] = None) float [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: 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
armi.materials.density3
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
- 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 in given T in 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
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
- 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
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
- densityTimesHeatCapacity(Tk: Optional[float] = None, Tc: Optional[float] = None) float [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
- 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.
- class armi.materials.material.Fluid[source]¶
Bases:
armi.materials.material.Material
A material that fills its container. Could also be a gas.
- name = 'Fluid'¶
String identifying the material
- 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.
- class armi.materials.material.SimpleSolid[source]¶
Bases:
armi.materials.material.Material
Base material for a simple material that primarily defines density
Notes
This function assumed the density is defined on the _density method and this base class keeps density, density3 and linearExpansion all in sync
class SimpleMaterial(SimpleSolid):
- def _density(self, Tk=None, Tc=None):
” density that preserves mass when thermally expanded in 3D. ” …
See also
armi.materials.density
,armi.materials.density3
- 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
- Return type
dLL(T) in % m/m/K
Notes
This only method only works for Simple Solid Materials which assumes the density3 function returns ‘free expansion’ density as a function temperature
- class armi.materials.material.FuelMaterial[source]¶
Bases:
armi.materials.material.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.