Jump to content

Requests for technical support from the VASP team should be posted in the VASP Forum.

Restarting finite differences calculations: Difference between revisions

From VASP Wiki
Csheldon (talk | contribs)
Csheldon (talk | contribs)
Line 151: Line 151:
  {{TAGBL|CHECKPOINT}} = PREPARE
  {{TAGBL|CHECKPOINT}} = PREPARE


This will create {{TAGBL|CONTCAR}}_disp-N files containing each of the displacements. You can then create different directories for each of these calculations and run them separately. For this, you will need to set {{TAGBL|CHECKPOINT|SINGLE}}:
This will create {{TAGBL|CONTCAR}}_disp-N files containing each of the displacements in the parent directory:
 
h5ls vaspcheck.h5
displacements            Group
subdir_prefix            Dataset {SCALAR}
symmetry                Group
total_count              Dataset {SCALAR}
 
You can then create different directories for each of these calculations and run them separately. For this, you will need to set {{TAGBL|CHECKPOINT|SINGLE}}:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Line 160: Line 169:
   cp CONTCAR_disp-$i disp-$i/POSCAR
   cp CONTCAR_disp-$i disp-$i/POSCAR
   cp INCAR POTCAR KPOINTS CHG CHGCAR WAVECAR vasp.run disp-$i/
   cp INCAR POTCAR KPOINTS CHG CHGCAR WAVECAR vasp.run disp-$i/
   sed -i 's/prepare/single/g' disp-$i/INCAR
   sed -i 's/PREPARE/SINGLE/g' disp-$i/INCAR
done
done
</syntaxhighlight>
</syntaxhighlight>
Each {{FILE|INCAR}} file in the directories will then look like:
{{TAGBL|SYSTEM}} = graphene
{{TAGBL|ENCUT}} = 400
# electronic
{{TAGBL|PREC}} = Accurate
{{TAGBL|NELMIN}} = 5
{{TAGBL|EDIFF}} = 1e-8
{{TAGBL|ISMEAR}} = -1
{{TAGBL|SIGMA}} = 0.2
{{TAGBL|LREAL}} = .FALSE.
{{TAGBL|LWAVE}} = .FALSE.
{{TAGBL|LCHARG}} = .FALSE.
# ionic (finite differences)
{{TAGBL|IBRION}} = 6
{{TAGBL|POTIM}} = 0.015
{{TAGBL|CHECKPOINT}} = SINGLE
In each individual directory, you can see a single displacement has been recorded to the


We assume that this calculation has failed after a certain point or accidentally been cancelled:
We assume that this calculation has failed after a certain point or accidentally been cancelled:
Line 174: Line 208:
slurmstepd-test01: error: *** STEP 254054.0 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***
slurmstepd-test01: error: *** STEP 254054.0 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***
</syntaxhighlight>
</syntaxhighlight>


If you look in the directory, you will see the {{FILE|vaspcheck.h5}} file. Inside it will contain the displacement calculations that have been completed up to the point of the crash:
If you look in the directory, you will see the {{FILE|vaspcheck.h5}} file. Inside it will contain the displacement calculations that have been completed up to the point of the crash:

Revision as of 14:05, 21 January 2026

Since VASP 6.6.0, it has been possible to restart finite difference calculations using IBRION = 6 and CHECKPOINT. The displacements are written to a vaspcheck.h5 file. For details of a general finite difference calculation, see the phonons from finite differences HowTo. In this HowTo, we will concern ourselves with restarting and splitting finite difference calculations.

Input

There are several options for the CHECKPOINT tag:

  • CHECKPOINT = LEGACY - finite difference calculation are performed as those in VASP 6.5.1. No vaspcheck.h5 is written.
  • CHECKPOINT = RESET (default) - The vaspcheck.h5 file is overwritten or created, and the displacements are written to it.
  • CHECKPOINT = CONTINUE - used for restarting a finite differences calculation from a vaspcheck.h5 file.
  • CHECKPOINT = PREPARE - used for splitting a finite differences calculation.
  • CHECKPOINT = SINGLE - used for running a single displacement after splitting with CHECKPOINT = PREPARE.

We will describe the restart procedure and splitting a calculation below. As an example, we take a 3x3x1 graphene supercell POSCAR file from the phonon tutorials:

C18
1.0
   7.3521657209830806    0.0000000000000000    0.0000000000000000
  -3.6760828604915403    6.3671622872044793    0.0000000000000000
   0.0000000000000000    0.0000000000000000    8.0000000000000000
