Restarting finite differences calculations: Difference between revisions

From VASP Wiki
No edit summary
 
(44 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Available|6.6.0}}
{{Available|6.6.0}}
Since VASP 6.6.0, it has been possible to restart finite difference calculations. For a detailed tutorial
{{NB|important|This feature requires [[:Category:HDF5_support | HDF5 support]].}}
Since VASP 6.6.0, it has been possible to restart finite difference calculations using {{TAG|IBRION|6}} and {{TAG|CHECKPOINT_FD}}. The displacements are written to a {{FILE|vaspcheckfd.h5}} file. For details of a general finite difference calculation, see the [[phonons from finite differences]]. In this HowTo, we will concern ourselves with restarting and splitting finite difference calculations.
{{NB|mind|This can only be done using {{TAG|IBRION|6}} currently. We recommend using this generally over {{TAG|IBRION|5}}.}}


The phonon calculations using a [[Phonons:_Theory#Finite_differences|finite differences approach]] are carried out by setting [[IBRION#ibrion56|'''IBRION'''=5 or 6]] in the {{TAG|INCAR}} file.
== Input ==
When these tags are set, the second-order force constants are computed using finite differences. The [[Phonons:_Theory#DynamicalMatrix|dynamical matrix]] is constructed, diagonalized and the phonon modes and frequencies of the system are reported in the {{FILE|OUTCAR}} file.
 
If {{TAG|ISIF}}>=3, the internal strain tensors are computed as well.
There are several options for the {{TAG|CHECKPOINT_FD}} tag:
{{NB|mind|Only zone-center (Γ-point) frequencies are calculated.}}
*{{TAG|CHECKPOINT_FD|NONE}} - disables checkpoint functionality entirely, reproducing the behavior of VASP before 6.6.0. No {{FILE|vaspcheckfd.h5}} file is written.
It is possible to [[Computing_the_phonon_dispersion_and_DOS |obtain the phonon dispersion at different '''q''' points]] by computing the second-order force constants on a sufficiently large supercell and Fourier interpolating the dynamical matrices in the unit cell.
*{{TAG|CHECKPOINT_FD|RESET}} ''(default)'' - overwrites the {{FILE|vaspcheckfd.h5}} file and then updates the file during the calculation after each displacement.
*{{TAG|CHECKPOINT_FD|CONTINUE}} - reads the existing {{FILE|vaspcheckfd.h5}} file (creating a new one if it is not present) and continues from the last completed displacement. Once all displacements are completed, it will perform a single SCF at the equilibrium structure and read all displacement data from the checkpoint file, detecting whether the calculation was done in one run or was split (all displacements must be completed otherwise, an error will be given).
used for restarting a finite differences calculation from a {{FILE|vaspcheckfd.h5}} file.
*{{TAG|CHECKPOINT_FD|PREPARE}} - creates or overwrites the {{FILE|vaspcheckfd.h5}} file. For each displacement, a {{FILE|CONTCAR_disp-N}} file is written containing the atomic positions for displacement N.
VASP then stops after completing one SCF cycle for the equilibrium structure.
used for splitting a finite differences calculation.
*{{TAG|CHECKPOINT_FD|SINGLE}} - used for running the individual displacement calculations created by {{TAG|CHECKPOINT_FD|PREPARE}}. Each run produces a local {{FILE|vaspcheckfd.h5}} file in its directory for that specific displacement.
 
We will describe the restart procedure and splitting a calculation below. As an example, we take a 3x3x1 graphene supercell {{FILE|POSCAR}} file from the [https://www.vasp.at/tutorials/latest/phonon/part1/#phonon-e02 phonon tutorials]:
 
<syntaxhighlight>
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
</syntaxhighlight>
 
along with a 4x4x1 '''k'''-mesh in our {{FILE|KPOINTS}} file:
 
<syntaxhighlight>
K points
0
Gamma
4  4  1
0  0  0
</syntaxhighlight>
 
and <code>PAW C_s 04May1998</code> {{FILE|POTCAR}}.
 
The following {{FILE|INCAR}} file with modifications will be used thoughout:
 
{{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
 
== 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 {{FILE|vaspcheckfd.h5}} file. Inside, it will contain the displacement calculations that have been completed up to the point of the crash:
 
h5ls vaspcheckfd.h5
data-1                  Group
displacements            Group
symmetry                Group
 
The calculation can then be restarted by adding {{TAG|CHECKPOINT_FD|CONTINUE}} to the {{FILE|INCAR}}:
 
{{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_FD}} = CONTINUE
 
You can resubmit your calculation in the directory, e.g., with a job script: <code>sbatch job.sh</code>, and the finite differences calculation will continue from there after an SCF step has been done:
 
Continuing from previous run


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


There are two options to compute the second-order force constants using finite differences:
h5ls vaspcheckfd.h5
* {{TAG|IBRION}}=5, all atoms are displaced in all three Cartesian directions, resulting in a significant computational effort even for moderately sized high-symmetry systems.
* {{TAG|IBRION}}=6, only symmetry inequivalent displacements are considered, and the remainder of the force-constants matrix is filled using symmetry operations.
data-1                  Group
data-2                  Group
data-3                  Group
data-4                  Group
displacements           Group
symmetry                 Group


{{TAG|POTIM}} determines the step size.  If too large values are supplied in the input file, the step size defaults to 0.015 &Aring; (starting from VASP.5.1). Expertise shows that this is a very reasonable compromise.
=== Splitting a finite difference calculation ===


The {{TAG|NFREE}} tag determines how many displacements are used for each direction and ion:
For some large structures, it may be easier to split the displacements into separate calculations. This is done in three steps:
*{{TAG|NFREE}}=2 uses central differences, ''i.e.'', each ion is displaced by a small positive and negative displacement, &plusmn;{{TAG|POTIM}}, along each of the Cartesian directions.
*{{TAG|NFREE}}=4 uses four displacements along each of the Cartesian directions &plusmn;{{TAG|POTIM}} and &plusmn;2&times;{{TAG|POTIM}}.
*{{TAG|NFREE}}=1 uses a single displacement (this is strongly discouraged).


If {{TAG|ISIF}}>=3, the elastic and internal strain tensors are computed.
# Preparing the separate displacements - {{TAG|CHECKPOINT_FD|PREPARE}}
# Single displacement calculations - {{TAG|CHECKPOINT_FD|SINGLE}}
# Collected finite differences - {{TAG|CHECKPOINT_FD|CONTINUE}}


The selective dynamics mode of the {{FILE|POSCAR}} file is presently only supported for {{TAG|IBRION}}=5; in this case, only those components of the Hessian matrix are calculated for which the selective dynamics tags are set to .TRUE. in the {{FILE|POSCAR}} file.
==== 1. Preparing the displacements ====
{{NB|important|The selective dynamics always refer to the Cartesian components of the Hessian matrix, contrary to the behavior during ionic relaxation.}} For the following {{FILE|POSCAR}} file, for instance,
The displacements can be prepared using the {{TAG|CHECKPOINT_FD|PREPARE}} tag:


  Cubic BN
  {{TAGBL|SYSTEM}} = graphene
    3.57
{{TAGBL|ENCUT}} = 400
  0.0 0.5 0.5
  0.5 0.0 0.5
# electronic
  0.5 0.5 0.0
{{TAGBL|PREC}} = Accurate
    1 1
{{TAGBL|NELMIN}} = 5
  selective
{{TAGBL|EDIFF}} = 1e-8
  Direct
{{TAGBL|ISMEAR}} = -1
  0.00 0.00 0.00  F F F
{{TAGBL|SIGMA}} = 0.2
  0.25 0.25 0.25 T F F
{{TAGBL|LREAL}} = .FALSE.
{{TAGBL|LWAVE}} = .FALSE.
{{TAGBL|LCHARG}} = .FALSE.
  # ionic (finite differences)
  {{TAGBL|IBRION}} = 6
{{TAGBL|POTIM}} = 0.015
  {{TAGBL|CHECKPOINT_FD}} = PREPARE


atom 2 is displaced in the ''x''-direction only, and only the ''x''-component of the second atom of the Hessian matrix is calculated.
This will create {{FILE|CONTCAR_disp-N}} files containing each of the displacements in the parent directory as you can see in the ''stdout'':


If {{TAG|LEPSILON}}=.TRUE. or {{TAG|LCALCEPS}}=.TRUE., additional dielectric properties are computed.
Creating CONTCAR files for finite difference displacements


== Output ==
and the {{FILE|vaspcheckfd.h5}} file:


The phonon modes and frequencies are written to the {{TAG|OUTCAR}} file after the following lines:
h5ls vaspcheckfd.h5
  Eigenvectors and eigenvalues of the dynamical matrix
  ----------------------------------------------------
metadata                Group
subdir_prefix            Dataset {SCALAR}
total_count              Dataset {SCALAR}


The following lines are repeated for each normal mode and should look like the following example output:
==== 2. Single displacement calculations ====
    1 f  =   14.329944 THz    90.037693 2PiTHz  477.995462 cm-1    59.263905 meV
You can then create different directories for each of these {{FILE|CONTCAR_disp-N}} and run them separately. For this, you will need to set {{TAG|CHECKPOINT_FD|SINGLE}}:
              X        Y        Z          dx          dy          dz
      0.000000  0.000000  0.000000    0.009046  -0.082007  -0.006117
      0.000000  2.731250  2.731250    0.009046    0.106244    0.006563
      0.000000  5.462500  5.462500    0.009046    0.082007    0.006117
      0.000000  8.193750  8.193750    0.009046  -0.106244  -0.006563
      ...
    2 f  =   14.329944 THz    90.037693 2PiTHz  477.995462 cm-1    59.263905 meV
              X        Y        Z          dx          dy          dz
      0.000000  0.000000  0.000000    0.003458    0.021825  -0.093181
      0.000000  2.731250  2.731250    0.003458    0.005416    0.094689
      0.000000  5.462500  5.462500    0.003458  -0.021825    0.093181
      0.000000  8.193750  8.193750    0.003458  -0.005416  -0.094689
      ...
    ...
The first number is the label of the normal mode. If this number is followed by ''f'' it is a purely real mode, stating the mode is vibrationally stable. Otherwise, if it is followed by ''f/i'', the mode is an imaginary mode ("soft mode"). These labels are followed by the eigenfrequency of the mode in different units.


The following table labeled by (''x,y,z,dx,dy,dz'') contains the Cartesian positions of the atoms and the normalized eigenvectors of the eigenmodes in Cartesian coordinates.
<syntaxhighlight lang="bash">
max=$(printf "%s\n" CONTCAR_disp-* | sed 's/.*-//' | sort -n | tail -1)


There should be 3<math>N</math> normal modes, where <math>N</math> is the number of atoms in the supercell ({{TAG|POSCAR}}). The modes are ordered in descending order with respect to the eigenfrequency. The last three modes are the translational modes (they are usually disregarded).
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
</syntaxhighlight>


Finally, {{TAG|IBRION}}=6 and {{TAG|ISIF}}&ge;3 allows to calculate the elastic constants. The elastic tensor is determined by performing six finite distortions of the lattice and deriving the elastic constants from the strain-stress relationship.{{cite|lepage:prb:2002}} The elastic tensor is calculated both, for 'clamped' ions, as well, as allowing for relaxation of the ions. The elastic moduli for rigid ions are written after the line
Each {{FILE|INCAR}} file in the directories will then look like:  


  SYMMETRIZED ELASTIC MODULI (kBar)
  {{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_FD}} = SINGLE
{{NB|important|You can set different {{TAG|NCORE}} settings in these calculations, offering parallelization that is not otherwise currently possible for finite differences.}}
In each subdirectory, you can see that a single displacement has been recorded in the ''stdout'':


The ionic contributions are determined by inverting the ionic Hessian matrix and multiplying with the internal strain tensor,{{cite|wu:prb:2005}} and the corresponding contributions are written after the lines:
Computing single independent displacement for finite differences


ELASTIC MODULI CONTR FROM IONIC RELAXATION (kBar)
and to the {{FILE|vaspcheckfd.h5}} file:


The final elastic moduli, including both, the contributions for distortions with rigid ions and the contributions from the ionic relaxations, are summarized at the very end:
h5ls vaspcheckfd.h5
 
data-1                  Group


TOTAL ELASTIC MODULI (kBar)
==== 3. Collected finite differences ====
Returning to the parent directory, you can combine these separate displacements into one finite difference calculation using the {{TAG|CHECKPOINT_FD|CONTINUE}} tag:


There are a few caveats to this approach: most notably, the plane-wave cutoff ({{TAG|ENCUT}}) needs to be sufficiently large to converge the stress tensor. This is usually only achieved if the default cutoff is increased by roughly 30%, but it is strongly recommended to increase the cutoff systematically, (e.g., in steps of 15%), until full convergence is achieved.
{{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_FD}} = CONTINUE
{{NB|warning|You can do this calculation in a different directory but you must include the {{FILE|vaspcheckfd.h5}} from the '''prepare''' step there as it contains important metadata.}}
Running this calculation, you can see that each of the '''single''' displacements are combined into one calculation in the ''stdout'':


== Practical hints ==
  Combining displacements from subdirectories


The computation of the second-order force constants requires accurate [[:Category:Forces|forces]].
and {{FILE|vaspcheckfd.h5}} file:
Therefore, the tag {{TAG|PREC}}=Accurate is recommended in the {{FILE|INCAR}}.
The {{TAG|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 {{TAG|ENCUT}}, {{TAG|PREC}}, and '''k''' point density ({{FILE|KPOINTS}}). Additionally, compare the result to [[Phonons from density-functional-perturbation theory|phonons from density-functional-perturbation theory (DFPT)]].
h5ls vaspcheckfd.h5
metadata                Group
subdir_prefix            Dataset {SCALAR}
total_count              Dataset {SCALAR}


To get the phonon frequencies quickly on the command line, simply type the following:
You can find information about the computed phonon modes under <code>Eigenvectors and eigenvalues of the dynamical matrix</code> as usual.
grep THz OUTCAR


To get an accurate phonon dispersion, perform the force-constants calculation in a large enough supercell.
== Practical hints ==
When increasing the size of the supercell, we recommend decreasing the '''k'''-point density in the {{FILE|KPOINTS}} file to yield the same resolution.
* The phonon frequencies will differ slightly between one run and the split calculation, on the order of the 4th or 5th significant figure. We do not expect this to be significant.
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.
* You can use this method for any [[:Category:electron-phonon interactions | electron-phonon]] calculations.
* You can set different {{TAG|NCORE}} settings in these calculations, offering parallelization that is not otherwise currently possible for finite differences.
* Make sure to check that you are using the correct {{FILE|vaspcheckfd.h5}} file with each calculation, particularly the split calculation. If data is read from an inappropriate {{FILE|vaspcheckfd.h5}} file, you will see it with the following warning:


It is possible to use phonopy{{cite|phonopy}} to post-process the results of a finite differences calculation done with VASP.{{cite|phonopy_dfpt}}
  -----------------------------------------------------------------------------
{{NB|tip|In contrast to [[Phonons from density-functional-perturbation theory|computing phonons within DFPT]], the finite difference approach can be used in combination with any [[Exchange-correlation functional]].}}
|                                                                            |
{{TAG|IBRION}}{{=}}5, is available as of VASP.4.5, {{TAG|IBRION}}{{=}}6 starting from VASP.5.1.
|    EEEEEEE  RRRRRR  RRRRRR  OOOOOOO  RRRRRR      ###    ###    ###    |
In some older versions (pre VASP.5.1), {{TAG|NSW}} (number of ionic steps) must be set to 1 in the {{FILE|INCAR}} file, since {{TAG|NSW}}{{=}}0 sets the {{TAG|IBRION}}{{=}}&minus;1 regardless of the value supplied in the {{FILE|INCAR}} file.
|    E        R    R  R    R  O    O  R    R    ###    ###    ###    |
Although VASP.4.6 supports {{TAG|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.
|    E        R    R  R    R  O    O  R    R    ###    ###    ###    |
|    EEEEE    RRRRRR  RRRRRR  O    O  RRRRRR      #      #      #      |
|    E        R  R    R  R    O    O  R  R                              |
|    E        R    R  R    R  O    O  R    R      ###    ###    ###    |
|     EEEEEEE  R    R  R    R  OOOOOOO  R    R    ###    ###    ###    |
|                                                                             |
|     Checkpoint file vaspcheckfd.h5 is incompatible: NIONS mismatch            |
|     (file=54, current=128). Ensure that your calculational settings are    |
|    identical between runs. In particular, check POSCAR, KPOINTS,          |
|    POTCAR, and INCAR files.                                                |
|                                                                            |
|       ---->  I REFUSE TO CONTINUE WITH THIS SICK JOB ... BYE!!! <----      |
|                                                                            |
  -----------------------------------------------------------------------------
* We recommend using the {{FILE|WAVECAR}} file from the parent directory of the split calculation for the indiviudal displacements to speed up the calculation. This can easily result in large file sizes. We recommend removing them after each displacement is calculated. E.g., for a finite differences calculation on [https://www.vasp.at/tutorials/latest/transition_states/part2/#transition_states-e07 chabazite], there are 42 atoms, resulting in 126 phonon modes, and so 252 total displacements. If loose settings and the &Gamma;-point only are used for an ab initio calculation, the {{FILE|CHG}}, {{FILE|CHGCAR}}, and {{FILE|WAVECAR}} files for the equilibrium structure are 11 MB, 16 MB, and 16 MB, respectively. This already sums to 11 GB for a relatively small calculation.


== Related tags and sections ==
== Related tags and sections ==
{{TAG|IBRION}},
{{TAG|CHECKPOINT_FD}},
{{TAG|ISIF}},
{{FILE|vaspcheckfd.h5}},
{{TAG|POTIM}},
{{TAG|IBRION}},  
{{FILE|CONTCAR_disp-N}}


[[Phonons: Theory]]
[[Phonons: Theory]]


[[Phonons from density-functional-perturbation theory]], [[Computing the phonon dispersion and DOS]]
<!--[[Category:Phonons]][[Category:Electron-phonon interactions]][[Category:Howto]]-->
 
== References==
<references/>
 
[[Category:Phonons]][[Category:Howto]]

Latest revision as of 15:07, 4 March 2026

Mind: Available as of VASP 6.6.0
Important: This feature requires HDF5 support.

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

Mind: This can only be done using IBRION = 6 currently. We recommend using this generally over IBRION = 5.

Input

There are several options for the CHECKPOINT_FD tag:

  • CHECKPOINT_FD = NONE - disables checkpoint functionality entirely, reproducing the behavior of VASP before 6.6.0. No vaspcheckfd.h5 file is written.
  • CHECKPOINT_FD = RESET (default) - overwrites the vaspcheckfd.h5 file and then updates the file during the calculation after each displacement.
  • CHECKPOINT_FD = CONTINUE - reads the existing vaspcheckfd.h5 file (creating a new one if it is not present) and continues from the last completed displacement. Once all displacements are completed, it will perform a single SCF at the equilibrium structure and read all displacement data from the checkpoint file, detecting whether the calculation was done in one run or was split (all displacements must be completed otherwise, an error will be given).

used for restarting a finite differences calculation from a vaspcheckfd.h5 file.

VASP then stops after completing one SCF cycle for the equilibrium structure. used for splitting a finite differences calculation.

  • CHECKPOINT_FD = SINGLE - used for running the individual displacement calculations created by CHECKPOINT_FD = PREPARE. Each run produces a local vaspcheckfd.h5 file in its directory for that specific displacement.

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.

The following INCAR file with modifications will be used thoughout:

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 vaspcheckfd.h5 file. Inside, it will contain the displacement calculations that have been completed up to the point of the crash:

h5ls vaspcheckfd.h5

data-1                   Group
displacements            Group
symmetry                 Group

The calculation can then be restarted by adding CHECKPOINT_FD = 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_FD = 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 vaspcheckfd.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 is done in three steps:

  1. Preparing the separate displacements - CHECKPOINT_FD = PREPARE
  2. Single displacement calculations - CHECKPOINT_FD = SINGLE
  3. Collected finite differences - CHECKPOINT_FD = CONTINUE

1. Preparing the displacements

The displacements can be prepared using the CHECKPOINT_FD = 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_FD = PREPARE

This will create CONTCAR_disp-N files containing each of the displacements in the parent directory as you can see in the stdout:

Creating CONTCAR files for finite difference displacements

and the vaspcheckfd.h5 file:

h5ls vaspcheckfd.h5

metadata                 Group
subdir_prefix            Dataset {SCALAR}
total_count              Dataset {SCALAR}

2. Single displacement calculations

You can then create different directories for each of these CONTCAR_disp-N and run them separately. For this, you will need to set CHECKPOINT_FD = SINGLE:

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_FD = SINGLE
Important: You can set different NCORE settings in these calculations, offering parallelization that is not otherwise currently possible for finite differences.

In each subdirectory, you can see that a single displacement has been recorded in the stdout:

Computing single independent displacement for finite differences

and to the vaspcheckfd.h5 file:

h5ls vaspcheckfd.h5
 
data-1                   Group

3. Collected finite differences

Returning to the parent directory, you can combine these separate displacements into one finite difference calculation using the CHECKPOINT_FD = CONTINUE 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_FD = CONTINUE
Warning: You can do this calculation in a different directory but you must include the vaspcheckfd.h5 from the prepare step there as it contains important metadata.

Running this calculation, you can see that each of the single displacements are combined into one calculation in the stdout:

 Combining displacements from subdirectories

and vaspcheckfd.h5 file:

h5ls vaspcheckfd.h5

metadata                 Group
subdir_prefix            Dataset {SCALAR}
total_count              Dataset {SCALAR}

You can find information about the computed phonon modes under Eigenvectors and eigenvalues of the dynamical matrix as usual.

Practical hints

  • The phonon frequencies will differ slightly between one run and the split calculation, on the order of the 4th or 5th significant figure. We do not expect this to be significant.
  • You can use this method for any electron-phonon calculations.
  • You can set different NCORE settings in these calculations, offering parallelization that is not otherwise currently possible for finite differences.
  • Make sure to check that you are using the correct vaspcheckfd.h5 file with each calculation, particularly the split calculation. If data is read from an inappropriate vaspcheckfd.h5 file, you will see it with the following warning:
 -----------------------------------------------------------------------------
|                                                                             |
|     EEEEEEE  RRRRRR   RRRRRR   OOOOOOO  RRRRRR      ###     ###     ###     |
|     E        R     R  R     R  O     O  R     R     ###     ###     ###     |
|     E        R     R  R     R  O     O  R     R     ###     ###     ###     |
|     EEEEE    RRRRRR   RRRRRR   O     O  RRRRRR       #       #       #      |
|     E        R   R    R   R    O     O  R   R                               |
|     E        R    R   R    R   O     O  R    R      ###     ###     ###     |
|     EEEEEEE  R     R  R     R  OOOOOOO  R     R     ###     ###     ###     |
|                                                                             |
|     Checkpoint file vaspcheckfd.h5 is incompatible: NIONS mismatch            |
|     (file=54, current=128). Ensure that your calculational settings are     |
|     identical between runs. In particular, check POSCAR, KPOINTS,           |
|     POTCAR, and INCAR files.                                                |
|                                                                             |
|       ---->  I REFUSE TO CONTINUE WITH THIS SICK JOB ... BYE!!! <----       |
|                                                                             |
 -----------------------------------------------------------------------------
  • We recommend using the WAVECAR file from the parent directory of the split calculation for the indiviudal displacements to speed up the calculation. This can easily result in large file sizes. We recommend removing them after each displacement is calculated. E.g., for a finite differences calculation on chabazite, there are 42 atoms, resulting in 126 phonon modes, and so 252 total displacements. If loose settings and the Γ-point only are used for an ab initio calculation, the CHG, CHGCAR, and WAVECAR files for the equilibrium structure are 11 MB, 16 MB, and 16 MB, respectively. This already sums to 11 GB for a relatively small calculation.

Related tags and sections

CHECKPOINT_FD, vaspcheckfd.h5, IBRION, CONTCAR_disp-N

Phonons: Theory