pub struct BandStructure { /* private fields */ }Expand description
The band parameters of one layer, with where they came from.
Implementations§
Source§impl BandStructure
impl BandStructure
Sourcepub fn new(
model: BandModel,
provenance: impl Into<String>,
) -> Result<Self, BandError>
pub fn new( model: BandModel, provenance: impl Into<String>, ) -> Result<Self, BandError>
Check and wrap. Every parameter must be finite; the Fermi energy, the
work function, the valence band width and the inner potential must be
non-negative and the band gap positive. provenance (the source of
the numbers) must not be blank.
Sourcepub fn with_valence_binding_ev(self, binding_ev: f64) -> Result<Self, BandError>
pub fn with_valence_binding_ev(self, binding_ev: f64) -> Result<Self, BandError>
The same metal band, with the electron that a valence inelastic
event liberates bound binding_ev below the Fermi level instead of
at it (the default, binding 0; crate::electron::secondary,
“Energy”). A valence loss W > B then lifts it to E_F + W - B
(Verduin Eq. 3.86, p. 78, with this B), and a loss W <= B
liberates nothing and leaves W in the solid.
This is the rule of M. Azzolini et al., “Secondary electron emission
and yield spectra of metals from Monte Carlo simulations and
experiments”, arXiv:1809.00859v1 (2018), p. 6: “should the energy
loss be larger than the first ionization energy B …, a secondary
electron is emitted with kinetic energy equal to W - B”, with B of
their Table I, p. 7 (“the mean ionization energy characteristic of
each sample”). Their kinetic energies inside the solid are counted
from the Fermi level (p. 3: the incident energy is increased by the
work function χ, and an electron escapes if E cos²θ >= χ), so their
W - B is E_F + W - B on the band-bottom axis of this module.
It is a switch for a sensitivity run, off by default; inner-shell
events keep their own shell binding. The source of binding_ev
belongs in the band’s provenance. Refused: an insulator (its valence
events already use the band gap) and a binding that is not finite and
non-negative.
Sourcepub fn valence_binding_ev(&self) -> Option<f64>
pub fn valence_binding_ev(&self) -> Option<f64>
The binding energy below the Fermi level of the electron that a
valence event liberates in a metal, eV: the value set by
BandStructure::with_valence_binding_ev, or None (the Fermi
level, binding 0).
Sourcepub fn free_electron_metal(
material: &Material,
valence_electrons_per_atom: f64,
work_function_ev: f64,
provenance: impl Into<String>,
) -> Result<Self, BandError>
pub fn free_electron_metal( material: &Material, valence_electrons_per_atom: f64, work_function_ev: f64, provenance: impl Into<String>, ) -> Result<Self, BandError>
A free-electron metal: the Fermi energy is computed from the
conduction-electron density n = z N (z valence electrons per atom,
N the material’s atom density) by free_electron_fermi_energy_ev;
the work function is the caller’s. z is a model choice the caller
makes and should name in provenance together with the source of the
work function.
Sourcepub fn provenance(&self) -> &str
pub fn provenance(&self) -> &str
Where the parameters came from.
Sourcepub fn fermi_ev(&self) -> f64
pub fn fermi_ev(&self) -> f64
Fermi energy above the band bottom, eV: the metal’s own, or mid-gap
(W_v + E_g / 2) for an insulator (cstool get_fermi).
Sourcepub fn min_excitation_ev(&self) -> f64
pub fn min_excitation_ev(&self) -> f64
The lowest energy above the band bottom at which an electron can
excite a secondary, eV: the Fermi energy of a metal, the
conduction-band bottom W_v + E_g of an insulator, where both the
primary and the secondary must end in the conduction band (cstool
get_min_excitation, cstool/input_data/band_structure.py at commit
0c739eb3fcc3fe5297e74c601ac4a9546db596cf). cstool’s table compiler caps the loss of an electron of
energy K at K minus this energy
(crate::electron::inelastic::table, “Energy axis”).
Sourcepub fn inner_potential_ev(&self) -> f64
pub fn inner_potential_ev(&self) -> f64
Inner potential U (vacuum level above the band bottom), eV:
E_F + Φ for a metal, W_v + E_g + χ for an insulator (cstool
get_barrier; Verduin p. 98 and Eq. 3.136).
Sourcepub fn band_gap_ev(&self) -> Option<f64>
pub fn band_gap_ev(&self) -> Option<f64>
The band gap, eV, or None for a metal.
Source§impl BandStructure
impl BandStructure
Sourcepub fn from_defaults(material: &str) -> Result<Self, BandError>
pub fn from_defaults(material: &str) -> Result<Self, BandError>
The band of material from BAND_DEFAULTS alone. Fails if the
table has no entry for material or the entry lacks a parameter (the
error names the first missing one and why it is missing); as of
2026-10-08 every entry lacks at least one, so use
BandDefaults::complete to supply the rest.
Trait Implementations§
Source§impl Clone for BandStructure
impl Clone for BandStructure
Source§fn clone(&self) -> BandStructure
fn clone(&self) -> BandStructure
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BandStructure
impl Debug for BandStructure
Source§impl PartialEq for BandStructure
impl PartialEq for BandStructure
Source§impl Serialize for BandStructure
impl Serialize for BandStructure
impl StructuralPartialEq for BandStructure
Auto Trait Implementations§
impl Freeze for BandStructure
impl RefUnwindSafe for BandStructure
impl Send for BandStructure
impl Sync for BandStructure
impl Unpin for BandStructure
impl UnsafeUnpin for BandStructure
impl UnwindSafe for BandStructure
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more