BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
belfem::material::Abundance Class Reference

Natural isotope abundance database for alloy property calculations. More...

#include <cl_Material_Abundance.hpp>

Public Member Functions

 Abundance ()
 Constructor - initializes isotope database.
 ~Abundance ()=default
 Destructor.
void compute_molar_mass_and_impurity_from_volumes (const Cell< string > &aElements, const Vector< real > &aVolumeFractions, real &aMolarMass, real &aImpurity) const
 Compute molar mass and impurity parameter from volume fractions.
void compute_molar_mass_and_impurity_from_masses (const Cell< string > &aElements, const Vector< real > &aMassFractions, real &aMolarMass, real &aImpurity) const
 Compute molar mass and impurity parameter from mass fractions.
real compute_molar_mass (const string &aElement) const
 Get molar mass of a single element.

Detailed Description

Natural isotope abundance database for alloy property calculations.

Provides isotope mass and abundance data for computing effective molar masses and mass-difference impurity parameters (Γ) used in phonon scattering models.

The database contains isotope data for all stable elements from H (Z=1) through Bi (Z=83), sourced from the CRC Handbook of Chemistry and Physics.

Applications

  1. Molar Mass Calculation: M̄ = Σ_i X_i · M̄_i
    • Used for density calculations
    • Required for Callaway thermal conductivity
  2. Impurity Parameter (Γ): Quantifies mass-difference scattering
    • Appears in τ_M^(-1) ∝ ω⁴ · Γ (Callaway model)
    • Accounts for both isotope and alloy scattering

Usage Patterns

For single elements:

real M_Cu = db.compute_molar_mass("Cu"); // 0.06355 kg/mol
Abundance()
Constructor - initializes isotope database.
Definition cl_Material_Abundance.cpp:22
real compute_molar_mass(const string &aElement) const
Get molar mass of a single element.
Definition cl_Material_Abundance.cpp:455
double real
Definition typedefs.hpp:36

For alloys with mass fractions:

Cell<string> elements = {"Ni", "Cr", "Fe"};
Vector<real> wt_percent = {70.0, 20.0, 10.0}; // Can sum to 100
elements, wt_percent, M, Gamma
);
Cell is a wrapper around the standard vector.
Definition cl_Cell.hpp:42
Column vector.
Definition cl_BZ_Vector.hpp:41
void compute_molar_mass_and_impurity_from_masses(const Cell< string > &aElements, const Vector< real > &aMassFractions, real &aMolarMass, real &aImpurity) const
Compute molar mass and impurity parameter from mass fractions.
Definition cl_Material_Abundance.cpp:379
@ Gamma
Definition cl_Material.hpp:169

For composites with volume fractions:

Cell<string> elements = {"Y", "Ba", "Cu", "O"};
Vector<real> vol_fractions = {1.0, 2.0, 3.0, 7.0}; // YBCO stoichiometry ( not normalized )
elements, vol_fractions, M, Gamma
);
void compute_molar_mass_and_impurity_from_volumes(const Cell< string > &aElements, const Vector< real > &aVolumeFractions, real &aMolarMass, real &aImpurity) const
Compute molar mass and impurity parameter from volume fractions.
Definition cl_Material_Abundance.cpp:339

Constructor & Destructor Documentation

◆ Abundance()

belfem::material::Abundance::Abundance ( )

Constructor - initializes isotope database.

Loads natural isotope masses and abundances for all elements from H (Z=1) through Bi (Z=83) from CRC Handbook data.

◆ ~Abundance()

belfem::material::Abundance::~Abundance ( )
default

Destructor.

Member Function Documentation

◆ compute_molar_mass()

real belfem::material::Abundance::compute_molar_mass ( const string & aElement) const

Get molar mass of a single element.

Parameters
aElementElement symbol (e.g., "Cu", "Ni", "O")
Returns
Molar mass [kg/mol]

Returns the average molar mass weighted by natural isotope abundances: M̄ = Σ_j A_j · M_j

Example:

real M_Cu = db.compute_molar_mass("Cu");
// Returns 0.063546 kg/mol (natural Cu: 69.17% ⁶³Cu, 30.83% ⁶⁵Cu)

Used by: Material constructors for pure elements

◆ compute_molar_mass_and_impurity_from_masses()

void belfem::material::Abundance::compute_molar_mass_and_impurity_from_masses ( const Cell< string > & aElements,
const Vector< real > & aMassFractions,
real & aMolarMass,
real & aImpurity ) const

Compute molar mass and impurity parameter from mass fractions.

Parameters
[in]aElementsElement symbols (e.g., {"Ni", "Mo", "Cr"})
[in]aMassFractionsMass fractions [wt%] or [fraction] Can sum to 100 (wt%), 1.0 (fraction), or be unbalanced
[out]aMolarMassAverage molar mass [kg/mol]
[out]aImpurityMass-difference impurity parameter Γ [-]

Computes effective properties for alloys where weight percentages are known from composition specifications.

Input handling:

  • If Σ(wt%) ≈ 100: Treats as percentages, normalizes to fractions
  • If Σ(frac) ≈ 1.0: Treats as fractions
  • If unbalanced: Exactly one element must be zero (balance element)

Algorithm:

  1. Convert mass fractions Y_i to molar fractions: X_i = Y_i / M̄_i
  2. Normalize: X_i ← X_i / Σ(X_i)
  3. Compute M̄ = Σ_i X_i · M̄_i
  4. Compute Γ = Σ_i Σ_j X_i · A_j^i · [(M_j^i - M̄_i) / M̄]²

Example (Hastelloy C-276):

Cell<string> elem = {"Ni", "Mo", "Cr", "Fe", "W"};
Vector<real> wt = {0.0, 0.16, 0.155, 0.055, 0.04}; // fractions, Ni = balance
// percent lists must sum to exactly 100; an unbalanced list needs exactly one 0
db.compute_molar_mass_and_impurity_from_masses(elem, wt, M, Gamma);

Used by: HastelloyC276::set_constants()

◆ compute_molar_mass_and_impurity_from_volumes()

void belfem::material::Abundance::compute_molar_mass_and_impurity_from_volumes ( const Cell< string > & aElements,
const Vector< real > & aVolumeFractions,
real & aMolarMass,
real & aImpurity ) const

Compute molar mass and impurity parameter from volume fractions.

Parameters
[in]aElementsElement symbols (e.g., {"Ni", "Cr", "Fe"})
[in]aVolumeFractionsStoichiometric counts per formula unit ( NOT normalized: the returned molar mass is Σ X_i·M̄_i, i.e. the formula-unit mass when the counts are integers )
[out]aMolarMassAverage molar mass [kg/mol]
[out]aImpurityMass-difference impurity parameter Γ [-]

Computes effective properties for composites where volume fractions are known (e.g., from stoichiometry or microstructure).

Algorithm:

  1. Compute M̄_i for each element from isotope abundances
  2. Compute alloy molar mass: M̄ = Σ_i X_i · M̄_i
  3. Compute Γ = Σ_i Σ_j X_i · A_j^i · [(M_j^i - M̄_i) / M̄]²

Example (YBCO: Y₁Ba₂Cu₃O₇):

Cell<string> elem = {"Y", "Ba", "Cu", "O"};
Vector<real> vol = {1.0, 2.0, 3.0, 7.0}; // Stoichiometric ratios
db.compute_molar_mass_and_impurity_from_volumes(elem, vol, M, Gamma);
// M ≈ 0.6658 kg/mol (for YBa₂Cu₃O₇)

Used by: the YBCO constructor ( cl_Material_YBCO.cpp )


The documentation for this class was generated from the following files: