Truncation into minimal basis sets

Minimal basis sets of atomic orbitals are useful for many purposes, such as to formulate atomic population analyses, obtain decent initial guesses for hard self-consistent field calculations, or reducing the orbital space in a multiconfigurational calculation.

However, there is no one true “minimal basis set”, even though STO-3G or STO-6G are often used for this purpose. The minimality of the basis only refers to the number of basis functions - for instance, for oxygen the minimal basis is 2s1p - but it does not specify how well these orbitals are themselves described.

For simplicity, we will demonstrate this for a Hartree-Fock calculation on the neon atom, where symmetry breaking is not an issue. We will consider the STO-3G and STO-6G basis sets, as well as minimal basis sets extracted from the Dunning cc-pVnZ sets, which can be compared to fully numerical reference values (Lehtola, https://doi.org/10.1103/PhysRevA.101.012516).

Basis             Energy (Eh)  Error (Eh)
STO-3G          -126.60452509     1.9e+00
STO-6G          -127.77673830     7.7e-01
cc-pVDZ         -128.48877555     5.8e-02
cc-pVTZ         -128.53186164     1.5e-02
cc-pVQZ         -128.54346966     3.6e-03
cc-pV5Z         -128.54677013     3.3e-04
cc-pV6Z         -128.54706110     3.7e-05

fully numerical -128.54709811

As is immediately clear from the table, STO-3G and STO-6G are quite inaccurate by modern standards, with errors in the absolute energy of around a hartree, but the error for the gas-phase atom goes down when a larger primitive expansion is used.

It is especially important to note that the minimal basis set depends on the Hamiltonian: if you employ a relativistic approximation or an effective core potential and you intend to use a minimal basis set to initialize a larger calculation, make sure first that the two approaches correspond to the same Hamiltonian.

Minimal basis sets can be generated by the removal of the free primitives in the basis set; this is implemented in the basis_set_exchange.manip.remove_free_primitives() function. Note that contracted polarization functions (e.g. in the atomic natural orbital, ANO, basis sets, or the correlation consistent sets for transition metals) will not be removed by the function, so be sure to check whether the result is what you want.