Coverage for gamdpy/interactions/potential_functions/hertzian.py: 15%

13 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2025-06-14 15:25 +0200

1import numba 

2 

3def hertzian(dist, params): 

4 """ Hertzian potential 

5 

6 .. math:: 

7 

8 u(r) = \\epsilon(1-r/\\sigma)^\\alpha 

9 

10 for :math:`r<\\sigma` and zero otherwise. 

11 Parameters: ε=epsilon, α=alpha, σ=cut. 

12 Note that this potential is naturally truncated at r=σ. 

13 For Hertzian disks chose α=7/2, and for Hertzian spheres chose α=5/2 

14 

15 Parameters 

16 ---------- 

17 

18 dist : float 

19 Distance between particles 

20 

21 params : array-like 

22 ε, α, σ 

23 

24 """ 

25 

26 eps = numba.float32(params[0]) 

27 alpha = numba.float32(params[1]) 

28 sigma = numba.float32(params[2]) 

29 inv_sigma = numba.float32(1.0/sigma) # 1/σ 

30 one = numba.float32(1.0) 

31 two = numba.float32(2.0) 

32 

33 delta = one - dist * inv_sigma # 1 - r/σ 

34 u = eps * delta ** alpha # ε (1 - r/σ)^α 

35 s = eps * alpha * delta ** (alpha - one) * inv_sigma / dist # s(r) = -u'(r)/r 

36 d2u_dr2 = eps * alpha * (alpha - one) * delta ** (alpha - two) * inv_sigma * inv_sigma # u''(r) 

37 

38 return u, s, d2u_dr2