Source code for gamdpy.interactions.potential_functions.gaussian_core_model
import numba
from math import exp
[docs]
def gaussian_core_model(dist, params):
r""" Gaussian-core model (GCM) [Stillinger1976]_
.. math::
u(r) = \varepsilon \exp(-r^2/\sigma^2)
Parameters
----------
dist : float
Distance between particles
params : array-like
[sigma, epsilon]
References
----------
.. [Stillinger1976] Frank H. Stillinger, "Phase transitions in the Gaussian core system", J. Chem. Phys. 65, 3968–3974 (1976), https://doi.org/10.1063/1.432891
"""
# Extract parameters
sigma = numba.float32(params[0]) # σ
epsilon = numba.float32(params[1]) # ɛ
# Helper variables
one = numba.float32(1.0) # 1
two = numba.float32(2.0) # 2
four = numba.float32(4.0) # 4
kappa = one/sigma/sigma # κ = 1/σ²
kappa_dist2 = kappa * dist * dist
gcm = epsilon * exp(-kappa_dist2) # ɛ·exp(-κ·r²)
# u(r) = ɛ·exp(-κ·r²)
u = gcm
# -u'(r)/r = ɛ·exp(-κ·r²)·2κ
s = gcm * two * kappa
# u''(r) = ɛ·exp(-κ·r²)·(4κ²r²-2κ)
d2u_dr2 = gcm * (four * kappa * kappa_dist2 - two * kappa)
return u, s, d2u_dr2