pub struct MerminPenn { /* private fields */ }Expand description
The Mermin-ELF inelastic model: a fit of Mermin oscillators to one optical ELF, extended to finite momentum by the Mermin function, and the DIIMFP, IMFP and stopping power built from it. See the module docs.
Implementations§
Source§impl MerminPenn
impl MerminPenn
Sourcepub fn new(elf: OpticalElf, fit: MerminFit) -> Result<Self, ElectronDataError>
pub fn new(elf: OpticalElf, fit: MerminFit) -> Result<Self, ElectronDataError>
The model of fit, a fit to elf (Fermi energy zero, default
tolerance). Oscillators of zero amplitude are carried in the fit
report but do not contribute.
Sourcepub fn fit(
elf: OpticalElf,
options: &MerminFitOptions,
) -> Result<Self, ElectronDataError>
pub fn fit( elf: OpticalElf, options: &MerminFitOptions, ) -> Result<Self, ElectronDataError>
Fit elf with options (fit_mermin_oscillators) and build the
model from the result.
Sourcepub fn with_fermi_energy_ev(
self,
fermi_ev: f64,
) -> Result<Self, ElectronDataError>
pub fn with_fermi_energy_ev( self, fermi_ev: f64, ) -> Result<Self, ElectronDataError>
Set the Fermi energy (eV, finite and non-negative), as for the Penn
models: energies are kinetic energies above the Fermi level and the
kinematics use T' = T + E_F.
Sourcepub fn with_relative_tolerance(
self,
rel_tol: f64,
) -> Result<Self, ElectronDataError>
pub fn with_relative_tolerance( self, rel_tol: f64, ) -> Result<Self, ElectronDataError>
Set the relative integration tolerance, in [1e-9, 1e-2].
Sourcepub fn optical_elf(&self) -> &OpticalElf
pub fn optical_elf(&self) -> &OpticalElf
The optical ELF the oscillators were fitted to.
Sourcepub fn fit_report(&self) -> &MerminFit
pub fn fit_report(&self) -> &MerminFit
The fit: parameters, residuals, f-sum and P_eff.
Sourcepub fn fermi_energy_ev(&self) -> f64
pub fn fermi_energy_ev(&self) -> f64
The Fermi energy, eV.
Sourcepub fn relative_tolerance(&self) -> f64
pub fn relative_tolerance(&self) -> f64
The relative integration tolerance.
Sourcepub fn loss_function(&self, q_per_m: f64, loss_ev: f64) -> f64
pub fn loss_function(&self, q_per_m: f64, loss_ev: f64) -> f64
Im[-1/ε(q, ω)] of the Mermin-ELF model at momentum transfer q
(m⁻¹) and energy loss ω (eV). At q = 0 it is the fitted
Drude-Lorentz ELF.
Sourcepub fn diimfp_per_m_ev(
&self,
energy_ev: f64,
loss_ev: f64,
) -> Result<f64, ElectronDataError>
pub fn diimfp_per_m_ev( &self, energy_ev: f64, loss_ev: f64, ) -> Result<f64, ElectronDataError>
The DIIMFP p(T, ω) (S2017 eq. (2), nonrelativistic) in m⁻¹ eV⁻¹ at
kinetic energy energy_ev above the Fermi level and loss loss_ev.
Zero for ω <= 0 or ω > T.
Sourcepub fn imfp_and_stopping(
&self,
energy_ev: f64,
) -> Result<InelasticPoint, ElectronDataError>
pub fn imfp_and_stopping( &self, energy_ev: f64, ) -> Result<InelasticPoint, ElectronDataError>
The inverse IMFP (m⁻¹) and the stopping power (eV/m) at kinetic
energy energy_ev above the Fermi level.
Sourcepub fn imfp_m(&self, energy_ev: f64) -> Result<f64, ElectronDataError>
pub fn imfp_m(&self, energy_ev: f64) -> Result<f64, ElectronDataError>
The inelastic mean free path λ(E), m.
Sourcepub fn stopping_power_ev_per_m(
&self,
energy_ev: f64,
) -> Result<f64, ElectronDataError>
pub fn stopping_power_ev_per_m( &self, energy_ev: f64, ) -> Result<f64, ElectronDataError>
The stopping power S(E), eV/m.
Sourcepub fn tabulate(
&self,
energies_ev: &[f64],
) -> Result<Vec<InelasticPoint>, ElectronDataError>
pub fn tabulate( &self, energies_ev: &[f64], ) -> Result<Vec<InelasticPoint>, ElectronDataError>
IMFP and stopping power on a grid of energies, in order. Sequential and deterministic.
Trait Implementations§
Source§impl Clone for MerminPenn
impl Clone for MerminPenn
Source§fn clone(&self) -> MerminPenn
fn clone(&self) -> MerminPenn
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for MerminPenn
impl RefUnwindSafe for MerminPenn
impl Send for MerminPenn
impl Sync for MerminPenn
impl Unpin for MerminPenn
impl UnsafeUnpin for MerminPenn
impl UnwindSafe for MerminPenn
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