Coverage for gamdpy/interactions/potential_functions/make_LJ_m_n.py: 100%
6 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 numpy as np
2import numba
3import math
4from numba import cuda
6def make_LJ_m_n(m: float, n: float) -> callable:
7 """ Mie Potential
9 Also known as the generalized Lennard-Jones potential:
11 .. math::
13 u(r) = A_m r^{-m} - A_n r^{-n}
15 Returns
16 -------
18 potential_function : callable
19 A function that calculates the Mie potential,
20 u, s, umm = potential_function(dist, params).
21 where params = [A_m, A_n]
22 """
24 def LJ_m_n(dist, params): # pragma: no cover
25 # U(r) = Am*r**-m + An*r**-n
26 # Um(r) = -m*Am*r**-(m+1) - n*An*r**-(n+1)
27 # Umm(r) = (m+1)*m*Am*r**-(m+2) + (n+1)*n*An*r**-(n+2)
28 Am = params[0]
29 An = params[1]
30 invDist = numba.float32(1.0) / dist # s = -Um/r = m*Am*r**-(m+2) + n*An*r**-(n+2), Fx = s*dx
32 u = (Am * invDist ** m + An * invDist ** n)
33 s = numba.float32(m) * Am * invDist ** (m + 2) + numba.float32(n) * An * invDist ** (n + 2)
34 umm = numba.float32(m * (m + 1)) * Am * invDist ** (m + 2) + numba.float32(n * (n + 1)) * An * invDist ** (
35 n + 2)
36 return u, s, umm # U(r), s == -U'(r)/r, U''(r)
38 return LJ_m_n