pub struct IntegralEngine;Expand description
Evaluator engine for molecular integrals
Implementations§
Source§impl IntegralEngine
impl IntegralEngine
Sourcepub fn evaluate_overlap<const N: usize, const M: usize>(
basis_a: &[GtoPrimitive; N],
basis_b: &[GtoPrimitive; M],
) -> ZeroHeapMatrix<f64, N, M>
pub fn evaluate_overlap<const N: usize, const M: usize>( basis_a: &[GtoPrimitive; N], basis_b: &[GtoPrimitive; M], ) -> ZeroHeapMatrix<f64, N, M>
Evaluates the overlap matrix S between two sets of GTO primitives. Returns a ZeroHeapMatrix containing the overlap elements.
Sourcepub fn overlap_s(a: &GtoPrimitive, b: &GtoPrimitive) -> f64
pub fn overlap_s(a: &GtoPrimitive, b: &GtoPrimitive) -> f64
Bare s-type overlap (a|b) between two primitive Gaussians, INCLUDING the
primitives’ coefficient factors. Exact closed form (Szabo & Ostlund,
appendix A):
S_ab = (π/p)^{3/2} · exp(−μ·|A−B|²) · c_a · c_b,
with p = α+β and μ = αβ/p. Valid for s-type (l = 0); the STO-3G H/He
validation set contains only s primitives.
Sourcepub fn kinetic_s(a: &GtoPrimitive, b: &GtoPrimitive) -> f64
pub fn kinetic_s(a: &GtoPrimitive, b: &GtoPrimitive) -> f64
Kinetic-energy integral (a|−½∇²|b) for two s-type primitives, INCLUDING
the coefficient factors. Exact closed form:
T_ab = μ·(3 − 2μ·|A−B|²) · S_ab, μ = αβ/(α+β),
where S_ab is the bare s overlap above (Szabo & Ostlund, appendix A).
Sourcepub fn nuclear_s(
a: &GtoPrimitive,
b: &GtoPrimitive,
center: [f64; 3],
z: f64,
) -> f64
pub fn nuclear_s( a: &GtoPrimitive, b: &GtoPrimitive, center: [f64; 3], z: f64, ) -> f64
Nuclear-attraction integral (a|−Z/|r−C||b) for two s-type primitives and
one nucleus of charge z at center, INCLUDING the coefficient factors.
Exact closed form via the Boys function F₀:
V_ab^C = −Z · (2π/p) · exp(−μ·|A−B|²) · F₀(p·|P−C|²),
with p = α+β, μ = αβ/p and P the Gaussian-product center (Szabo & Ostlund,
appendix A). The total one-electron nuclear attraction is the sum over all
nuclei.
Sourcepub fn dipole_s(a: &GtoPrimitive, b: &GtoPrimitive) -> [f64; 3]
pub fn dipole_s(a: &GtoPrimitive, b: &GtoPrimitive) -> [f64; 3]
Cartesian dipole-moment integrals (a|x|b), (a|y|b), (a|z|b) for two
s-type primitives, INCLUDING the coefficient factors, measured about the
global coordinate origin. Exact closed form: the first moment of the
product Gaussian is its center P, so (a|w|b) = P_w · S_ab.
Sourcepub fn evaluate_eri(
a: &GtoPrimitive,
b: &GtoPrimitive,
c: &GtoPrimitive,
d: &GtoPrimitive,
) -> f64
pub fn evaluate_eri( a: &GtoPrimitive, b: &GtoPrimitive, c: &GtoPrimitive, d: &GtoPrimitive, ) -> f64
Evaluates the Two-Electron Repulsion Integrals (ERI). Since ERIs are 4-center (N x N x N x N), we return a specific slice or compute on demand. For this engine, we evaluate a single (ab|cd) primitive set.
Sourcepub fn boys_function(n: u8, t: f64) -> f64
pub fn boys_function(n: u8, t: f64) -> f64
Evaluates the Boys function F_n(t) using a zero-heap segmented method:
- Small T: Taylor series expansion
- Intermediate T: Minimax polynomial interpolation (lookup table)
- Large T: Asymptotic expansion
Auto Trait Implementations§
impl Freeze for IntegralEngine
impl RefUnwindSafe for IntegralEngine
impl Send for IntegralEngine
impl Sync for IntegralEngine
impl Unpin for IntegralEngine
impl UnsafeUnpin for IntegralEngine
impl UnwindSafe for IntegralEngine
Blanket Implementations§
§impl<S, A> Aggregate<Result<S, Error>> for Awhere
A: Aggregate<S>,
impl<S, A> Aggregate<Result<S, Error>> for Awhere
A: Aggregate<S>,
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<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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