Periodic systems¶
Extended solid-state simulations at any level of dimensionality reduction can be performed by taking advantage of
PySCF’s periodic boundary conditions (PBC) capabilities. The inquanto-pyscf extension
has two types of drivers for periodic calculations: Gamma point drivers, for \(k=0\)
calculations, and momentum space drivers, where a \(k\)-point grid is specified.
Below, we show a Gamma point example with the ChemistryDriverPySCFGammaROHF driver
for a Pd (111) surface with a 2x2x1 slab and 20 Å of vacuum:
from pyscf.pbc import gto as pgto
from inquanto.extensions.pyscf import ChemistryDriverPySCFGammaRHF
cell_pd221=[
[5.50129075763134, 0.0, 0.0],
[2.75064537881567, 4.764257549713281, 0.0],
[0.0, 0.0, 20.0]
]
geometry_pd221=[
['Pd', [ 0., 0., 10.]],
['Pd', [ 2.75064538, 0. , 10. ]],
['Pd', [ 1.37532269, 2.38212877, 10. ]],
['Pd', [ 4.12596807, 2.38212877, 10. ]]
]
driver_pd221 = ChemistryDriverPySCFGammaRHF(
basis="lanl2dz",
ecp="lanl2dz",
geometry=geometry_pd221,
charge=0,
cell=cell_pd221,
dimension=2, # SLAB 2D PBC system
df="GDF",
output=None,
verbose=1,
exp_to_discard = 0.1
)
where we have also used Gaussian density fitting (GDF) to reduce the computational cost of operations with the
two-body electronic integrals (see here). From this point, one
may use the get_system() method as usual to
build the fermionic hamiltonian and construct the quantum problem.
Calculations with a non-trivial \(k\)-point grid proceed similarly. Below, we consider an H2 chain (1D system) with PBC and a [4,1,1] \(k\)-point grid:
from inquanto.extensions.pyscf import ChemistryDriverPySCFMomentumRHF
cell_h2 = pgto.Cell()
cell_h2.atom=[['H', [0., 5., 5.]], ['H', [0.75, 5. , 5. ]]]
cell_h2.a=[(1.875,0.,0.), (0.,10.0,0.), (0.,0.,10.0)]
driver_h2 = ChemistryDriverPySCFMomentumRHF(
basis="sto-3g",
geometry=cell_h2.atom,
charge=0,
cell=cell_h2.a,
nks=[4, 1, 1],
dimension=1, # 1D linear chain PBC system
precision=1e-15,
df="GDF",
output=None,
verbose=1,
exp_to_discard = 0.1
)
print("Hartree-Fock energy: ", driver_h2.run_hf())
Hartree-Fock energy: -1.0760400910891406
In this case, get_system() generates a special
Fock space class: FermionSpaceBrillouin, which manages the \(k\)-point quantum number
in addition to orbital and spin indices. Otherwise, construction of the quantum problem proceeds as normal.