Analysis tools¶
Hint
Enter the directories 4ZGNR and/or 10ZGNR.
In this exercise we will cover a few basic/intermediate tools to extract important information from the results of a SIESTA calculation.
The directory contains two subdirectories: one for a thin graphene ribbon with
4 zigzag chains and H-saturated edges (4ZGNR), and another for a thicker 10 chain
ribbon (10ZGNR). If you want to try a faster example, move to the 4ZGNR directory.
The ground state of these ribbons has an antiferromagnetic (AF) spin configuration
where each edge of the ribbon has opposite spin to the other. The DM.ÌnitSpin
block
is used to converge the proper AF state, rather than the FM configuration.
The input file ‘zgnr.fdf’ has a few lines that will have to be uncommented during the exercise.
Note
This is a 1D system, which has periodicity only along the x-axis.
However, the %block kgrid_Monkhorst_Pack
is set for a very smooth k-sampling
along that direction. This can make the SCF loop quite slow. You can decrease
the number of k-points for a first steps to get a converged DM and then increase
the k-sampling for analysing the results.
Band structure and density of states¶
We first analyse the band-structure for the graphene ribbon and look at the density of states.
To plot the DOS you will use the utility program ‘Eig2DOS’ (see
this how-to for background and installation
notes, if needed). This program reads the file zgnr.EIG (always
produced by SIESTA), which contains all the eigenvalues for each k-point used
to sample the BZ, and the file zgnr.KP, which contains the k-point
sampling information. Useful options to the program (type Eig2DOS
-h
for a full list) are the broadening for each state in eV (a value
of the order of the default (0.2 eV) is usually reasonable), the
number of energy points where the DOS will be calculated (200 by
default) and the Emin and Emax of the energy window where the DOS will
be calculated (the default is to compute the DOS in the whole range of
energies available in the EIG file).
For example:
Eig2DOS -k zgnr.KP zgnr.EIG > dos
will compute the DOS in the whole range, using a grid of 200 points, a broadening (“smearing”) of 0.2 eV, and using the k-point info from zgnr.KP. (The k-point file information is important when different k-points have different weights).
Plot the dos using gnuplot, type gnuplot
and enter the command:
plot "dos" with lines
The result is a bit confusing, but it is just because the range of energies is very large. Open the zgnr.out file and look for the Fermi energy. EF is also written at the top of the ‘zgnr.EIG’ file.
You can improve the results around the Fermi level (the option ‘-f’ shifts the energies so that the Fermi level is at 0 eV):
Eig2DOS -f -e -3 -E 3 -s 0.05 -k zgnr.KP zgnr.EIG >dos
The input file zgnr.fdf
also requests SIESTA to print the information of the
bandstructure along high-symmetry lines in the Brillouin zone (BZ). As this is
a 1D system, the structure is very simple:
WriteKbands .true.
WriteBands .true.
BandLinesScale ReciprocalLatticeVectors
%block Bandlines
1 0.0000000000 0.000000000 0.0000 \Gamma # Gamma is the first point
100 0.5000000000 0.000000000 0.0000 M # 100 points from Gamma and we get to M
%endblock BandLines
Let’s understand these few lines:
The BandLinesScale entry specifies the scale of the k-vectors given in the BandLines block. The possible options are “pi/a” and “ReciprocalLatticeVectors”.
Each line of the BandLines block represents the end-point of a segment to be spanned in the reciprocal space. The comments on the code block above help to familiarize with the format of these k-space segments.
To learn more about the special high-symmetry points and lines of the BZ for this case, you can visit the Bilbao Crystallographic Server (click on ‘Optimized listing of k-vector types…’; then on ‘Brillouin Zone’).
The bands are stored in a the file zgnr.bands.
To plot the band structure you can use the utility program gnubands
:
gnubands zgnr.bands > bands.dat
Again, the result covers the whole range of energies, which is too large.
We can improve the results around the Fermi level with a few modifiers
on gnubands
gnubands -G -o bands -F -e -3 -E 3 zgnr.bands
and you can plot with gnuplot
, using the bands.gplot
file generated (which has extra information to place and label the
‘ticks’ for each symmetry point in the BZ):
gnuplot -persist bands.gplot
Plotting Projected Density of States¶
There are several utilities that can be used to process the projected DOS,
such as pdosxml
, sisl,
or the fmpdos
program by Andrei Postnikov. Here we will use mprop
,
an utility that is included in the framework for the analysis of the
crystal-overlap populations (COOP/COHP),
which includes the processing of the pDOS as a by-product.
One potential drawback of this approach is that it requires files
storying the wavefunction in the relevant energy range, which for some
systems could be large. The files are generated with the option:
COOP.write T
Hint
Uncomment that line in the input file zgnr.fdf
Once you have run SIESTA with that flag in the fdf,
it will generate a new file zgnr.fullBZ.WFSX
. To process the information try this:
ln -sf zgnr.fullBZ.WFSX zgnr.WFSX
mprop [option] pdos
that uses the selection of orbitals’ projection in the file pdos.mpr
Note
In this example, pdos.mpr does the projection on the orbitals of the carbon atoms at the edges of the graphene ribbon. For the 4ZGNR it looks like this:
zgnr # System Label
DOS # ... used for PDOS (or FatBands)
Cedge1 # flag for output file for selected orbitals
2 # index of orbitals selected
Cedge2 # flag for output file for selected orbitals
9 # index of orbitals selected
You could add more lines to plot PDOS over different orbital sets if you want, or
be more specific in your orbital selection. For example: i) projection over the
pz orbitals at edge1 can be obtaining by typing 2_pz in line 4; ii) H_1s will
project over all 1s orbitals in Hydrogen (at both edges).
If you want further information on how to define orbitals, try with mprop -h
You can select the range of energy (eV) in which you plot the DOS, the number of energy points, or the smearing (Gaussian) used:
mprop -n 500 -m -10 -M 3 -s 0.1 pdos
This generates files pdos.*label*.pdos
with the projected DOS.
In those files, the first column is the energy (in eV), the following columns contain the
different spin components, and the last column has the spin-sum over the orbitals.
The total DOS (considering all orbitals) is also saved into zgnr.ados
.
You can easily plot the projections with gnuplot
:
plot "pdos.Cedge1.pdos" u 1:2 w l, "pdos.Cedge1.pdos" u 1:(-column(3)) w l lt 1, \
"pdos.Cedge2.pdos" u 1:2 w l, "pdos.Cedge2.pdos" u 1:(-column(3)) w l lt 3
Fat-bands for Graphene Nanoribbons¶
Now we will use the fat
program to compute the projections of
wavefunctions obtained from band-structure calculation with the option
Write.WFS.For.Bands
onto specified orbital sets. The resulting
“fatbands” can later be plotted as a weighthed bandstructure in which
contributions of the selected orbitals will be revealed.
Hint
Modify the input file for 4ZGNR, or 10ZGNR, to uncomment the lines requesting the bandstructure calculation
In any case, in the input file zgnr.fdf, you can see a slightly modified band-structure section:
BandLinesScale ReciprocalLatticeVectors
WFS.Write.For.Bands T # For fat-bands analysis
WFS.band.min 10
WFS.band.max 22
%block Bandlines
1 0.000 0.000 0.000 \Gamma # Begin at Gamma
100 0.500 0.000 0.000 X # 60 points to BZ edge
%endblock Bandlines
Note the WFS.*
options, requesting the output of wavefunctions for
specific bands (optional). Without them, the program would only generate
a .bands file with band eigenvalues.
Once we run SIESTA with this input file, we will have a
zgnr.bands.WFSX
file, which we can process with:
ln -sf zgnr.bands.WFSX zgnr.WFSX
fat [options] fatbands
using the orbital sets in the pdos.mpr file.
Hint
You might need to remove the zgnr.WFSX link if you have used it for the PDOS example.
Note
The input file for fat
is similar to the input file for mprop
used to plot the Partial Density of States (PDOS).
Then, a number of .EIGFAT files will be produced. These files contain
both the eigenvalues and the projection weight for each orbital set
in the .mpr file, and can be re-processed by the eigfat2plot
program
(in Util/Bands in the Siesta distribution) to produce data files
suitable for plotting by gnuplot
eigfat2plot pdos.Cedge1.EIGFAT > Cedge1.dat
eigfat2plot pdos.Cedge2.EIGFAT > Cedge2.dat
The structure of the output files has 4 columns: k-point index, eigenEnergy, weight, and spin.
The required commands with gnuplot
are:
set yrange[0:-8]
plot "Cedge1.dat" using 1:2:(3*column(3)) w p pt 6 ps variable
replot "Cedge1.dat" using 1:2:(3*column(3)) w l palette lw 4
This will plot both spin components simultaneously. To select a specific spin component you can try:
plot "Cedge1.dat" using 1:2:(column(3)*(2-column(4))) w p pt 6 ps variable
replot "Cedge1.dat" using 1:2:(column(3)*(column(4)-1)) w p pt 6 ps variable
Alternatively, users might want to produce their own post-processors.
With these commands you can check how the valence band for spin + is localized at edge1, and the spin - is localized at edge2. For the conduction band, the spin + is localized at edge2, and the spin - is localized at edge1.