Source code for gamdpy.interactions.potential_functions.harmonic_repulsion
import numba
[docs]
def harmonic_repulsion(dist, params):
""" The harmonic repulsion pair potential
.. math::
u(r) = ½\\epsilon(1-r/\\sigma)^2
for :math:`r<\\sigma` and zero otherwise.
Parameters: ε=epsilon, σ=cut.
Note that this potential is naturally truncated at r=σ.
Parameters
----------
dist : float
Distance between particles
params : array-like
ε, σ
"""
eps = numba.float32(params[0])
sigma = numba.float32(params[1])
inv_sigma = numba.float32(1.0/sigma) # 1/σ
one = numba.float32(1.0)
one_half = numba.float32(1.0/2.0)
delta = one - dist * inv_sigma # 1 - r/σ
u = one_half * eps * delta * delta # ½ ε (1 - r/σ)²
s = eps * delta * inv_sigma / dist # s(r) = -u'(r)/r
d2u_dr2 = eps * inv_sigma * inv_sigma # u''(r)
return u, s, d2u_dr2