pub enum MeanFreePath {
Constant,
EnergyDependent {
min_cm_angle_rad: f64,
},
}Expand description
How free-flight lengths and the impact-parameter limit are chosen.
Variants§
Constant
Constant flight length l = N^(-1/3) (the mean interatomic distance)
and impact parameters uniform over a disc of radius
p_max = (pi N^(2/3))^(-1/2), so that N pi p_max^2 l = 1: each flight
sweeps exactly one atom’s worth of target. This is the amorphous-target
convention of Biersack and Haggmark, Nucl. Instrum. Methods 174 (1980)
257. To avoid every primary making its first collision at the same depth
l cos(theta_in), the primary’s first flight is R l with R uniform
in [0, 1); recoils start at an atom site and fly a full l.
Collisions with p > p_max are dropped unless
BcaConfig::weak_collisions adds them (module docs, “Weak
collisions”).
EnergyDependent
Energy-dependent free path with Poisson-distributed flight lengths.
Collisions deflecting by less than min_cm_angle_rad (centre-of-mass)
are neglected: for each element i, p_i(E) is the impact parameter at
which the centre-of-mass angle equals that minimum, capped at the
constant-convention p_max (so the free path is never shorter than
N^(-1/3)). The mean free path is lambda = 1 / (N pi Sum_i x_i p_i^2),
the flight length is exponential with that mean, the partner is drawn
with probability x_i p_i^2 / Sum_j x_j p_j^2, and p = p_i sqrt(R).
This is the standard cross-section cut-off treatment of a Poisson
collision process (Eckstein 1991). It reduces to Constant (with
exponential instead of fixed flight lengths) when every p_i hits the
cap. The nuclear energy loss of the neglected small-angle collisions is
dropped, so choose the minimum angle small; and since p_i never
exceeds the constant-convention p_max, collisions beyond it are
dropped too, as in Constant without weak collisions (which this
variant does not support).
Trait Implementations§
Source§impl Clone for MeanFreePath
impl Clone for MeanFreePath
Source§fn clone(&self) -> MeanFreePath
fn clone(&self) -> MeanFreePath
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 MeanFreePath
Source§impl Debug for MeanFreePath
impl Debug for MeanFreePath
Source§impl PartialEq for MeanFreePath
impl PartialEq for MeanFreePath
impl StructuralPartialEq for MeanFreePath
Auto Trait Implementations§
impl Freeze for MeanFreePath
impl RefUnwindSafe for MeanFreePath
impl Send for MeanFreePath
impl Sync for MeanFreePath
impl Unpin for MeanFreePath
impl UnsafeUnpin for MeanFreePath
impl UnwindSafe for MeanFreePath
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