Coverage for gamdpy/interactions/potential_functions/hertzian.py: 100%
13 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
1import numba
3def hertzian(dist, params):
4 """ Hertzian potential
6 .. math::
8 u(r) = \\epsilon(1-r/\\sigma)^\\alpha
10 for :math:`r<\\sigma` and zero otherwise.
11 Parameters: ε=epsilon, α=alpha, σ=cut.
12 Note that this potential is naturally truncated at r=σ.
13 For Hertzian disks chose α=7/2, and for Hertzian spheres chose α=5/2
15 Parameters
16 ----------
18 dist : float
19 Distance between particles
21 params : array-like
22 ε, α, σ
24 """
26 eps = numba.float32(params[0])
27 alpha = numba.float32(params[1])
28 sigma = numba.float32(params[2])
29 inv_sigma = numba.float32(1.0/sigma) # 1/σ
30 one = numba.float32(1.0)
31 two = numba.float32(2.0)
33 delta = one - dist * inv_sigma # 1 - r/σ
34 u = eps * delta ** alpha # ε (1 - r/σ)^α
35 s = eps * alpha * delta ** (alpha - one) * inv_sigma / dist # s(r) = -u'(r)/r
36 d2u_dr2 = eps * alpha * (alpha - one) * delta ** (alpha - two) * inv_sigma * inv_sigma # u''(r)
38 return u, s, d2u_dr2