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.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.