C
18
direct
   0.1111111111111133    0.2222222222222200    0.0000000000000000 C
   0.1111111111111133    0.5555555555555532    0.0000000000000000 C
   0.1111111111111133    0.8888888888888866    0.0000000000000000 C
   0.4444444444444466    0.2222222222222200    0.0000000000000000 C
   0.4444444444444466    0.5555555555555532    0.0000000000000000 C
   0.4444444444444466    0.8888888888888866    0.0000000000000000 C
   0.7777777777777801    0.2222222222222200    0.0000000000000000 C
   0.7777777777777799    0.5555555555555532    0.0000000000000000 C
   0.7777777777777799    0.8888888888888866    0.0000000000000000 C
   0.2222222222222200    0.1111111111111133    0.0000000000000000 C
   0.2222222222222200    0.4444444444444466    0.0000000000000000 C
   0.2222222222222199    0.7777777777777799    0.0000000000000000 C
   0.5555555555555532    0.1111111111111133    0.0000000000000000 C
   0.5555555555555534    0.4444444444444466    0.0000000000000000 C
   0.5555555555555532    0.7777777777777799    0.0000000000000000 C
   0.8888888888888866    0.1111111111111133    0.0000000000000000 C
   0.8888888888888866    0.4444444444444466    0.0000000000000000 C
   0.8888888888888866    0.7777777777777799    0.0000000000000000 C

along with a 4x4x1 k-mesh in our KPOINTS file:

K points
 0
Gamma
4  4  1
0  0  0

and PAW C_s 04May1998 POTCAR. We can use the following INCAR file:

SYSTEM = graphene
ENCUT = 400

# electronic
PREC = Accurate
NELMIN = 5
EDIFF = 1e-8
ISMEAR = -1
SIGMA = 0.2
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.

# ionic (finite differences)
IBRION = 6
POTIM = 0.015

Calculations

Restarting a finite difference calculation

We assume that this calculation has failed after a certain point or accidentally been cancelled:

DAV:   9    -0.181350430125E+03   -0.25600E-06   -0.38452E-08   848   0.118E-03    0.774E-04
DAV:  10    -0.181350430581E+03   -0.45554E-06   -0.20686E-08   864   0.738E-04    0.208E-04
DAV:  11    -0.181350430676E+03   -0.94857E-07   -0.22346E-09   704   0.354E-04    0.207E-04
srun: Job step aborted: Waiting up to 32 seconds for job step to finish.
slurmstepd-test01: error: *** JOB 254054 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***
slurmstepd-test01: error: *** STEP 254054.0 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***

If you look in the directory, you will see the vaspcheck.h5 file. Inside, it will contain the displacement calculations that have been completed up to the point of the crash:

h5ls vaspcheck.h5

data-1                   Group
displacements            Group
symmetry                 Group

The calculation can then be restarted by adding CHECKPOINT = CONTINUE to the INCAR:

SYSTEM = graphene
ENCUT = 400

# electronic
PREC = Accurate
NELMIN = 5
EDIFF = 1e-8
ISMEAR = -1
SIGMA = 0.2
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.

# ionic (finite differences)
IBRION = 6
POTIM = 0.015
CHECKPOINT = CONTINUE

You can resubmit your calculation in the directory, e.g., with a job script: sbatch job.sh, and the finite differences calculation will continue from there after an SCF step has been done:

Continuing from previous run

The calculation will then continue as normal until all displacements have been completed and the phonon modes calculated:

h5ls vaspcheck.h5

data-1                   Group
data-2                   Group
data-3                   Group
data-4                   Group
displacements            Group
symmetry                 Group

Splitting a finite difference calculation

For some large structures, it may be easier to split the displacements into separate calculations. This can be done with the CHECKPOINT = PREPARE tag:

SYSTEM = graphene
ENCUT = 400

# electronic
PREC = Accurate
NELMIN = 5
EDIFF = 1e-8
ISMEAR = -1
SIGMA = 0.2
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.

# ionic (finite differences)
IBRION = 6
POTIM = 0.015
CHECKPOINT = PREPARE

This will create CONTCAR_disp-N files containing each of the displacements in the parent directory:

h5ls vaspcheck.h5

displacements            Group
subdir_prefix            Dataset {SCALAR}
symmetry                 Group
total_count              Dataset {SCALAR}

You can then create different directories for each of these calculations and run them separately. For this, you will need to set CHECKPOINT:

