pub struct SalvatDhfs { /* private fields */ }Expand description
The three-term analytic screening function of Salvat, Martinez, Mayol &
Parellada, Phys. Rev. A 36, 467 (1987), doi:10.1103/PhysRevA.36.467:
V(r) = -(Z/r) sum_i A_i exp(-alpha_i r) with sum_i A_i = 1
(neutral atom), r in bohr.
The form is the paper’s Eq. (11) (screening function) inserted in its
Eq. (1); its Eq. (12) gives the electron density used by
ElectronDensity. Both were checked (issue #91) in the open copy of the
paper in the University of Barcelona repository (diposit.ub.edu; the
publisher’s copy is closed). SalvatDhfs::for_element returns the
paper’s Table I coefficients for Z = 1..92 (pp. 470-471, transcribed in
#130, see salvat_table.rs and docs/data-provenance.md);
SalvatDhfs::from_coefficients takes caller-supplied ones.
Rows marked with an asterisk in Table I (H..P, Ca, Sc, Se, Br, Kr, Xe)
have A_3 = 0 and no alpha_3 (p. 471); they are held as two-term
potentials, so no alpha_3 value enters ScreenedPotential::energy,
ElectronDensity::density or ScreenedPotential::length_scale.
Some amplitudes are negative (H, He: A_1; S, Cl, Ar: A_2). For H
(A_1 = -184.39, A_2 = 185.39, nearly equal alphas) the two terms
cancel to about 1 part in 370 near the nucleus, so phi(r) there keeps
roughly 13 significant digits in f64 rather than 16.
Implementations§
Source§impl SalvatDhfs
impl SalvatDhfs
Sourcepub fn from_coefficients(
z: u32,
a: [f64; 3],
alpha: [f64; 3],
) -> Result<Self, ElasticError>
pub fn from_coefficients( z: u32, a: [f64; 3], alpha: [f64; 3], ) -> Result<Self, ElasticError>
Build from caller-supplied coefficients (a dimensionless summing to
1 within 1e-6, alpha in 1/bohr and positive).
Sourcepub fn from_two_terms(
z: u32,
a: [f64; 2],
alpha: [f64; 2],
) -> Result<Self, ElasticError>
pub fn from_two_terms( z: u32, a: [f64; 2], alpha: [f64; 2], ) -> Result<Self, ElasticError>
Build a two-term potential (A_3 = 0, the form of the asterisked rows
of Salvat et al. (1987) Table I): a sums to 1 within 1e-6, alpha
in 1/bohr and positive.
Sourcepub fn for_element(z: u32) -> Result<Self, ElasticError>
pub fn for_element(z: u32) -> Result<Self, ElasticError>
The Salvat et al. (1987) Table I potential of element z
(pp. 470-471, A_3 = 1 - A_1 - A_2; two-term for the asterisked
rows). ElasticError::ScreeningCoefficientsUnavailable outside
Z = 1..92.
Sourcepub fn amplitudes(&self) -> &[f64]
pub fn amplitudes(&self) -> &[f64]
Amplitudes A_i of the terms in use (2 or 3).
Trait Implementations§
Source§impl Clone for SalvatDhfs
impl Clone for SalvatDhfs
Source§fn clone(&self) -> SalvatDhfs
fn clone(&self) -> SalvatDhfs
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for SalvatDhfs
Source§impl Debug for SalvatDhfs
impl Debug for SalvatDhfs
Source§impl ElectronDensity for SalvatDhfs
Poisson density of the analytic screening function, Salvat et al. (1987)
Eq. (12): rho(r) = (Z/(4 pi r)) sum_i A_i alpha_i^2 exp(-alpha_i r),
summed over the terms in use (two for the asterisked, A_3 = 0 rows of
Table I).
impl ElectronDensity for SalvatDhfs
Poisson density of the analytic screening function, Salvat et al. (1987)
Eq. (12): rho(r) = (Z/(4 pi r)) sum_i A_i alpha_i^2 exp(-alpha_i r),
summed over the terms in use (two for the asterisked, A_3 = 0 rows of
Table I).
Source§impl PartialEq for SalvatDhfs
impl PartialEq for SalvatDhfs
Source§impl ScreenedPotential for SalvatDhfs
impl ScreenedPotential for SalvatDhfs
Source§fn energy(&self, r: f64) -> f64
fn energy(&self, r: f64) -> f64
V(r) of the electron, hartree, at radius r bohr.
Attractive potentials are negative.Source§fn nuclear_charge(&self) -> f64
fn nuclear_charge(&self) -> f64
Z of the point-Coulomb singularity V -> -Z/r at the
origin (0 for a regular potential). Selects the series used to start
the integration.Source§fn length_scale(&self) -> f64
fn length_scale(&self) -> f64
V changes appreciably, bohr. It caps the step.Source§fn breakpoints(&self) -> Vec<f64>
fn breakpoints(&self) -> Vec<f64>
V is discontinuous; the integrator restarts there.Source§fn bound_energy_ev(&self) -> Option<f64>
fn bound_energy_ev(&self) -> Option<f64>
CorrectedPotential, whose exchange and polarization
cutoff use the energy). ElasticSolver::new rejects any other solver
energy. The default, None, accepts every energy.Source§fn correction_metadata(&self) -> CorrectionMetadata
fn correction_metadata(&self) -> CorrectionMetadata
ElasticResult::corrections by solve. The default reports both
off.Source§fn matching_radius(&self, threshold: f64) -> f64
fn matching_radius(&self, threshold: f64) -> f64
length_scale) with
|r V(r)| < threshold that also lies beyond every breakpoint.impl StructuralPartialEq for SalvatDhfs
Auto Trait Implementations§
impl Freeze for SalvatDhfs
impl RefUnwindSafe for SalvatDhfs
impl Send for SalvatDhfs
impl Sync for SalvatDhfs
impl Unpin for SalvatDhfs
impl UnsafeUnpin for SalvatDhfs
impl UnwindSafe for SalvatDhfs
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