If you haven't done so already, carry out a geometry optimization on your material to make sure it is at a local minimum in the potential energy surface.
Calculate the WAVECAR
and CHGCAR
files via LWAVE = .True.
and LCHARG = .True.
, respectively. This is a self-consistent field (SCF) calculation.
Using your DFT-optimized structure (e.g. the CONTCAR
), upload the crystal structure to the SeeK-path GUI and click "Calculate this structure." SeeK-path will generate two important pieces of information: the standard primitive cell for the band structure calculation and its corresponding k-path. This structure may be a different representation than the one from your geometry optimization, and you must make sure you use the one that is consistent with the generated k-path.
Using the data on SeeK-path page, update your structure to have the lattice vectors and coordinates shown. To do this, I often take the CONTCAR
from the prior calculation and copy/paste the new coordinates and lattice vectors over the original. Always view the resulting structure (e.g. in VESTA) to make sure it looks right.
For the k-path, click the "VASP KPOINTS input for LDA/GGA" drop-down and copy the text to your clipboard. This will be your new KPOINTS
file. The only thing you need to change is the <...>
in the second line, which should be replaced by an integer containing the number of points you would like between each high-symmetry point. A value of 20 is typically fairly reasonable to try.
With your updated structure and your k-path, run a non-self-consistent field (NSCF) calculation in VASP. This calculation is nearly identical to a standard single-point calculation except that you need to set ICHARG = 11
to start from the previously converged CHGCAR
. You will also need to use the new KPOINTS
file you made and disable any kspacing
flags you may have been using.
An example with ASE is shown below, where KPOINTS_seekpath
and POSCAR_seekpath
are those generated from SeeK-path. Note that you need to use the development of version of ASE here to fix a bug: pip install git+https://gitlab.com/ase/ase.git
.
from shutil import copy
from quacc.calculators.vasp import Vasp
from ase.io import read
copy("KPOINTS_seekpath", "KPOINTS")
copy("/path/to/scf/WAVECAR", "WAVECAR")
copy("/path/to/scf/CHGCAR", "CHGCAR")
atoms = read("POSCAR_seekpath")
calc = Vasp(
atoms,
...,
kpts=None,
kspacing=None,
nsw=0,
icharg=11,
)
atoms.calc = calc
atoms.get_potential_energy()