A basic tutorial on using Wannier90 with the VASP code. Includes a brief overview of Wannier functions, tips on how to build VASP with Wannier90 support, and how to use the VASP/Wannier90 interface to compute an HSE06 band structure and perform some other Wannier90 post processing.
1 of 22
More Related Content
VASP And Wannier90: A Quick Tutorial
1. VASP And Wannier90:
A Quick Tutorial
J. M. Skelton
WMD Group Meeting
15th February 2016
2. WMD Group Meeting, February 2016 | Slide 2
Wannier functions in two slides (simplified!)
• Wannier functions (WFs) are essentially an alternative basis for expanding the electronic
states in periodic solids
• They are related to the more usual Bloch orbitals 𝛹 𝑛𝐤 by a unitary transformation:
𝛹 𝑛𝐤 𝐫 = 𝑒 𝑖𝐤.𝐫
𝑒 𝑖𝜑 𝑛(𝐤)
𝑢 𝑛(𝐫) 𝑤 𝐑𝑛 𝐫 =
𝑉
(2𝜋)3
𝐤
𝛹 𝑛𝐤 𝐫 𝑒−𝑖𝐤.𝐑 𝑒 𝑖𝜑 𝑛(𝐤)
Arbitrary phase factor 𝑒 𝑖𝜑 𝑛(𝐤)
not assigned by
the Schrödinger equation
• The arbitrariness of 𝑒 𝑖𝜑 𝑛(𝐤)
propagates to the WFs, but we can exploit this freedom to
choose WFs which have the smallest “spread”, i.e. “maximally locallised” WFs (MLWFs),
which are the easiest to understand “chemically”
http://cfm.ehu.es/ivo/publications/marzari-psik03.pdf
3. WMD Group Meeting, February 2016 | Slide 3
Wannier functions in two slides (simplified!)
• The most general form of the WF <-> Bloch orbital transformation must take into account
the fact that Bloch orbitals may be degenerate at some k-points:
• The procedure for this is called “disentanglement”
• A few good links covering the mathematics in more detail:
• http://journals.aps.org/rmp/abstract/10.1103/RevModPhys.84.1419
• http://cfm.ehu.es/ivo/publications/marzari-psik03.pdf
• http://www.tcm.phy.cam.ac.uk/~jry20/esdg2.pdf
𝛹 𝑛𝐤 𝐫 →
𝑛
𝑈 𝑚𝑛
(𝐤)
𝛹 𝐦𝐤 𝐫 𝑤 𝐑𝑛 𝐫 =
𝑉
(2𝜋)3
𝐤 𝑛
𝑈 𝑚𝑛
(𝐤)
𝛹 𝐦𝐤 𝐫 𝑒−𝑖𝐤.𝐑 𝑒 𝑖𝜑 𝑛(𝐤)
4. WMD Group Meeting, February 2016 | Slide 4
Wannier functions
Images from: https://en.wikipedia.org/wiki/Wannier_function
5. WMD Group Meeting, February 2016 | Slide 5
Wannier functions: Why?
• MLWFs are the solid-state equivalent of molecular orbitals -> can be used to perform
analyses which are difficult with Bloch orbitals:
o More intuitive visualisation of orbitals
o In an insulator, the charge centre of a MLWF provides a kind of classical definition
for the location of an electron (pair) -> good for e.g. bonding analyses
o The vector sum of the Wannier centres is directly related to the macroscopic
polarisation
• Easy to obtain Bloch orbitals (and eigenvalues) at arbitrary k-points -> allows band
dispersions to be computed from uniform k-point grids (“Wannier interpolation”)
o Potentially very useful for calculating effective masses
http://cfm.ehu.es/ivo/publications/marzari-psik03.pdf
6. WMD Group Meeting, February 2016 | Slide 6
Building VASP with Wannier90 support
• Download Wannier90 1.2 from http://www.wannier.org/download.html [N.B. the
interface from VASP 5.4.1 does not use the latest version]
• For more recent Intel compilers, copy config/make.sys.ifort to make.sys and edit
as follows:
LIBDIR = /opt/intel/mkl721/lib/32
LIBS = -L$(LIBDIR) -lmkl_lapack -lmkl_ia32 -lguide -lpthread
LIBDIR = ${MKLROOT}/lib/intel64
LIBS = -L$(LIBDIR) -mkl -lpthread
• Build the executable and library, run the tests, and check the report:
make wannier lib test
7. WMD Group Meeting, February 2016 | Slide 7
Building VASP with Wannier90 support
• For VASP 5.4.1 and the Intel compilers, edit makefile.include as follows:
CPP_OPTIONS = ...
...
LLIBS = $(SCALAPACK) $(LAPACK) $(BLAS)
CPP_OPTIONS = -DVASP2WANNIER90 ...
...
LLIBS = install_path/libwannier.a $(SCALAPACK) $(LAPACK) $(BLAS)
• Recompile VASP:
make veryclean ; make gam std ncl
• N.B. The build was done from a copy of the source with all the latest patches applied - if
you run into any strange build errors, try applying these to see if it fixes it
http://cms.mpi.univie.ac.at/wiki/index.php/LWANNIER90
8. WMD Group Meeting, February 2016 | Slide 8
Tutorial: HSE 06 band structure
ALGO = All
EDIFF = 1.0e-8
ENCUT = 500
ISIF = 2
ISMEAR = -5
KPAR = 2
NPAR = 1
LCHARG = .FALSE.
LREAL = .FALSE.
NBANDS = 16
NEDOS = 2000
PREC = Accurate
SYSTEM = Si
LHFCALC = .TRUE.
HFSCREEN = 0.2
ALGO = All
EDIFF = 1.0e-8
ENCUT = 500
ISIF = 2
ISMEAR = -5
KPAR = 2
!NPAR = 1
LCHARG = .FALSE.
LREAL = .FALSE.
NBANDS = 16
NEDOS = 2000
PREC = Accurate
SYSTEM = Si
LHFCALC = .TRUE.
HFSCREEN = 0.2
LWANNIER90 = .TRUE.
• First step: • Second step (restart from WAVECAR):
Appears to crash when
LWANNIER90 is set and
NPAR != N
Switch on the Wannier90
interface
Two-step job safer because typos in a
wannier90.win file cause VASP to crash
before writing out the WAVECAR; also, have to
use NPAR = N with LWANNIER90 set
9. WMD Group Meeting, February 2016 | Slide 9
Tutorial: HSE 06 band structure
• Wannier90 takes an input file seedname.win
with control tags, plus a set of other input files
containing information about the Bloch states
• The VASP interface uses a seedname of
wannier90; VASP will look for
wannier90.win, and create/update it if
required
• Add the blocks in blue to the skeleton input
file; these instruct VASP/Wannier90 to use a
random initial guess for the MLWFs, and to
use them to guide the “Wannierisation”
• The remaining blocks are added by VASP if
they are not already there
Begin Projections
Random
End Projections
guiding_centres = true
num_wann = 16
begin unit_cell_cart
2.7155 2.7155 0.000
...
end unit_cell_cart
begin atoms_cart
Si 0.000 0.000 0.000
...
end atoms_cart
mp_grid = 8 8 8
begin kpoints
...
end kpoints
10. WMD Group Meeting, February 2016 | Slide 10
Tutorial: HSE 06 band structure
• After the initial “Wannierisation”, Wannier90 can perform various post-processing - e.g.
to compute a band structure:
restart = plot
bands_plot = true
begin kpoint_path
L 0.50000 0.50000 0.50000 G 0.00000 0.00000 0.00000
G 0.00000 0.00000 0.00000 X 0.50000 0.00000 0.50000
X 0.50000 0.00000 0.50000 W 0.50000 0.25000 0.75000
W 0.50000 0.25000 0.75000 G 0.00000 0.00000 0.00000
end kpoint_path
bands_num_points 50
bands_plot_format gnuplot xmgrace
This sets the number of segments
along the first path
If not specified, gnuplot is the
default
Each line specifies a segment of the
band structure
http://www.wannier.org/doc/user_guide.pdf
11. WMD Group Meeting, February 2016 | Slide 11
Tutorial: HSE 06 band structure
1. Run VASP with LWANNIER90 = .TRUE. and
your skeleton input file in the working directory
2. Run:
wannier90.x wannier90
to minimise the MLWFs; the solutions are
written to wannier90.chk
3. Add the band-structure (or other post-
processing) commands and rerun wannier90.x
4. Raw data are written to
wannier90_band.dat/wannier90_kpt.dat;
scripts to plot using gnuplot/grace are also
produced depending on bands_plot_format
12. WMD Group Meeting, February 2016 | Slide 12
Wannier90 vs “fake self-consistency”
• The alternative technique for computing hybrid band structures in VASP is to introduce
zero-weight k-points into the KPOINTS file
• The eigenvalues at these k-points are converged iteratively, but do not contribute to the
total energy, and so are not part of the break criteria for the SCF loop
For hybrid functionals and Hartree-Fock, the band structure can be calculated by
adding additional k-points with zero weight to the KPOINTS file. This is easily
achieved, by performing first a standard hybrid functional calculation with a
conventional KPOINTS file. After the run, copy the IBZKPT file to the KPOINTS file (this
file stores explictly the list of k-points used in the previous calculation), and simply
add the desired additional k-points with zero weight. Since VASP uses an iterative
matrix diagonalization and since the added k-points do not influence the energy, one
needs to force VASP to perform at least 5 iterations before inspecting the one-
electron energies at k-points with zero weight (NELMIN = 5).
http://cms.mpi.univie.ac.at/vasp/vasp/Accurate_DOS_Band_structure_calculations.html
13. WMD Group Meeting, February 2016 | Slide 13
• How many iterative steps (NELMIN) are needed to converge the eigenvalues at the zero-
weight k-points? We can check by comparing the “mesh” and “band” Γ-point
eigenvalues…
Wannier90 vs “fake self-consistency”
k-point 1 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -7.8357 2.00000
2 5.4647 2.00000
3 5.4647 2.00000
4 5.4647 2.00000
5 8.8034 0.00000
6 8.8034 0.00000
7 8.8034 0.00000
8 9.7959 0.00000
9 14.2683 0.00000
10 14.2683 0.00000
11 14.2739 0.00000
12 17.8122 0.00000
13 17.8122 0.00000
14 17.8122 0.00000
15 21.7603 0.00000
16 30.2363 0.00000
k-point 39 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -7.2102 0.00000
2 7.0956 0.00000
3 7.4845 0.00000
4 9.1114 0.00000
5 8.8483 0.00000
6 12.7657 0.00000
7 11.5932 0.00000
8 8.3881 0.00000
9 11.7581 0.00000
10 25.6173 0.00000
11 16.9587 0.00000
12 22.9149 0.00000
13 29.8875 0.00000
14 27.4218 0.00000
15 27.8106 0.00000
16 35.8819 0.00000
15. WMD Group Meeting, February 2016 | Slide 15
Wannier90 vs “fake self-consistency”
• In practice, the best solution is to run a “clean” SCF (i.e. restart from fresh, or from a
standard DFT WAVECAR) with the zero-weight k-points present…
• This is how it’s done in the Si tutorial on the VASP Wiki
k-point 1 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -7.8357 2.00000
2 5.4647 2.00000
3 5.4647 2.00000
4 5.4647 2.00000
5 8.8034 0.00000
6 8.8034 0.00000
7 8.8034 0.00000
8 9.7959 0.00000
9 14.2683 0.00000
10 14.2683 0.00000
11 14.2739 0.00000
12 17.8122 0.00000
k-point 39 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -7.8219 0.00000
2 5.4785 0.00000
3 5.4785 0.00000
4 5.4788 0.00000
5 8.8034 0.00000
6 8.8034 0.00000
7 8.8050 0.00000
8 9.7953 0.00000
9 14.2742 0.00000
10 14.2705 0.00000
11 14.2706 0.00000
12 17.8126 0.00000
• The “clean” SCF does 10 steps in this particular case (i.e. the same as NELMIN = 10), but
gives much better convergence - presumably an implementation detail…?
16. WMD Group Meeting, February 2016 | Slide 16
Wannier90 vs “fake self-consistency”
• The main issue with the “fake SCF” method is that the eigenvalues at the zero-weight k-
points still need to be explicitly calculated, which increases the calculation time
Calculation SCF time [s]
8x8x8 Γ-centred mesh 1063.904
+ 40 zero-weight k-points 2511.258
10x10x10 Γ-centred mesh 3349.650
Using Wannier90 is much cheaper - if you
have computing time to burn, use a larger k-
point sampling mesh and/or more bands
instead!
17. WMD Group Meeting, February 2016 | Slide 17
Wannier90 vs “fake self-consistency”
• The Wannier-interpolated eigenvalues converge exponentially to the exact ones as a
function of the size of the uniform k-point sampling mesh
Figures from: http://www.tcm.phy.cam.ac.uk/~jry20/esdg2.pdf
18. WMD Group Meeting, February 2016 | Slide 18
Tutorial: Some other post processing
• Plot the MLWFs for visualisation
1. Re-run VASP (restart from WAVECAR) with LWRITE_UNK = .TRUE. in the INCAR
file; this writes the cell-periodic part of the wavefunctions at each k-point, which
are needed by Wannier90 for plotting
2. Run Wannier90 to generate the MLWFs, then restart with the following post-
processing tags:
Images from: http://www.tcm.phy.cam.ac.uk/~jry20/esdg2.pdf
wannier_plot = true
wannier_plot_supercell = 2
wannier_plot_format = xcrysden
Technically, the Wannier functions exist in a
supercell compatible with the k-point mesh
used to generate them
19. WMD Group Meeting, February 2016 | Slide 19
Tutorial: Some other post processing
• Calculate and plot the Fermi surface (when EF cuts across bands):
o Restart Wannier90 with the following post-processing tags:
restart = plot
fermi_energy = 5.465085
fermi_surface_plot = true
Images from: http://www.tcm.phy.cam.ac.uk/~jry20/esdg2.pdf
Get from OUTCAR
20. • To output the coordinates of the Wannier centres:
o Just add write_xyz = true to the input file
o Can also add translate_home_cell = true to translate centres to the first unit
cell
WMD Group Meeting, February 2016 | Slide 20
Tutorial: Some other post processing
16
Wannier centres, written by Wannier90 on14Feb2016 at 13:33:04
X 4.73106304 3.08479106 3.22307628
X 0.58670091 2.37932699 1.81687824
X 1.84763232 2.03487825 1.28324033
X 3.35644008 4.04048840 4.09626106
X 2.24955146 2.58038861 4.71003077
X 1.29288053 3.20634223 3.14141564
X 2.49404870 0.75778886 3.04055439
X 3.16416139 2.89011223 0.91641396
...
Si 0.00000000 0.00000000 0.00000000
Si 1.35775000 1.35775000 1.35775000
21. WMD Group Meeting, February 2016 | Slide 21
Summary (and a caveat)
• Wannier90 is easy to use with VASP (when you know how!), and is a great post-
processing tool
• Particularly good for band structures
o The “correct” way to do hybrid band structures
o The only way to do GW band structures
o Recalculating band structures (e.g. with different k-point paths) is trivial once the
initial calculation has been done
• Potentially useful for a lot of other things (e.g. visualisation, calculating effective masses)
• Unfortunately, the VASP/Wannier90 interface does not yet support spin-orbit coupling -
newer versions of Wannier90 support SoC, but the VASP interface needs to be updated
to pass it the necessary information
22. WMD Group Meeting, February 2016 | Slide 22
Some useful links
• Covering the mathematics in detail (again):
• http://journals.aps.org/rmp/abstract/10.1103/RevModPhys.84.1419
• http://cfm.ehu.es/ivo/publications/marzari-psik03.pdf
• http://www.tcm.phy.cam.ac.uk/~jry20/esdg2.pdf
• Wannier90 manual: http://www.wannier.org/doc/user_guide.pdf
• VASP manual page on the LWANNIER90 tag and Si band structure tutorials:
o http://cms.mpi.univie.ac.at/wiki/index.php/Si_bandstructure
o http://cms.mpi.univie.ac.at/wiki/index.php/Bandstructure_of_Si_in_GW_(VASP2W
ANNIER90)
• Tutorial (explains the features; easily adaptable): http://wannier.org/doc/tutorial.pdf