This is a Python package to simulate Scanning Tunnelling Microscopy (STM) data under the Tersoff-Hamann approximation from the Conquest [1] code for Density Functional Theory (DFT) calculations.
STM is a vital tool in topographical and electronic studies of conducting and semi-conducting surfaces. The quantum tunnelling process that allows an STM to operate is not always straightforward. This often necessitates simulated images to aid in interpreting experimental data.
An important simulation technique is DFT - a computational method to calculate the electron density around atoms. Whilst a very successful method in simulations of condensed matter, it has some drawbacks, one of which is its scaling with system size, which goes as . This limits systems of interest to roughly 1000 atoms even on high-performance computing systems.
This bottleneck is due to finding the Kohn-Sham eigenstates by diagonalising the Hamiltonian, or by variational minimisation of the energy and constraining the states to be orthogonal. By representing the wavefunction by pseudo-atomic orbitals (PAO) - orbitals localised around each atomic nucleus, rather than, say, plane waves - and solving for the density matrix, linear scaling is possible for DFT. Such a method is used in Conquest [1], a linear-scaling DFT code developed jointly by University College London (UCL) in the United Kingdom and the National Institute for Materials Science (NIMS) in Japan. This allows for systems of up to a million atoms to be accurately studied [2].
The Tersoff-Hamann approximation for calculating an STM current [3] does not explicitly include the atoms of the STM tip. Rather, only the wavefunction of the sample atoms at the position of the tip is required. This is not an issue for wavefunctions represented by plane waves, which can be accurate throughout the simulation cell. However, for PAOs which are only accurate around the sample atoms, this poses a problem for simulating STM data. A solution to this [4] is to evaluate the Bardeen integral [5] on a surface close to the sample atoms and propagate the wavefunctions up to the tip.
Please note that atomic units are used for simplicity as well as consistency with CONQUEST.
As shown by Bardeen, the tunnelling current (what we want to simulate) is given by
This sum is performed over the tip, , and sample, , states with energies , that lie in the bias voltage energy window, . That is, (or the appropriate inequality for a negative ) for the sample Fermi Level, .
The Bardeen integral is
where and are the tip and sample wavefunctions respectively, and is ANY surface in the vacuum region between them. The method of Paz and Soler involves evaluating this integral close to the sample atoms, as it is that becomes less accurate at larger distances. This wavefunction is calculated by CONQUEST during a simulation and is thus an input to this program (or rather the basis sets and coefficients are). The tip state must be determined by this program.
Explicit simulation of the atoms that constitute the STM probe tip is costly. Qualitative agreement with experiment can usually be achieved through the Tersoff-Hamann approximation. Representing the tip as a Dirac delta peak at and solving the Schrödinger equation yields a Green's function that represents a spherical s-wave tip state:
where the decay constant,
is given by the work function of the sample, .
Substitution of with yields a simple expression for the Bardeen integral as a function of the tip position:
where now represents the sample wavefunction of the state with energy .
Before can be substituted into our equation for we must take care of the Dirac delta in to get a computable expression. This delta function describes elastic tunnelling of the electrons from discrete states of exact equal energy. In a real system, thermal broadening of the states turns these discrete peaks into a continuous function. Furthermore, for a positive bias voltage, , electrons will tunnel from the sample to the tip. We can thus replace the delta function with the Fermi-Dirac occupation factor, , where
is Boltzmann's constant, and is the temperature of the sample. For the case of , it is unoccupied states in the sample that are tunnelled into by electrons in the tip, leading to the factor instead.
The tunnelling current at a given tip position is thus
Thus, the tunnelling current may be obtained from the sample wavefunction, .
An example script, example.py
is included that shows the steps required from getting from Conquest output files to an STM image.
This project is written in Python 2.7. numpy
, matplotlib
, and skimage
are required packages.
This project is licensed under the MIT License - see the LICENSE.md file for details
- http://www.order-n.org
- D. R. Bowler and T. Miyazaki, J. Phys. Cond. Matter, 22, 7, 074207 (2010)
- J. Tersoff and D. R. Hamann, Phys. Rev. Lett., 50, 1998-2001 (1983)
- O. Paz and J. M. Soler, Phys. Stat. Sol. B, 5, 1080-1094 (2005)
- J. Bardeen, Phys. Rev. Lett., 6, 57-59 (1961)
- Prof. David Bowler, University College London, London Centre for Nanotechnology, for supervising this Master's project.
The equations in this document were compiled with readme2tex
from the repository https://github.com/leegao/readme2tex.