pyband
and pydos
are two python scripts that analyse the VASP calculation
results (e.g. OUTCAR and PROCAR) and convert the results to images. It offers a
fast and effective way to preview the calcuated results. The image plotting
utilizes matplotlib
package.
When no argument is given, pyband
reads in OUTCAR
(optionally KPOINTS
)
and find the band information within. It then plots the resulting band structure
and save it as band.png
.
$ pyband
The default output image name can be changed by adding -o YourImageName.suffix
to the above command line. Note that the image format is
automatically recognized by the script, which can be any format that is
supported by matplotlib
. The size of the image can also be speified by -s width height
command line arguments.
The labels of the high-symmetry K-points, which are not shown in the figure, can
be designate by -k
flag.
$ pyband -k mgkm
In some cases, if you are interested in finding out the characters of each KS
states, e.g. the contribution of some atom to each KS state, the flag --occ atoms
comes to help.
$ pyband --occ '1 3 4'
or
$ pyband --occ '1-4'
or combination
$ pyband --occ '1-4 5-6 7'
Note the the index 0
is a special one, it is used select all the atoms
$ pyband --occ 0
where 1 3 4
are the atom index starting from 1 to #atoms in the above image.
The size of red dots in the figure indicates the weight of the specified atoms
to the KS states. This can also be represented using a colormap:
$ pyband --occ '1 3 4' --occL
If one wants to show contributions from three group of atoms:
$ pyband --occ '1 2' --occ '3 4 5 6' --occL -t --triAxesLabels Mo S Se -k mgkm
The spd-projected weight can also be specefied:
$ pyband --occ '1 3 4' --spd '4 5 6 7 8'
or
$ pyband --occ '1 3 4' --spd 'd'
or in combination
$ pyband --occ '1 3 4' --spd 's p d 9-12'
where in the arguments of --spd
:
s orbital: 0
py, pz, px orbital: 1 2 3
dxy, dyz, dz2, dxz, dx2 orbital: 4 5 6 7 8
More command line arguments can be found by pyband -h
.
For Mac users, iterm2 combined with imgcat can be used to show inline images. Just modify the last line from:
call(['feh', '-xdF', opts.bandimage])
to
call(['~/.iterm2/imgcat', opts.bandimage])
more example:
pyband --occ '3 4' --spd '1' --occMc 'red' --occ '3-4' --spd '2-3' --occMc 'blue'
pyband
command produces plotable data with a GNUPLOT
compatiable format. Files are named "pyband.dat" for spinless or SOC calculations and "pyband_up(do).dat" for spinfull calculations. Plot the bandsturcture by:
$ gnuplot -presist -e 'plot "pyband.dat" u 1:($2-3.0913) w l'
This script is used to plot partial density of states (pDOS) from VASP PROCAR
files.
pydos -p '1 3 4' -p '2 7 8' -p '5 6 9' -z 0.65 -x -1 2 -y 0 6
where -p
specifies the atom indexes, -x
and -y
determines the x and y
limits of the plot, -z
is followed by the energy reference of the plot.
This script can plot PDOS from multiple VASP PROCARs
in multiple axes, example usages:
#!/bin/bash
npdos -nr 2 -f 4.8 4.0 \
-o g1.png \
-nxminor 4 \
-i pbe/scf/PROCAR -a 0 -p 0 -pv n -tlab 'PBE-PBE' -tlw 0.5 -tlc r \
-i scf-pbe_opt-hse/PROCAR -a 0 -p 0 -pv n -tlab 'HSE-PBE' -tlw 0.5 -tlc b \
-i scf-hse_opt-pbe/PROCAR -a 1 -p 0 -pv n -tlab 'PBE-HSE' -tlw 0.5 -tlc r \
-i hse/scf/PROCAR -a 1 -p 0 -pv n -tlab 'HSE-HSE' -tlw 0.5 -tlc b \
-x -4 6 -x -6 6 \
-z 3.3129 -z 3.3726 -z 3.5583 -z 3.6332 \
-panelloc 0.01 0.95 \
-q
The resulting figure:
This script utilize ASE to make
supercells. The coordinates of the atoms in the resulting supercell is
rearranged in the increasing order in the z-axis. It can also rearrange the
elements in POSCAR
in the required order. Moreover, vacuum can be added in the
desired direction if specified. Examples usage:
xcell.py -i POSCAR -s 2 2 1 -n Ti O C H -vacuum 15 -ivacuum z -o new.vasp
In the above example, we are makeing a 2x2x1 supercell based on the cell given
by POSCAR
. The elements in the supercell are arranged in "Ti O C H" order. In
addition, we add a vacuum of 15 Angstrom in the z-axis. The resulting supercell
is stored in the file new.vasp
.
This script also make use of ASE
to adsorb molecules onto the slab surface.
Examples usage:
molAdd.py -m H2O -i POSCAR -a 36 --height 2.0 -rotx 60 -v 15.0
where we add a H2O molecule above the atom with index 36 (which is the 37th
atom) by a height of 2.0 Angstrom. In addition, we rotate the molecule around
x-axis by 60 degrees and add 15.0 Angstrom of vacuum to the slab. The list of
available molecules is those from ase.collection.g2
database.