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

1import numba 

2 

3def LJ_12_6(dist, params): 

4 """ The 12-6 Lennard-Jones potential 

5 

6 See :func:`gamdpy.apply_shifted_potential_cutoff` for a usage example. 

7 

8 .. math:: 

9 

10 u(r) = A_{12} r^{-12} + A_6 r^{-6} 

11  

12 u'(r) = -12*A_{12} r^{-13} - 6*A_6 r^{-7} 

13 

14 Parameters 

15 ---------- 

16 

17 dist : float 

18 Distance between particles 

19 

20 params : array-like 

21 A₁₂, A₆ 

22 

23 Returns 

24 ------- 

25 

26 u : float 

27 Potential energy 

28 s : float 

29 Force multiplier, -u'(r)/r 

30 umm : float 

31 Second derivative of potential energy 

32 

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 

37 

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) 

42