Localized orbitals#
Modules: pyscf.lo
Introduction#
A molecular orbital is usually delocalized, i.e. it has non-negligible amplitude over the whole system rather than only around some atom(s) or bond(s).
However, one can choose a unitary rotation
such that the resulting
orbitals
Boys localized orbitals [70] in periodic systems are typically termed maximally localized Wannier orbitals (MLWF) [71].
Pipek-Mezey (PM) localization [72] maximizes the population charges on the atoms
Note that PM localization depends on the choice of atomic orbitals used for
the population analysis. Several choices of populations are available, e.g.
Mulliken or based on (meta-) L"owdin orbitals.
Intrinsic bond orbitals (IBOs) can be viewed as a special case of PM
localization using intrinsic atomic orbitals (IAOs) as population method.
See Ref. [73] for a summary of choices of orbitals.
Note that PM localization preserves the separation between
Edmiston-Ruedenberg (ER) localization [74] maximizes the orbital Coulomb self-repulsion,
ER localization, however, is computationally more expensive than the Boys or PM approaches.
Localized orbitals can be calculated via the pivoted Cholesky factorization of a density-like
matrix
where
A summary of the functionality of the lo
module is given below:
Method |
optimization |
cost function |
PBC |
ref |
(meta-) L"owdin |
No |
yes |
||
Natural atomic orbitals |
No |
gamma |
[78] |
|
Intrinsic atomic orbitals |
No |
yes |
[79] |
|
Cholesky orbitals |
No |
no |
[75] |
|
Boys |
yes |
dipole |
no |
[70] |
Pipek-Mezey |
yes |
local charges |
gamma |
[72] |
Intrinsic bond orbitals |
yes |
IAO charges |
gamma |
[79] |
Edmiston-Ruedenberg |
yes |
coulomb integral |
gamma |
[74] |
For example, to obtain the natural atomic orbital coefficients (in terms of the original atomic orbitals):
import numpy
from pyscf import gto, scf, lo
x = .63
mol = gto.M(atom=[['C', (0, 0, 0)],
['H', (x , x, x)],
['H', (-x, -x, x)],
['H', (-x, x, -x)],
['H', ( x, -x, -x)]],
basis='ccpvtz')
mf = scf.RHF(mol).run()
# C matrix stores the AO to localized orbital coefficients
C = lo.orth_ao(mf, 'nao')