pub struct UmbrellaInversion;Expand description
Umbrella inversion potential for sp³ centers.
§Physics
Models a specific pyramidal geometry for sp³ hybridized atoms (e.g., amines, phosphines). The central atom $I$ is bonded to three neighbors $J, K, L$, and the potential penalizes deviations from the target out-of-plane angle $\psi_0$.
- Formula: $$ E = \frac{1}{2} C (\cos\psi - \cos\psi_0)^2 $$
- Derivative Factor (
diff): $$ \Gamma = \frac{dE}{d(\cos\psi)} = C (\cos\psi - \cos\psi_0) $$
§Parameters
c_half: Half force constant $C_{half} = C/2$.cos_psi0: Cosine of equilibrium angle $\cos_{\psi,0} \neq 0$.
§Pre-computation
Use UmbrellaInversion::precompute to convert physical constants into optimized parameters:
$(C, \psi_0°) \to (C/2, \cos_{\psi,0})$.
§Inputs
cos_psi: Cosine of the out-of-plane angle $\psi$.
§Implementation Notes
- Pure polynomial evaluation; no trigonometric functions required.
- All intermediate calculations are shared between energy and force computations.
- Branchless and panic-free.
- DREIDING convention: force constant $C = K_{inv}/3$ (split among three permutations).
Implementations§
Source§impl UmbrellaInversion
impl UmbrellaInversion
Sourcepub fn precompute<T: Real>(c: T, psi0_deg: T) -> (T, T)
pub fn precompute<T: Real>(c: T, psi0_deg: T) -> (T, T)
Pre-computes optimized kernel parameters from physical constants.
§Input
c: Force constant $C$.psi0_deg: Equilibrium out-of-plane angle $\psi_0$ in degrees.
§Output
Returns (c_half, cos_psi0):
c_half: Half force constant $C/2$.cos_psi0: Cosine of equilibrium angle $\cos_{\psi,0}$.
§Computation
$$ C_{half} = C / 2, \quad \cos_{\psi,0} = \cos(\psi_0 \cdot \pi / 180) $$
Trait Implementations§
Source§impl<T: Real> AngleKernel<T> for UmbrellaInversion
impl<T: Real> AngleKernel<T> for UmbrellaInversion
Source§fn diff(cos_psi: T, (c_half, cos_psi0): Self::Params) -> T
fn diff(cos_psi: T, (c_half, cos_psi0): Self::Params) -> T
Computes only the derivative factor $\Gamma$.
§Formula
$$ \Gamma = 2 C_{half} (\cos\psi - \cos_{\psi,0}) $$
This factor allows computing forces via the chain rule: $$ \vec{F} = -\Gamma \cdot \nabla (\cos\psi) $$
Source§fn compute(cos_psi: T, (c_half, cos_psi0): Self::Params) -> EnergyDiff<T>
fn compute(cos_psi: T, (c_half, cos_psi0): Self::Params) -> EnergyDiff<T>
Computes both energy and derivative factor efficiently.
This method reuses intermediate calculations to minimize operations.
Source§impl Clone for UmbrellaInversion
impl Clone for UmbrellaInversion
Source§fn clone(&self) -> UmbrellaInversion
fn clone(&self) -> UmbrellaInversion
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more