pub struct Buckingham;Expand description
Buckingham (Exponential-6) potential for Van der Waals interactions.
§Physics
Models short-range repulsion exponentially and long-range attraction with an $r^{-6}$ term, providing a more physically accurate repulsion wall than Lennard-Jones.
- Formula: $$ E = D_0 \left[ \frac{6}{\zeta-6} \exp\left(\zeta(1 - \frac{r}{R_0})\right) - \frac{\zeta}{\zeta-6} \left(\frac{R_0}{r}\right)^6 \right] $$
- Derivative Factor (
diff): $$ D = -\frac{1}{r} \frac{dE}{dr} = \frac{6\zeta D_0}{r(\zeta-6)R_0} \left[ \exp\left(\zeta(1 - \frac{r}{R_0})\right) - \left(\frac{R_0}{r}\right)^7 \right] $$
§Parameters
For computational efficiency, the physical parameters ($D_0, R_0, \zeta$) are pre-computed into the standard Buckingham form ($A, B, C$):
a: The repulsion pre-factor $A = \frac{6 D_0}{\zeta-6} e^{\zeta}$.b: The repulsion decay constant $B = \zeta / R_0$.c: The attraction pre-factor $C = \frac{\zeta D_0 R_0^6}{\zeta-6}$.r_fusion_sq: The squared distance threshold for regularization.
§Inputs
r_sq: Squared distance $r^2$ between two atoms.
§Implementation Notes
- The kernel operates on the computationally efficient $A, B, C$ form.
- A branchless regularization is applied for $r^2 < r_{fusion}^2$ using a mathematical mask to prevent energy collapse at very short distances, ensuring numerical stability.
- Requires one
sqrtand oneexpcall, making it computationally more demanding than LJ. - Power chain
inv_r2 -> inv_r6 -> inv_r8is used for the attractive term.
Trait Implementations§
Source§impl Clone for Buckingham
impl Clone for Buckingham
Source§fn clone(&self) -> Buckingham
fn clone(&self) -> Buckingham
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for Buckingham
impl Debug for Buckingham
Source§impl Default for Buckingham
impl Default for Buckingham
Source§fn default() -> Buckingham
fn default() -> Buckingham
Returns the “default value” for a type. Read more
Source§impl<T: Real> PairKernel<T> for Buckingham
impl<T: Real> PairKernel<T> for Buckingham
Source§fn diff(r_sq: T, (a, b, c, r_fusion_sq): Self::Params) -> T
fn diff(r_sq: T, (a, b, c, r_fusion_sq): Self::Params) -> T
Computes only the force pre-factor $D$.
§Formula
$$ D = \frac{A B e^{-B r}}{r} - \frac{6 C}{r^8} $$
This factor is defined such that the force vector can be computed by a single vector multiplication: $\vec{F} = -D \cdot \vec{r}$.
Source§fn compute(r_sq: T, (a, b, c, r_fusion_sq): Self::Params) -> EnergyDiff<T>
fn compute(r_sq: T, (a, b, c, r_fusion_sq): Self::Params) -> EnergyDiff<T>
Computes both energy and force pre-factor efficiently.
This method reuses intermediate calculations to minimize operations.
Source§type Params = (T, T, T, T)
type Params = (T, T, T, T)
Associated constants/parameters required by the potential (e.g., $k, r_0$).
impl Copy for Buckingham
Auto Trait Implementations§
impl Freeze for Buckingham
impl RefUnwindSafe for Buckingham
impl Send for Buckingham
impl Sync for Buckingham
impl Unpin for Buckingham
impl UnwindSafe for Buckingham
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
Mutably borrows from an owned value. Read more