This is a code to calculate ARPES spectra for slabs with an accumulation or a depletion surface layer. The calculation proceeds in two steps:
- The Poisson and the Schrödinger equations are solved self-consistently
to obtain eigen-pairs {
En
,ψn(z)
}. - ARPES spectra are then calculated using a Fourier transform of
ψn(z)
, followed by a convolution with normal distributions to account for instrumental broadening.
1D finite elements (esf
library)
are used to discretize the Poisson and the Schrödinger equations.
The Intel MKL library is used to solve linear systems, generalized eigenvalue
system, compute Fourier transforms and convolution. The mathematical details
can be found in this PDF file.
The results are exported into Matlab/Octave MAT-files and Gnuplot binary matrix files.
All images below are presented for exposition only, no attempt has been made here to fit any experimental data.
Depletion layer (no bound states):
Accumulation layer with one bound state:
Accumulation layer with two bound states:
Set MKLROOT
environment variable to point to the MKL installation directory,
and be sure that your CMake version is >= 3.13. Then:
git clone --recursive https://github.com/eugnsp/surface_arpes.git
cd surface_arpes
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=RELEASE .. && make
to build the tool.
C++17 compiler is required. Tested with GCC 8.3.0 and Clang 7.0.
./arpes [file]
./arpes ../example/accum1.txt
./arpes < ../example/accum1.txt
where file
is the text file with simulation parameters (see examples in
the example
directory). The standard input is used to read parameters
if no file
is specified.
You can run arpes
via a shell script
echo '#!./arpes' > accum1.sh
cat ../example/accum1.txt >> accum1.sh
chmod 755 accum1.sh
./accum1.sh
The following output files are produced:
-
poisson_cl.mat
andpoisson_q.mat
The Matlab files that contain the following variables:
vertices
– mesh pointszi
[nm],ec
–Ec(zi)
at mesh points [eV],f
– the Fermi level [eV],n
– the total charge densityn(zi+1/2)
at edge mid-points [eV].
poisson_cl.mat
corresponds to the solution obtained using the quasi-classical Thomas–Fermi approximation,poisson_q.mat
corresponds to the solution obtained using the Schrödinger equation. The former one is used as an initial guess for the Poisson–Schrödinger iterative solver. -
schrod.mat
The Matlab file that contains the solution of the Scrödinger equation obtained at the last iteration:
en
– the eigen-energiesEn
,psi
– the eigen-functionsψn(zi)
.
-
arpes.mat
The Matlab file that contains the calculation parameters and ARPES spectra. The variables are:
arpes_e_kz
– the(E, kz)
spectrum,arpes_kx_e
– the(kx, E)
spectrum,arpes_kx_kz
– the(kx, kz)
spectrum,e_min
,e_max
– the energy rangeEmin ≤ E ≤ Emax
[eV],kx_max
– the momentum range-kx max ≤ kx ≤ kx max
[Å-1],kz_max
– the momentum range-kz max ≤ kz ≤ kz max
[Å-1],mfp
– electron mean-free pathλ
[nm],sigma_e_inst
– the instrumental broadeningδAE
[eV],sigma_kx_inst
– the instrumental broadeningδAk
[Å-1],gamma_disorder
– the disorder broadeningδDE
[eV].
-
arpes_e_kz.dat
,arpes_kx_e.dat
,arpes_kx_kz.dat
The binary files that contain ARPES spectra for visualization using Gnuplot, see shell scripts in the
plot
directory. The figures above were generated using theplot/plot_all.sh
shell script.
- V.N.Strocov. Photoemission response of 2D states.
J. Electron. Spectrosc. 229, 100 (2018), arXiv preprint (2018). - S.Moser et al. How to extract the surface potential profile
from the ARPES signature of a 2DEG.
J. Electron. Spectrosc. 225, 16 (2018). - A.Trellakis et al. Iteration scheme for the solution of the
two-dimensional Schrödinger–Poisson equations in quantum
structures.
J. Appl. Phys. 81, 7880 (1997).
This code is distributed under GNU General Public License v3.0.