Coverage for gamdpy/interactions/potential_functions/harmonic_repulsion.py: 17%
12 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-06-14 15:25 +0200
« prev ^ index » next coverage.py v7.4.4, created at 2025-06-14 15:25 +0200
1import numba
3def harmonic_repulsion(dist, params):
4 """ The harmonic repulsion pair potential
6 .. math::
8 u(r) = ½\\epsilon(1-r/\\sigma)^2
10 for :math:`r<\\sigma` and zero otherwise.
11 Parameters: ε=epsilon, σ=cut.
12 Note that this potential is naturally truncated at r=σ.
14 Parameters
15 ----------
17 dist : float
18 Distance between particles
20 params : array-like
21 ε, σ
23 """
25 eps = numba.float32(params[0])
26 sigma = numba.float32(params[1])
27 inv_sigma = numba.float32(1.0/sigma) # 1/σ
28 one = numba.float32(1.0)
29 one_half = numba.float32(1.0/2.0)
31 delta = one - dist * inv_sigma # 1 - r/σ
32 u = one_half * eps * delta * delta # ½ ε (1 - r/σ)²
33 s = eps * delta * inv_sigma / dist # s(r) = -u'(r)/r
34 d2u_dr2 = eps * inv_sigma * inv_sigma # u''(r)
36 return u, s, d2u_dr2