Tutorial 13: Electron Energy Loss Spectroscopy in ONETEP
- Author:
Edward Tait and Nicholas Hine
- Date:
August 2023 (original text c2018)
Introduction
EELS (Electron Energy Loss Spectroscopy) is a spectroscopic technique which combines high spatial resolution with fair energy resolution, and is thus sensitive to local electronic structure in a material. The theory behind EELS calculations in ONETEP is explained in the documentation page on EELS, as well as in a paper giving an overview of the capabilities [1], and in the thesis of one of the authors (Edward Tait) [2].
EELS calculations in ONETEP proceed by running first a singlepoint calculation (with or without a core hole, as required) and then running a properties calculation. The properties calculation will output files suitable for use with the OptaDoS package, after a little renaming and rearrangement which can be carried out with a script provided.
System setup
We will demonstrate the procedure for running an EELS calculation on a toy system: silene (the silicon equivalent of ethene). An example input file is provided in the Files section below, as are the PAW potentials for Silicon and Hydrogen and the associated core wavefunction data for Silicon. The tutorial files use the JTH pseudopotentials, with the addition of core orbitals, and we also regenerated the PAW potential and Core orbitals with a core hole, for the later part of this tutorial.
There are a few differences between the ONETEP input here and one for a typical single point calculation:
PAW is mandatory
We specify a second species for the atom whose core electrons we are exciting
Because a conduction calculation is being performed we must provide a
species_cond
blockWe must provide a
species_core_wf
block and every species must be listed there.
The input file can be run swiftly on a single node and should produce a
large number of output files. Most of these files are .cube
files of wavefunctions
produced by default during the properties calculations. The files of interest
are the .elnes_bin
files, which contain OptaDoS compatible matrix elements.
A little more setup is needed before we can run OptaDoS (using the silene example):
A dummy castep
silene-out.cell
file must be produced, and it must contain a symmetry blockBy default two
.elnes bin
files are produced, one based on Kohn-Sham wavefunctions represented using only the valence NGWFs (silene_val_grad.elnes_bin
) and a second which makes use of the joint basis of valence and conduction NGWFs (silene_joint_grad.elnes_bin
)As per the discussion above, you should choose the latter and copy it to
silene.elnes bin
.A
silene.bands
file must be produced, this is best done by copyingsilene.joint bands
tosilene.bands
.An OptaDoS input file,
silene.odi
is needed.
To assist in these tasks a utility script, prep_optados_eels
, is provided in the
utils folder of the onetep distribution. Run it with the calculation seed name
as its argument and the steps listed above will be completed automatically.
The .odi file produced should be regarded as a basic template, consult the OptaDoS documentation[6] if you wish to use more advanced features. Note that at the moment only fixed broadening is supported by onetep. When you are satisfied with your OptaDoS input file, execute OptaDoS with your calculation seed name as the argument. All being well, you should see a .dat file which you can plot with your favorite tool. Individual edges are listed sequentially in the file, so a little post processing with awk or python is needed to separate the edges for individual plotting