Source code for gamdpy.interactions.potential_functions.hertzian
import numba
[docs]
def hertzian(dist, params):
""" Hertzian potential
.. math::
u(r) = \\epsilon(1-r/\\sigma)^\\alpha
for :math:`r<\\sigma` and zero otherwise.
Parameters: ε=epsilon, α=alpha, σ=cut.
Note that this potential is naturally truncated at r=σ.
For Hertzian disks chose α=7/2, and for Hertzian spheres chose α=5/2
Parameters
----------
dist : float
Distance between particles
params : array-like
ε, α, σ
"""
eps = numba.float32(params[0])
alpha = numba.float32(params[1])
sigma = numba.float32(params[2])
inv_sigma = numba.float32(1.0/sigma) # 1/σ
one = numba.float32(1.0)
two = numba.float32(2.0)
delta = one - dist * inv_sigma # 1 - r/σ
u = eps * delta ** alpha # ε (1 - r/σ)^α
s = eps * alpha * delta ** (alpha - one) * inv_sigma / dist # s(r) = -u'(r)/r
d2u_dr2 = eps * alpha * (alpha - one) * delta ** (alpha - two) * inv_sigma * inv_sigma # u''(r)
return u, s, d2u_dr2