Source code for gamdpy.interactions.potential_functions.LJ_12_6_sigma_epsilon
import numpy as np
import numba
import math
from numba import cuda
[docs]
def LJ_12_6_sigma_epsilon(dist, params):
""" The 12-6 Lennard-Jones potential
.. math::
u(r) = 4\\epsilon( (r/\\sigma)^{-12} - (r/\\sigma)^{-6} )
This is the same as the :func:`gamdpy.LJ_12_6` potential,
but with :math:`\\sigma` (sigma) and :math:`\\epsilon` (epsilon) as parameters.
Parameters
----------
dist : float
Distance between particles
params : array-like
σ, ε
""" # LJ: U(r) = 4*epsilon( (r/sigma)**-12 + (r/sigma)**-6 )
sigma = params[0] # Um(r) = -24*epsilon( 2*(r/sigma)**-13 + (r/sigma)**-7 )/sigma
epsilon = params[1] # Umm(r) = 24*epsilon(26*(r/sigma)**-14 + 7*(r/sigma)**-8 )/sigma**2
OneOdist = numba.float32(
1.0) / dist # s = -Um/r = 24*epsilon( 2*(r/sigma)**-14 + (r/sigma)**-8 )/sigma**2, Fx = s*dx
sigmaOdist = sigma * OneOdist
u = numba.float32(4.0) * epsilon * (sigmaOdist ** 12 - sigmaOdist ** 6)
s = numba.float32(24.0) * epsilon * (numba.float32(2.0) * sigmaOdist ** 12 - sigmaOdist ** 6) * OneOdist ** 2
umm = numba.float32(24.0) * epsilon * (
numba.float32(26.0) * sigmaOdist ** 12 - numba.float32(7.0) * sigmaOdist ** 6) * OneOdist ** 2
return u, s, umm # U(r), s == -U'(r)/r, U''(r)