max=$(printf "%s\n" CONTCAR_disp-* | sed 's/.*-//' | sort -n | tail -1)

for i in $(seq 1 $max); do
  mkdir -p disp-$i
  cp CONTCAR_disp-$i disp-$i/POSCAR
  cp INCAR POTCAR KPOINTS CHG CHGCAR WAVECAR vasp.run disp-$i/
  sed -i 's/PREPARE/SINGLE/g' disp-$i/INCAR
done

Each INCAR file in the directories will then look like:

SYSTEM = graphene
ENCUT = 400

# electronic
PREC = Accurate
NELMIN = 5
EDIFF = 1e-8
ISMEAR = -1
SIGMA = 0.2
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.

# ionic (finite differences)
IBRION = 6
POTIM = 0.015
CHECKPOINT = SINGLE

In each individual directory, you can see a single displacement has been recorded to the



We assume that this calculation has failed after a certain point or accidentally been cancelled:

DAV:   9    -0.181350430125E+03   -0.25600E-06   -0.38452E-08   848   0.118E-03    0.774E-04
DAV:  10    -0.181350430581E+03   -0.45554E-06   -0.20686E-08   864   0.738E-04    0.208E-04
DAV:  11    -0.181350430676E+03   -0.94857E-07   -0.22346E-09   704   0.354E-04    0.207E-04
srun: Job step aborted: Waiting up to 32 seconds for job step to finish.
slurmstepd-test01: error: *** JOB 254054 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***
slurmstepd-test01: error: *** STEP 254054.0 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***


If you look in the directory, you will see the vaspcheck.h5 file. Inside it will contain the displacement calculations that have been completed up to the point of the crash:

h5ls vaspcheck.h5

data-1                   Group
displacements            Group
symmetry                 Group

The calculation can then be restarted by adding CHECKPOINT = CONTINUE to the INCAR:

SYSTEM = graphene
ENCUT = 400

# electronic
PREC = Accurate
NELMIN = 5
EDIFF = 1e-8
ISMEAR = -1
SIGMA = 0.2
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.

# ionic (finite differences)
IBRION = 6
POTIM = 0.015
CHECKPOINT = CONTINUE

You can resubmit your calculation in the directory, e.g., with a job script: sbatch job.sh, and the finite differences calculation will continue from there after an SCF step has been done:

Found     2 degrees of freedom:
Finite differences POTIM= 0.01500 DOF=   2
Continuing from previous run

The calculation will then continue as normal until all displacements have been completed and the phonon modes calculated:

h5ls vaspcheck.h5

data-1                   Group
data-2                   Group
data-3                   Group
data-4                   Group
displacements            Group
symmetry                 Group

Practical hints

The computation of the second-order force constants requires accurate forces. Therefore, the tag PREC=Accurate is recommended in the INCAR. The ADDGRID=TRUE should not be set without careful testing.

A practical way to check for convergence is to monitor the Γ point (q=0) optical mode frequencies while varying the ENCUT, PREC, and k point density (KPOINTS). Additionally, compare the result to phonons from density-functional-perturbation theory (DFPT).

To get the phonon frequencies quickly on the command line, simply type the following:

grep THz OUTCAR

To get an accurate phonon dispersion, perform the force-constants calculation in a large enough supercell. When increasing the size of the supercell, we recommend decreasing the k-point density in the KPOINTS file to yield the same resolution. For example, for the primitive cell of silicon, a 12x12x12 Gamma-centered k-point mesh is needed to obtain accurate phonon frequencies at the Gamma point. When replicating the unit cell to a 2x2x2 supercell, a 6x6x6 k point mesh will produce an equivalent sampling. For a 4x4x4 supercell, a 3x3x3 k point mesh will suffice.

It is possible to use phonopy[1] to post-process the results of a finite differences calculation done with VASP.[2]

IBRION=5, is available as of VASP.4.5, IBRION=6 starting from VASP.5.1. In some older versions (pre VASP.5.1), NSW (number of ionic steps) must be set to 1 in the INCAR file, since NSW=0 sets the IBRION=−1 regardless of the value supplied in the INCAR file. Although VASP.4.6 supports IBRION=5-6, VASP.4.6 does not change the set of k points automatically (often the displaced configurations require a different k-point grid). Hence, the finite difference routine might yield incorrect results in VASP.4.6.

Related tags and sections

IBRION, ISIF, POTIM,

Phonons: Theory

Phonons from density-functional-perturbation theory, Computing the phonon dispersion and DOS

References