Difference between revisions of "Non self-consistent calculations: Band structures and Density Of States"
Line 16: | Line 16: | ||
In the Quantum ESPRESSO input file one has to set: | In the Quantum ESPRESSO input file one has to set: | ||
− | calculation="nscf" | + | calculation="nscf" # kpts sampling BZ |
or | or | ||
calculation="bands" # kpts along lines | calculation="bands" # kpts along lines | ||
− | K-points (and number of bands if relevant) need to be specified according to the specific needs. See below for bands and DOS. | + | Some comments: |
+ | * <code>bands</code> is also a nscf-calculation strictly speaking (i.e. the charge density is clearly not updated). | ||
+ | * It differs from <code>calculation="nscf"</code> since there is not even the requirement of a uniform k-sampling (k-points can be computed along special directions, or just at any place in the BZ). | ||
+ | * In this perspective, <code>nscf</code> runs can evaluate integrated quantities like an update of the Fermi energy. | ||
+ | * During nscf (as well as bands) KS eigenvalues are diagonal to full accuracy (<code>diago_full_acc=.true.</code> by default), at variance with scf calculations, where accuracy is lowered for empty states (not relevant to compute the density not the total energy). | ||
+ | * While one could set <code>diago_full_acc=.true.</code> in scf runs, it is anyway highly recommended to run a second nscf calculation to perform BZ refinements or increase the number of state for plotting or inspection. | ||
+ | * K-points (and number of bands if relevant) need to be specified according to the specific needs. See below for bands and DOS. | ||
− | + | ||
+ | ==DOS== | ||
In this case a uniform k-point sampling is needed, similarly to scf calculations. | In this case a uniform k-point sampling is needed, similarly to scf calculations. | ||
Line 37: | Line 44: | ||
Setting <code>calculation="nscf"</code> is a good choice. | Setting <code>calculation="nscf"</code> is a good choice. | ||
− | ===Band structure | + | Once the KS data have been produced by using <code>pw.x</code>, we can take advantage of a post-processing utility of QE, |
+ | <code>dos.x</code> to compute the actual DOS | ||
+ | |||
+ | $> dos.x < dos.in > dos.out | ||
+ | |||
+ | where a typical input file contains the following information: | ||
+ | $> cat dos.in | ||
+ | |||
+ | &DOS | ||
+ | prefix = 'diamond' | ||
+ | outdir = './SCRATCH/' | ||
+ | |||
+ | degauss=0.01 ! [Ry] broadening parameter | ||
+ | |||
+ | [ Emin=val ! min/max/step of the energy grid | ||
+ | Emax=val | ||
+ | deltaE=val | ||
+ | ] | ||
+ | fildos = 'dos.diamond.dat' | ||
+ | / | ||
+ | |||
+ | The output file can then be visualised using some standard tools as described in [[Plotting and visualization tools]]. | ||
+ | |||
+ | |||
+ | ==Band structure== | ||
Input example (pw.x) to obtain band data: | Input example (pw.x) to obtain band data: | ||
Line 52: | Line 83: | ||
K_POINTS {automatic} | K_POINTS {automatic} | ||
20 20 20 0 0 0 | 20 20 20 0 0 0 | ||
+ | |||
+ | |||
+ | ==Examples and Exercises== |
Revision as of 08:02, 16 December 2020
Prev: LabQSM#Lecture 1: Basic DFT calculations and Convergences
Non self-consistent calculations: Intro
Once the charge density has been obtained in a scf run, more calculations can be performed at fixed density (non-scf). Among these:
- calculations of Kohn-Sham energies and orbitals on any given set of k-points (i.e. without specific aim of represent a reasonable sampling of the BZ);
- calculations as above, also increasing the number of computed (= diagonalized) bands (incl the calculation of empty Kohn-Sham states);
- Importantly, nscf calculations are typically done to plot KS bands or compute the DOS,
- but also as a preliminary step to other calculations (e.g. uniform k-point samplings and large amounts of empty states are using in GW and other many-body perturbation theory algorithms implemented with sum-over-states techniques)
In the Quantum ESPRESSO input file one has to set:
calculation="nscf" # kpts sampling BZ
or
calculation="bands" # kpts along lines
Some comments:
bands
is also a nscf-calculation strictly speaking (i.e. the charge density is clearly not updated).- It differs from
calculation="nscf"
since there is not even the requirement of a uniform k-sampling (k-points can be computed along special directions, or just at any place in the BZ). - In this perspective,
nscf
runs can evaluate integrated quantities like an update of the Fermi energy. - During nscf (as well as bands) KS eigenvalues are diagonal to full accuracy (
diago_full_acc=.true.
by default), at variance with scf calculations, where accuracy is lowered for empty states (not relevant to compute the density not the total energy). - While one could set
diago_full_acc=.true.
in scf runs, it is anyway highly recommended to run a second nscf calculation to perform BZ refinements or increase the number of state for plotting or inspection. - K-points (and number of bands if relevant) need to be specified according to the specific needs. See below for bands and DOS.
DOS
In this case a uniform k-point sampling is needed, similarly to scf calculations.
A proper sampling of the BZ is then performed, but the density is not updated.
Input example (pw.x
executable) to prepare for DOS calculations:
[...] K_POINTS {automatic} 20 20 20 0 0 0
By doing this we are de fact performing a refinement of the BZ sampling.
Setting calculation="nscf"
is a good choice.
Once the KS data have been produced by using pw.x
, we can take advantage of a post-processing utility of QE,
dos.x
to compute the actual DOS
$> dos.x < dos.in > dos.out
where a typical input file contains the following information:
$> cat dos.in
&DOS prefix = 'diamond' outdir = './SCRATCH/' degauss=0.01 ! [Ry] broadening parameter [ Emin=val ! min/max/step of the energy grid Emax=val deltaE=val ] fildos = 'dos.diamond.dat' /
The output file can then be visualised using some standard tools as described in Plotting and visualization tools.
Band structure
Input example (pw.x) to obtain band data:
K_POINTS {crystal_b} 6
0.500 0.500 0.000 40 # X 0.000 0.000 0.000 40 # G 0.500 0.500 0.500 40 # L 0.750 0.500 0.250 40 # W 0.750 0.375 0.375 40 # K 0.000 0.000 0.000 1 # G
Input example (pw.x) to obtain dos data: K_POINTS {automatic} 20 20 20 0 0 0