I am trying to work with the STO-3G basis set, but I noticed that the STO-3G in Basis set exchange is different from the STO-3G originally published, and not only that, the BSE version seem to be significantly worse. I am sure I am doing something wrong, can anyone please point out? (original references are provided in the python script)

Here are the plotted STO-3G functions and python script for plotting the analytical H1S and STO-3G functions:

Pople vs BSE

import numpy as np
import matplotlib.pyplot as plt

# https://www.basissetexchange.org/basis/sto-3g/format/nwchem/?version=1&elements=1
# BASIS "ao basis" PRINT
# #BASIS SET: (3s) -> [1s]
# H    S
#       0.3425250914E+01       0.1543289673E+00
#       0.6239137298E+00       0.5353281423E+00
#       0.1688554040E+00       0.4446345422E+00
# ------------------------------------------------------------------
def STO3G_BSE(x0,x):
    return \
        0.1543289673E+00 * (2 * 0.3425250914E+01/ np.pi)**(3/4) * \
        np.exp(-0.3425250914E+01*(x0 - x)**2) + \
        0.5353281423E+00 * (2 * 0.6239137298E+00/ np.pi)**(3/4) * \
        np.exp(-0.6239137298E+00*(x0 - x)**2) + \
        0.4446345422E+00 * (2 * 0.1688554040E+00/ np.pi)**(3/4) * \
        np.exp(-0.1688554040E+00*(x0 - x)**2) 

# Pople, Hehre and Stewart STO-3G 1S
# Hehre, W. J., Stewart, R. F., & Pople, J. A. (1969). 
# Self‐Consistent Molecular‐Orbital Methods. I. Use of Gaussian Expansions of Slater‐Type Atomic Orbitals. 
# The Journal of Chemical Physics, 51(6), 2657–2664. doi:10.1063/1.1672392 
# Table 1

def STO3G_PHS(x0,x):
    return \
        0.1543289673E+00 * (2 * 2.227660/ np.pi)**(3/4) * \
        np.exp(-2.227660*(x0 - x)**2) + \
        0.5353281423E+00 * (2 * 0.405771/ np.pi)**(3/4) * \
        np.exp(-0.405771*(x0 - x)**2) + \
        0.4446345422E+00 * (2 * 0.109818/ np.pi)**(3/4) * \
        np.exp(-0.109818*(x0 - x)**2) 

# 1H 1S
plt.plot(np.linspace(0,10),1/np.sqrt(np.pi) * np.exp(- np.linspace(0,10)), label="1S")

# STO3G from BSE
plt.plot(np.linspace(0,10),STO3G_BSE(0., np.linspace(0,10)), label="BSE")

# STO3G from the Pople paper
plt.plot(np.linspace(0,10),STO3G_PHS(0., np.linspace(0,10)), label="Pople et al.")

plt.xlabel("r [a.u.]")


1 Answer 1


Your formula for the analytical $\ce{H}$ 1S orbital is incorrect. A 1S orbital has the form $$\phi_{1s}(\zeta_1,r)=\sqrt{\frac{\zeta_1^3}{\pi}}\exp(-\zeta_1 r)$$

For $\ce{H}$ the optimal value for $\zeta_1$ is $1.24$. If you update your plot in this way, you will see that the BSE plot is the correct one for $\ce{H}$.

So what is wrong with the coefficients from the Pople paper? Nothing, except that these are all determined for $\zeta_1=1$ and the Gaussians need to be rescaled if $\zeta_1$ is changed. This can be done using

$$\phi_{1s}(\zeta_1,r)=\zeta_1^{3/2}\phi_{1s}(1,\zeta r)$$

So to get your PHS graph to match the others, you need to multiply each Gaussian by $1.24^{3/2}=1.380805$ and multiply the exponent by a factor of $1.24^2=1.5376$. If you compare the BSE and PHS specifications of the basis set, you can see that the exponents are different by a factor of $1.5376$.

To sum up, the issue is that the Pople values aren't specifically for $\ce{H}$ 1s STO-3g; rather they are for any element's 1s STO-3g, provided that they are appropriately rescaled by the optimal $\zeta_1$ value for that element.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .