Coverage for gamdpy/interactions/potential_functions/LJ_12_6.py: 100%
9 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 LJ_12_6(dist, params):
4 """ The 12-6 Lennard-Jones potential
6 See :func:`gamdpy.apply_shifted_potential_cutoff` for a usage example.
8 .. math::
10 u(r) = A_{12} r^{-12} + A_6 r^{-6}
12 u'(r) = -12*A_{12} r^{-13} - 6*A_6 r^{-7}
14 Parameters
15 ----------
17 dist : float
18 Distance between particles
20 params : array-like
21 A₁₂, A₆
23 Returns
24 -------
26 u : float
27 Potential energy
28 s : float
29 Force multiplier, -u'(r)/r
30 umm : float
31 Second derivative of potential energy
33 """
34 A12 = params[0] # Um(r) = -12*A12*r**-13 - 6*A6*r**-7
35 A6 = params[1] # Umm(r) = 13*12*A12*r**-14 + 7*6*A6*r**-8
36 invDist = numba.float32(1.0) / dist # s = -Um/r = 12*A12*r**-14 + 6*A6*r**-8, Fx = s*dx
38 u = A12 * invDist ** 12 + A6 * invDist ** 6
39 s = numba.float32(12.0) * A12 * invDist ** 14 + numba.float32(6.0) * A6 * invDist ** 8
40 umm = numba.float32(156.0) * A12 * invDist ** 14 + numba.float32(42.0) * A6 * invDist ** 8
41 return u, s, umm # U(r), s == -U'(r)/r, U''(r)