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

1import numpy as np 

2import numba 

3import math 

4from numba import cuda 

5 

6def make_LJ_m_n(m: float, n: float) -> callable: 

7 """ Mie Potential 

8 

9 Also known as the generalized Lennard-Jones potential: 

10 

11 .. math:: 

12 

13 u(r) = A_m r^{-m} - A_n r^{-n} 

14 

15 Returns 

16 ------- 

17 

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 """ 

23 

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 

31 

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) 

37 

38 return LJ_m_n 

39