Skip to main content

BandStructure

Struct BandStructure 

Source
pub struct BandStructure { /* private fields */ }
Expand description

The band parameters of one layer, with where they came from.

Implementations§

Source§

impl BandStructure

Source

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.

Source

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.

Source

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

Source

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.

Source

pub fn model(&self) -> BandModel

The band model.

Source

pub fn provenance(&self) -> &str

Where the parameters came from.

Source

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

Source

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”).

Source

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

Source

pub fn band_gap_ev(&self) -> Option<f64>

The band gap, eV, or None for a metal.

Source§

impl BandStructure

Source

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

Source§

fn clone(&self) -> BandStructure

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BandStructure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for BandStructure

Source§

fn eq(&self, other: &BandStructure) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for BandStructure

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for BandStructure

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V