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")