Band-structure calculation using density-functional theory: Difference between revisions
No edit summary |
|||
| Line 102: | Line 102: | ||
calc.band.plot() | calc.band.plot() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{NB|mind| If using {{FILE|KPOINTS_OPT}} for the high-symmetry path ('''[[#Option A: Single run | Option A: Single run]]'''), you need to pass "kpoints_opt" as an argument to <code>calc.band.plot</code>: <syntaxhighlight lang="python">calc.band.plot("kpoints_opt")</syntaxhighlight>}} | {{NB|mind| If using {{FILE|KPOINTS_OPT}} for the high-symmetry path ('''[[#Option A: Single run |Option A: Single run]]'''), you need to pass "kpoints_opt" as an argument to <code>calc.band.plot</code>: <syntaxhighlight lang="python">calc.band.plot("kpoints_opt")</syntaxhighlight>}} | ||
== Recommendations and advice == | == Recommendations and advice == | ||
In case a {{FILE|KPOINTS_OPT}} file is present, VASP computes the band energies for the '''k''' points of the {{FILE|KPOINTS_OPT}} file after SCF is reached within the same submitted job. | In case a {{FILE|KPOINTS_OPT}} file is present ([[#Option A: Single run |Option A]]), VASP computes the band energies for the '''k''' points of the {{FILE|KPOINTS_OPT}} file after SCF convergence is reached within the same submitted job. There may, however, be a '''computational advantage''' to splitting the run ([[#Option B: Split run |Option B]]) because of different optimal batching options for the '''k''' mesh. | ||
There are additional advantages to using the {{FILE|KPOINTS_OPT}} file for computing the band structure [[Band-structure calculation using hybrid functionals| using hybrid functionals]] or [[Band-structure calculation using meta-GGA functionals| using meta-GGA functionals]]. Refer to these references for details. | |||
A number of post-processing options for the Kohn-Sham (KS) orbitals | A number of '''post-processing options''' for the Kohn-Sham (KS) orbitals can affect the computation of the band structure. Usually, these options are set directly in the {{FILE|INCAR}} file: See, for example, {{TAG|LORBIT}}=11 or [[Constructing_Wannier_orbitals | Constructing Wannier orbitals]]. | ||
== Practical examples == | == Practical examples == | ||
Revision as of 11:23, 27 October 2025
On this page, we provide step-by-step instructions for calculating the band structure for density-functional theory (DFT), as well as references to some practical examples.
Obtaining the band structure involves first solving the Hamiltonian to get eigenvalues and eigenvectors, then plotting them as electronic energy levels versus crystal momentum. The Hamiltonian requires at least the density (charge and magnetization) and possibly higher derivatives depending on the exchange-correlation (XC) functional.
| Mind: 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. Another different approach is also required for 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. From this converged CHGCAR file, we can obtain the eigenvalues at the desired high-symmetry path via a subsequent NSCF (= fixed density) run.
To compute the DFT (LDA/GGA/deorbitalized meta-GGA) band structure, you have two options. Note that Option A: Single run has been made available for convenience, but does not allow the same level of control nor (necessarily) performance as Option B: Split run.
Option A: Single run
| Mind: This option is only available as of VASP 6.3.0. |
With the introduction of the KPOINTS_OPT file, VASP can calculate the band structure in a single run. Be aware that there is a tradeoff of choosing convenience over control (see Option B for details). Internally, this will perform a self-consistent field (SCF) computation followed by a fixed-density (NSCF) computation.
- Step 1: Choose your high-symmetry path and rename the resulting KPOINTS file to KPOINTS_OPT.
- Step 2: Set up additional files:
- POSCAR containing structure information,
- KPOINTS containing a regular k mesh, using e.g. Γ-centered mesh or Monkhorst-Pack mesh,
- 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 evaluated.
- Step 3: Start the VASP run, which will internally perform an SCF run to obtain the CHGCAR and then perform the NSCF run at fixed density to evaluate the eigenvalues along the high-symmetry path.
Option B: Split run
Splitting the band-structure calculation into two separate VASP runs allows full control over the tags/parameters for both steps. In this approach, first, an initial self-consistent field (SCF) run yields a converged CHGCAR file storing density (charge & magnetization) information. Then, we start an NSCF (fixed-density) run that reads in the CHGCAR file and computes the eigenvalues along the chosen high-symmetry path.
| Tip: If you already have a converged CHGCAR file of a static self-consistent-field (SCF) calculation, copy that CHGCAR to your working directory and proceed with Step 4. |
- Step 1: Set up the following files:
- POSCAR containing structure information,
- KPOINTS containing a regular k mesh, using e.g. Γ-centered mesh or Monkhorst-Pack mesh,
- POTCAR containing the required pseudopotentials.
| Warning: For the initial SCF run (Step 2), do not specify the ICHARG tag. You will find mentions of the ICHARG tag related to DFT band-structure calculations: This is specific to Step 5-6. |
- Step 2: Start VASP to perform the SCF run, and wait for the calculation to converge. Adjust parameters if needed until convergence is reached (see, e.g., EDIFF & EDIFFG).
- Step 3 (optional): You may wish to backup your INCAR, POSCAR, POTCAR, KPOINTS and CHGCAR to a new directory before proceeding.
- Step 4: Choose a high-symmetry path and overwrite the KPOINTS file accordingly.
- Step 5: Adjust your INCAR file:
- Step 6: Start VASP to perform the NSCF calculation, reading in the CHGCAR file and keeping the density fixed.
Mind: Any existing KPOINTS_OPT file triggers Option A unless you disable this by setting LKPOINTS_OPT to .FALSE. in the INCAR file.
|
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().
|
Choosing a 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.
External tools[1][2] can be employed to find the space group and plot the Brillouin zone, then pick a desired high-symmetry k path. Extract the corresponding coordinates to a new KPOINTS file.
| Mind: 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 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. The example above would yield 10 points from L to Γ, 10 points from Γ to X, 10 from X to U, and 10 from K to Γ, including endpoints. For further details and instructions, please consult the KPOINTS documentation.
Visualization
py4vasp provides utilities for plotting the band structure. 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 (Option A: Single run), 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 (Option A), VASP computes the band energies for the k points of the KPOINTS_OPT file after SCF convergence is reached within the same submitted job. There may, however, be a computational advantage to splitting the run (Option B) because of different optimal batching options for the k mesh.
There are additional advantages to using the KPOINTS_OPT file for computing the band structure using hybrid functionals or using meta-GGA functionals. Refer to these references for details.
A number of post-processing options for the Kohn-Sham (KS) orbitals can 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:
- Bulk systems, Part 1: band structure of face-centered-cubic silicon.
- Bulk systems, Part 2: band structure of cubic-diamond silicon.
- Bulk systems, Part 3: band structure of face-centered-cubic nickel.
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