pub struct FullPenn { /* private fields */ }Expand description
The full Penn model built from one optical ELF. See the module docs.
Implementations§
Source§impl FullPenn
impl FullPenn
Sourcepub fn new(elf: OpticalElf) -> Self
pub fn new(elf: OpticalElf) -> Self
The model for elf, with Fermi energy zero and the default tolerance.
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
single-pole model: 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 model is built from.
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 f_sum_ev2_at(&self, q_per_m: f64) -> Result<f64, ElectronDataError>
pub fn f_sum_ev2_at(&self, q_per_m: f64) -> Result<f64, ElectronDataError>
∫ dω_p g(ω_p) [∫ ω^j Im[-1/ε_L(q, ω)] dω over (0, ∞)] is the
optical f-sum at j = 1: the ω integral of ω Im[-1/ε(q, ω)] at
momentum q (m⁻¹), eV², evaluated Lindhard gas by Lindhard gas.
The integral over the Lindhard continuum is cut off at
ω_max = 40 (q k_F + q²/2 + ω_p) for each gas. The optical f-sum
∫ ω Im[-1/ε(ω)] dω of the same table (the value this must equal,
super::sum_rules::SumRuleReport::f_sum_ev2) is independent of q.
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 full Penn algorithm (S2017 eq. (4)), at
momentum transfer q (m⁻¹) and energy loss ω (eV). At q = 0 it is
the optical ELF.
Sourcepub fn loss_function_evaluation(
&self,
q_per_m: f64,
loss_ev: f64,
) -> LossFunctionEvaluation
pub fn loss_function_evaluation( &self, q_per_m: f64, loss_ev: f64, ) -> LossFunctionEvaluation
Self::loss_function with the work of its ω_p integral (S2017
eq. (4)) and whether that integral met its tolerance; see
LossFunctionEvaluation. The value is the same number
Self::loss_function returns.
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) at kinetic
energy energy_ev above the Fermi level and energy loss loss_ev, in
m⁻¹ eV⁻¹. Zero for ω <= 0 or ω > T.
Sourcepub fn diimfp_evaluation(
&self,
energy_ev: f64,
loss_ev: f64,
) -> Result<DiimfpEvaluation, ElectronDataError>
pub fn diimfp_evaluation( &self, energy_ev: f64, loss_ev: f64, ) -> Result<DiimfpEvaluation, ElectronDataError>
Self::diimfp_per_m_ev with the number of loss-function
evaluations of its momentum integral whose own ω_p integral did not
converge (#298, #368); see DiimfpEvaluation. The value is the
same number Self::diimfp_per_m_ev returns, and the errors are the
same.
Sourcepub fn imfp_unconverged(
&self,
energy_ev: f64,
) -> Result<(u64, f64), ElectronDataError>
pub fn imfp_unconverged( &self, energy_ev: f64, ) -> Result<(u64, f64), ElectronDataError>
Cells of the outer ω_p integral of Self::imfp_and_stopping at
energy_ev that were accepted without meeting their tolerance
(budget of the bisection spent, maximum depth, or a midpoint that is
not representable; #298), and the error estimate of those cells
relative to λ⁻¹. (0, 0.0) when the integral converged.
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_and_stopping_evaluation(
&self,
energy_ev: f64,
) -> Result<ImfpEvaluation, ElectronDataError>
pub fn imfp_and_stopping_evaluation( &self, energy_ev: f64, ) -> Result<ImfpEvaluation, ElectronDataError>
Self::imfp_and_stopping with the cells of its outer ω_p
integral that were accepted without meeting their tolerance (#298,
#368), from the same single evaluation; see ImfpEvaluation. The
point is the same value Self::imfp_and_stopping returns, and
the errors are the same.
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.
Sourcepub fn diimfp_grid(
&self,
energies_ev: &[f64],
) -> Result<DiimfpGrid, ElectronDataError>
pub fn diimfp_grid( &self, energies_ev: &[f64], ) -> Result<DiimfpGrid, ElectronDataError>
The DIIMFP of this model tabulated once for the rows of one
inelastic table, whose energies (eV, above the Fermi level) are
energies_ev. See DiimfpGrid for the method and its accuracy.
The profiles are built in parallel (rayon) and collected in a fixed
order, so the grid is bit-identical on any thread count.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for FullPenn
impl RefUnwindSafe for FullPenn
impl Send for FullPenn
impl Sync for FullPenn
impl Unpin for FullPenn
impl UnsafeUnpin for FullPenn
impl UnwindSafe for FullPenn
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