Band-structure calculation using density-functional theory

From VASP Wiki

Calculating the band structure for density-functional theory (DFT) requires multiple steps. On this page, you will find step-by-step instructions, as well as references to some practical examples to explore.

Obtaining the band structure requires solving the Hamiltonian to get eigenvalues and eigenvectors, which can then be plotted to obtain the band structure. In DFT, you need at least the density (charge and magnetization) and possibly higher derivatives depending on the exchange-correlation (XC) functional.

The unified approach presented on this page applies to LDA (needs density), GGA (needs density and gradient) and deorbitalized meta-GGA (needs density, gradient and Laplacian) functionals. In contrast, meta-GGAs need the kinetic energy density and follow a different approach. A different approach is also required when using hybrid functionals.

Step-by-step instructions

For DFT, the Hamiltonian can be expressed in terms of the electronic charge and magnetization density. Both are written to the CHGCAR file during an initial self-consistent-field (SCF) run. A converged CHGCAR file is a prerequisite for computing the band structure. With it, we can obtain the eigenvalues at the desired high-symmetry path from a subsequent NSCF (= fixed density) run.

If you want to compute a DFT (LDA/GGA/deorbitalized meta-GGA) band structure, please adhere to the following steps:

1. High-symmetry path

Band-structure calculations generally compute the Kohn-Sham orbitals and eigenenergies along a path in reciprocal space which usually connects high-symmetry points in the first Brillouin zone. Which k points are high-symmetry points depends on the space group of your structure.

Some external tools[1][2] can be employed to find the space group and plot the Brillouin zone to pick a k path. Extract the coordinates corresponding to the desired k path to a new KPOINTS_OPT file, which follows the format of a regular KPOINTS file.

The tools provide the coordinates and the labels for a given structure. Because these paths depend on the symmetry, take special care that the analysis is not tainted by finite precision or rounding. Also, keep in mind that the primitive and the conventional unit cell have different reciprocal coordinate systems.

An example for what such a KPOINTS_OPT file might look like (example for face-centered-cubic silicon):

 k points for band structure
 10  ! intersections 
 line
 Fractional
   0.50000  0.50000  0.50000   L
   0.00000  0.00000  0.00000   Γ
   
   0.00000  0.00000  0.00000   Γ
   0.00000  0.50000  0.50000   X
   
   0.00000  0.50000  0.50000   X
   0.25000  0.62500  0.62500   U
   
   0.37500  0.7500   0.37500   K
   0.00000  0.00000  0.00000   Γ

The empty lines and labels are optional and meant for readability. The labels will be used by py4vasp. VASP produces equidistant k points for each segment. In the example above, we would get 10 points from L to Γ, 10 points from Γ to X, 10 from X to U, and 10 from K to Γ, including endpoints. For further instructions on how to set up this file and what else to consider, please consult the KPOINTS documentation.

2. Calculation

To compute the band structure, you have two options. Note that Option A (single run) has been made available for convenience, but is not necessarily as performant and does not allow the same level of control as Option B (split run).

Option A: Single run

Mind: This option is only available as of VASP 6.3.0.

You may write k points of high-symmetry paths to a KPOINTS_OPT file. This allows you to calculate the band structure in a single VASP run. Be aware that the SCF run is typically the expensive task and splitting the run might be beneficial (see Option B: Split run).

Following step 1, you should already have a KPOINTS_OPT file holding your chosen high-symmetry path. To proceed, you will also need:

  • POSCAR containing structure information,
  • POTCAR containing the required pseudopotentials.

Note that KPOINTS and KPOINTS_OPT both co-exist in this method: KPOINTS holds the regular k' mesh for the initial SCF computation, while KPOINTS_OPT holds the high-symmetry path along which the band structure will be computed at fixed density afterwards.

Option B: Split run

Independent of VASP version, it is possible to split the band-structure calculation into two separate steps and VASP runs. In this approach, we first obtain a converged CHGCAR which holds density (charge & magnetization) information in a self-consistent (SCF) run, then fix the density and start another run by reading in the CHGCAR file (NSCF run).

Step B1: SCF Run

If you already have a converged CHGCAR file of a self-consistent-field (SCF) calculation, you can skip this step.

Otherwise, in order to obtain a converged CHGCAR, perform a static self-consistent-field (SCF) calculation for DFT. Following step 1, you should already have a KPOINTS_OPT file holding your chosen high-symmetry path. To proceed, you will also need:

  • POSCAR containing structure information,
  • POTCAR containing the required pseudopotentials.

Once everything has been set up, start VASP and wait for the calculation to converge.

Mind: When a KPOINTS_OPT file exists, it is automatically read in (Option A) unless you disable this by setting LKPOINTS_OPT to .FALSE. in the INCAR file.
Warning: For the initial SCF run to obtain the converged CHGCAR file, do not specify the ICHARG tag. You may find mentions of the ICHARG tag related to DFT band-structure calculations: This is specific to the next step.
Step B2: NSCF Run

Please follow the next steps exactly:

  • In your INCAR file:
    • Remove any of the following tags, if present: NSW, IBRION & ISTART.
    • Add the ICHARG=11 tag. Setting ICHARG=11 allows the DFT calculation to pick up from the CHGCAR at the same densities.
    • Add additional relevant tags as needed, i.e., LORBIT=11.
Mind: Notice that the computed Fermi energy resulting from your NSCF run will no longer be correct (because the Fermi energy cannot be computed based on k points along a path). You can set the EFERMI tag to a numeric value (when ICHARG = 11) to keep the Fermi energy fixed. You can extract the Fermi energy using py4vasp with py4vasp.calculation.energy.read().
  • Then, start another VASP run. This will restart the DFT calculation from the CHGCAR file. This run is non-self-consistent (NSCF), and the densities will remain fixed.

3. Visualization (optional)

Plot the band structure, e.g., using py4vasp. In a python notebook in the directory of the calculation (or a different directory - see input to py4vasp.Calculation.from_path), you can run the following code:

import py4vasp
calc = p4vasp.Calculation.from_path(".")
calc.band.plot()
Mind: If using KPOINTS_OPT for the high-symmetry path, you need to pass "kpoints_opt" as an argument to calc.band.plot:
calc.band.plot("kpoints_opt")

Recommendations and advice

In case a KPOINTS_OPT file is present, VASP computes the band energies for the k points of the KPOINTS_OPT file after SCF is reached within the same submitted job. Therefore, there is no computational advantage to splitting the run into two steps (one for SCF, and one for computing the band structure at fixed density). However, reaching convergence for the SCF run and obtaining the converged CHGCAR file is typically more expensive, and storing these results might be beneficial for subsequent calculations.

Note that there are additional advantages to using the KPOINTS_OPT file for computing the band structure using hybrid functionals or using meta-GGA functionals.

A number of post-processing options for the Kohn-Sham (KS) orbitals exist. These directly affect the computation of the band structure. Usually, these options are set directly in the INCAR file: See, for example, LORBIT=11 or Constructing Wannier orbitals.

Practical examples

We offer additional tutorials for calculating and visualizing DFT band structures:

Related tags and articles

KPOINTS, KPOINTS_OPT, KPOINTS_WAN, ICHARG, LDA, GGA, Setting up an electronic minimization, Band-structure calculation using meta-GGA functionals, Band-structure calculation using hybrid functionals

References