Devon Walker
The Lennard-Jones (LJ) potential is perhaps the most commonly used potential in molecular dynamics simulations. It is used to describe the attractive and repulsive forces between two atoms.
\(\epsilon\) is a constant energy, while \(\sigma\) is a constant length, and they are both interaction-specific. We can remove these constants by using the dimensionless form of the potential.
We can calculate the energy using the dimensionless form of the LJ potential for a given distance.
Figure 1: LJ potential for several nobel gases.
import numpy as np
import matplotlib.pyplot as plt
def dim_LJ_energy(rstar):
"""Dimensionless form of the Lennard-Jones energy."""
return 4. * ((1. / rstar**(12)) - (1. / rstar**6))
# Calculate energies over a range of distances
r_s = np.linspace(0.9, 2, 200)
u_s = [dim_LJ_energy(r) for r in r_s]
# Plot
plt.plot(r_s, u_s, label="$u^*$")
plt.plot(r_s, [0]*len(r_s), 'k--')
plt.xlabel('Atom-Atom Separation, $r^*$ (Dimensionless)')
plt.ylabel('Energy, $u^*$ (Dimensionless)')
plt.legend()
plt.xlim([0.9, 2])
plt.ylim([-2, 2])
plt.savefig("./img/lj-dim.png")
We can also look at the previously determined parameters and calculate the non-dimensionless form of the LJ potential.
Compound | \(\epsilon/k_B\) [K] | \(\sigma\) [\(10^{-12}\) m] |
---|---|---|
Ne | 35.60 | 274.9 |
Ar | 119.8 | 340.5 |
Kr | 171.0 | 360.0 |
Xe | 221.0 | 410.0 |
We pull the data from the previous table directly into our code and then calculate the potential for each noble gas.
Figure 2: LJ potential for several nobel gases.
import numpy as np
import matplotlib.pyplot as plt
from scipy.constants import Boltzmann as kb
def LJ_energy(r, eps, sigma):
"""Lennard-Jones energy."""
return 4. * eps * ((sigma / r)**(12) - (sigma / r)**6)
### Select a row from the previous table
for row in table:
# Parse table row
compound = row[0]
eps = row[1] * kb
sigma = row[2] * 10**(-12)
# Calculate energies over a range of distances
r_s = np.linspace(1e-10, 7.5e-10, 200)
u_s = [LJ_energy(r, eps, sigma) for r in r_s]
# Plot
plt.plot(r_s, u_s, label=compound)
plt.plot(r_s, [0]*len(r_s), 'k--')
plt.xlabel('Atom-Atom Separation, $r$ (m)')
plt.ylabel('Energy, $u$ (J)')
plt.legend()
plt.xlim([2e-10, 7.5e-10])
plt.ylim([-0.35e-20, 0.2e-20])
plt.savefig("./img/lj.png")