Electronic structure calculations with GPAW Jussi Enkovaara CSC IT Center for Science, Finland
Basics of density-functional theory
Density-functional theory Many-body Schrödinger equation Can be solved analytically for one electron Storing 8 electron wavefunction in 6x6x6 cartesian grid requires ~1010 GB! Hohenberg and Kohn (1965): use electron density as basic quantity
Hohenberg-Kohn theorems Ground state properties of many-electron system are unique functionals of the the ground state density n(r) The ground state density minimizes the total energy functional Vext(r) n(r) Ψ(r1,...,rN)
Energy functional The energy functional can be written as where Approximations are contained in the exchange-correlation energy Exc
Kohn-Sham equations Minimizing the energy functional with respect to single particle orbitals gives: Non-linear single particle equations with multiplicative potential vs(r)
Self-consistent cycle
Notes on Kohn-Sham approach KS approach is in principle exact Everything unknown is put in into presumably small exchange-correlation energy/potential A set of single-particle equations is used instead of many-body wave function Strictly, KS eigenvalues and eigenvectors have no physical meaning Often used as approximation to real electronic states
Limitations of DFT Approximations to exchange-correlation limit the accuracy Only ground state properties DFT can be used as starting point to Green function based many-body e.g. GW for studying excitations Time-dependent density-functional theory provides access also to excited state properties
Overview of GPAW
GPAW Density-functional theory and time-dependent DFT Utilizes the projector augmented wave method Various basis sets: Uniform real-space grids, atomic orbitals, plane waves Massively parallelized Open source software licensed under GPL wiki.fysik.dtu.dk/gpaw J. J. Mortensen et al., Phys. Rev. B 71, 035109 (2005) J. Enkovaara et al., J. Phys. Condens. Matter 22, 253202 (2010)
GPAW features Total energies and forces, structural optimization, magnetic moments Analysis of electronic structure Band structures, density of states Wide range of XC functionals Excited state properties TD-DFT, GW, Bethe-Salpeter Electron transport, X-ray spectra, STM images,...
Real-space grids Wave functions, electron densities, and potentials are represented on grids. Single parameter, grid spacing h h Accuracy of calculation can be improved systematically Derivatives by finite differences
Atomic orbital basis Linear combination of atomic orbitals (LCAO) provide compact basis set The atomic orbitals are obtained from a free atom in a confining potential well Systematic improvement of accuracy is non-trivial Possible to switch between localized basis and real-space grids
Plane wave basis Functions which are periodic with respect to unit cell can be written as sum of plane waves The expansion is truncated according to Only periodic cells (supercells)
Comparison of basis sets Real-space grids systematic convergence with single parameter good parallelization prospects some integrals complicated in real-space Localized basis set compact basis systematic convergence can be difficult Plane waves systematic convergence with single parameter some integrals simplified in reciprocal space very efficient in small to medium size systems parallelization more limited due FFTs
Geometry optimization of CO molecule
Atomic Simulation Environment ASE is a Python package for building atomic structures structure optimization and molecular dynamics analysis and visualization ASE relies on external software which provides total energies, forces, etc. ASE atomic positions GPAW, Dacapo, Siesta Input files are Python scripts calculations are run as python input.py simple format, no knowledge of Python required knowledge of Python enables great flexibility Simple graphical user interface energies, forces, wfs, densities Calculator wiki.fysik.dtu.dk/ase
relax.py: from from from from ase import Atoms ase.io import write ase.optimize import QuasiNewton gpaw import GPAW d = 1.10 # Starting guess for the bond length atoms = Atoms('CO', positions=((0, 0, 0), (0, 0, d)), pbc=false) atoms.center(vacuum=4.0) write('co.cif', atoms) calc = GPAW(h=0.20, xc='pbe', txt='co_relax.txt') atoms.set_calculator(calc) relax = QuasiNewton(atoms, trajectory='co.traj', logfile='qn.log') relax.run(fmax=0.05)
wiki.fysik.dtu.dk/gpaw wiki.fysik.dtu.dk/ase