pub(crate) struct SmallSplitKambe {
eta: Complex,
cancellation: f64,
coefficients: Vec<Complex>,
}Expand description
Kambe integrals I_n(z, eta) of the real-space terms of an Ewald sum at a split below
every automatic one (Self::get), with the coefficients c^j / j! of their series
at c = 1 / (2 eta^2), which every integral at that split shares. There the
closed-form pair and its recurrence (kambe_with_bound) cancel by up to e^Re(c)
(each error function loses about |a|^2 ulps to exp(-a^2) at its argument
a = (z eta -+ i / eta) / sqrt 2), while the series sums terms of one phase for real
z and eta; its coefficients are rounded from double-double arithmetic, since
recurred in double they carry the rounding of c into every integral alike.
Fields§
§eta: Complex§cancellation: f64|c| - Re c, the cancellation of the series.
coefficients: Vec<Complex>Implementations§
Source§impl SmallSplitKambe
impl SmallSplitKambe
Sourcepub(crate) fn new(eta: Complex) -> Self
pub(crate) fn new(eta: Complex) -> Self
The coefficients of the series at the split eta, as many as it may take.
Sourcepub(crate) fn get<const K: usize>(
&self,
orders: [i32; K],
z: Complex,
floor: f64,
) -> [(Complex, f64); K]
pub(crate) fn get<const K: usize>( &self, orders: [i32; K], z: Complex, floor: f64, ) -> [(Complex, f64); K]
I_n(z, eta) of orders (from -1 up), each with a first-order bound on its
absolute rounding error in units of epsilon that counts the conditioning of the
elementary functions it takes: from the closed forms where the bound of the first
order stays within CLOSED_ULPS of its value or within floor (an error the
caller can afford), or where the series would cancel as much; otherwise from the
series where it is finite and bounds the first order at least as tightly.
Sourcefn closed(&self, n: i32, z: Complex, ulps: f64) -> (Complex, f64)
fn closed(&self, n: i32, z: Complex, ulps: f64) -> (Complex, f64)
kambe_with_bound from the closed-form pair (the series pair for odd orders) and
the upward recurrence, with the bounds of the pair and of the endpoint terms scaled
by the conditioning of the functions they take, and ulps those of the series.
Trait Implementations§
Source§impl Clone for SmallSplitKambe
impl Clone for SmallSplitKambe
Source§fn clone(&self) -> SmallSplitKambe
fn clone(&self) -> SmallSplitKambe
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SmallSplitKambe
impl RefUnwindSafe for SmallSplitKambe
impl Send for SmallSplitKambe
impl Sync for SmallSplitKambe
impl Unpin for SmallSplitKambe
impl UnwindSafe for SmallSplitKambe
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
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§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.