Coverage for gamdpy/interactions/potential_functions/harmonic_repulsion.py: 17%

12 statements  

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

1import numba 

2 

3def harmonic_repulsion(dist, params): 

4 """ The harmonic repulsion pair potential 

5 

6 .. math:: 

7 

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

9 

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

11 Parameters: ε=epsilon, σ=cut. 

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

13 

14 Parameters 

15 ---------- 

16 

17 dist : float 

18 Distance between particles 

19 

20 params : array-like 

21 ε, σ 

22 

23 """ 

24 

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

26 sigma = numba.float32(params[1]) 

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

28 one = numba.float32(1.0) 

29 one_half = numba.float32(1.0/2.0) 

30 

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

32 u = one_half * eps * delta * delta # ½ ε (1 - r/σ)² 

33 s = eps * delta * inv_sigma / dist # s(r) = -u'(r)/r 

34 d2u_dr2 = eps * inv_sigma * inv_sigma # u''(r) 

35 

36 return u, s, d2u_dr2