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)
 
(54 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Available|6.6.0}}
It is possible to restart [[phonons from finite differences|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]]. Here, we will concern ourselves with restarting and splitting finite difference calculations.  
{{NB|important|This feature requires [[:Category:HDF5_support | HDF5 support]].}}
{{NB|mind|This can only be done using {{TAG|IBRION|6}}. We recommend using this generally over {{TAG|IBRION|5}}.}}
Since VASP 6.6.0, it has been possible to restart finite difference calculations using {{TAG|IBRION|6}} and {{TAG|CHECKPOINT}}. The displacements are written to a {{FILE|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.  
There are several options for the {{TAG|CHECKPOINT_FD}} tag. The default is {{TAG|CHECKPOINT_FD|RESET}}, which creates a new {{FILE|vaspcheckfd.h5}} file and updates the file during the calculation after each displacement. {{TAG|CHECKPOINT_FD|CONTINUE}} continues from the last completed displacement and {{TAG|CHECKPOINT_FD|PREPARE}} creates the displacements and stops after the electronic minimization for the equilibrium structure. {{TAG|CHECKPOINT_FD|SINGLE}} is used to run individual displacements.
{{NB|important|This can only be done using {{TAG|IBRION|6}} currently. We recommend using this generally over {{TAG|IBRION|5}}.}}


== Input ==
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].


There are several options for the {{TAG|CHECKPOINT}} tag:
<div class="toccolours mw-customtoggle-script">'''Click to see POSCAR and INCAR'''</div>
*{{TAG|CHECKPOINT|LEGACY}} - finite difference calculation are performed as those in VASP 6.5.1. No {{FILE|vaspcheck.h5}} is written.
<div class="mw-collapsible mw-collapsed" id="mw-customcollapsible-script">
*{{TAG|CHECKPOINT|RESET}} ''(default)'' - The {{FILE|vaspcheck.h5}} file is overwritten or created, and the displacements are written to it.
*{{TAG|CHECKPOINT|CONTINUE}} - used for restarting a finite differences calculation from a {{FILE|vaspcheck.h5}} file.
*{{TAG|CHECKPOINT|PREPARE}} - used for splitting a finite differences calculation.
*{{TAG|CHECKPOINT|SINGLE}} - used for running a single displacement after splitting with {{TAG|CHECKPOINT|PREPARE}}.


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]:
<pre>
 
<syntaxhighlight>
C18
C18
1.0
1.0
Line 42: Line 35:
   0.8888888888888866    0.4444444444444466    0.0000000000000000 C
   0.8888888888888866    0.4444444444444466    0.0000000000000000 C
   0.8888888888888866    0.7777777777777799    0.0000000000000000 C
   0.8888888888888866    0.7777777777777799    0.0000000000000000 C
</syntaxhighlight>
</pre>


along with a 4x4x1 '''k'''-mesh in our {{FILE|KPOINTS}} file:
along with a 4x4x1 '''k'''-mesh in our {{FILE|KPOINTS}} file:


<syntaxhighlight>
<pre>
K points
K points
  0
  0
Line 52: Line 45:
4  4  1
4  4  1
0  0  0
0  0  0
</syntaxhighlight>
</pre>
 
and <code>PAW C_s 04May1998</code> {{FILE|POTCAR}}.


and <code>PAW C_s 04May1998</code> {{FILE|POTCAR}}. We can use the following {{FILE|INCAR}} file:
The following {{FILE|INCAR}} file with modifications will be used thoughout:


  {{TAGBL|SYSTEM}} = graphene
  {{TAGBL|SYSTEM}} = graphene
Line 72: Line 67:
  {{TAGBL|IBRION}} = 6
  {{TAGBL|IBRION}} = 6
  {{TAGBL|POTIM}} = 0.015
  {{TAGBL|POTIM}} = 0.015
</div>
== Restarting a finite difference calculation ==


== Output ==
The calculation failed after a certain point or has accidentally been cancelled:
 
=== Restarting a finite difference calculation ===
 
We assume that this calculation has failed after a certain point or accidentally been cancelled:


<syntaxhighlight>
DAV:  9    -0.181350430125E+03  -0.25600E-06  -0.38452E-08  848  0.118E-03    0.774E-04
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:  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
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.
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: *** 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 ***
slurmstepd-test01: error: *** STEP 254054.0 ON test01 CANCELLED AT 2026-01-19T16:25:49 ***
</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:
In the directory, you will see the {{FILE|vaspcheckfd.h5}} file. It contains the displacement calculations that have been completed up to the point of the crash:


  h5ls vaspcheck.h5
  h5ls vaspcheckfd.h5
   
   
  data-1                  Group
  data-1                  Group
Line 96: Line 87:
  symmetry                Group
  symmetry                Group


The calculation can then be restarted by adding {{TAG|CHECKPOINT|CONTINUE}} to the {{FILE|INCAR}}:
Restart the calculation by adding {{TAG|CHECKPOINT_FD|CONTINUE}} to the {{FILE|INCAR}}:


  {{TAGBL|SYSTEM}} = graphene
  {{TAGBL|SYSTEM}} = graphene
Line 114: Line 105:
  {{TAGBL|IBRION}} = 6
  {{TAGBL|IBRION}} = 6
  {{TAGBL|POTIM}} = 0.015
  {{TAGBL|POTIM}} = 0.015
  {{TAGBL|CHECKPOINT}} = CONTINUE
  {{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:
and resubmit your calculation in the directory. The finite differences calculation will continue after an SCF step has been done and the ''stdout'' reads


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


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


  h5ls vaspcheck.h5
  h5ls vaspcheckfd.h5
   
   
  data-1                  Group
  data-1                  Group
Line 133: Line 122:
  symmetry                Group
  symmetry                Group


== Practical hints ==
== Splitting a finite difference calculation ==
 
For large structures, it may be easier to split the displacements into separate calculations. This is done in three steps:
 
# Preparing the separate displacements - {{TAG|CHECKPOINT_FD|PREPARE}}
# Single displacement calculations - {{TAG|CHECKPOINT_FD|SINGLE}}
# Collected finite differences - {{TAG|CHECKPOINT_FD|CONTINUE}}
 
=== 1. Preparing the displacements ===
The displacements can be prepared using the {{TAG|CHECKPOINT_FD|PREPARE}} tag:
 
{{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.
# ionic (finite differences)
{{TAGBL|IBRION}} = 6
{{TAGBL|POTIM}} = 0.015
{{TAGBL|CHECKPOINT_FD}} = PREPARE
 
This creates {{FILE|CONTCAR_disp-N}} files containing each of the displacements in the parent directory and you can see the following in the '''stdout''':
 
Creating CONTCAR files for finite difference displacements
 
and in the {{FILE|vaspcheckfd.h5}} file:
 
h5ls vaspcheckfd.h5
metadata                Group
subdir_prefix            Dataset {SCALAR}
total_count              Dataset {SCALAR}
 
=== 2. Single displacement calculations ===
Create directories '''disp-N''' for each of the {{FILE|CONTCAR_disp-N}} file and run the calculations separately. To this end, copy all restart files in the subdirectory, rename {{FILE|CONTCAR_disp-N}} to {{FILE|POSCAR}}, set {{TAG|CHECKPOINT_FD|SINGLE}} in the {{FILE|INCAR}} file and run the calculation:
 
<syntaxhighlight lang="bash">
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 vasp.run disp-$i/
  sed -i 's/PREPARE/SINGLE/g' disp-$i/INCAR
  echo """
NCORE = 4
ICHARG = 1
LCHARG = F
""" >> disp-$i/INCAR
  ln -s ../CHGCAR disp-$i/CHGCAR
done
</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.
# ionic (finite differences)
{{TAGBL|IBRION}} = 6
{{TAGBL|POTIM}} = 0.015
{{TAGBL|CHECKPOINT_FD}} = SINGLE
{{TAGBL|NCORE}} = 4
{{TAGBL|ICHARG}} = 1
{{TAGBL|LCHARG}} = F
{{NB|important|You can set different {{TAG|NCORE}} settings in these calculations, offering parallelization that is not otherwise possible for finite differences.}}
{{NB|tip|It is optional to restart from {{FILE|WAVECAR}} or {{FILE|CHGCAR}} files.}}
In each subdirectory, you can see that a single displacement has been recorded in the '''stdout''':
 
Computing single independent displacement for finite differences


The computation of the second-order force constants requires accurate [[:Category:Forces|forces]].
and to the {{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
 
data-1                  Group


To get the phonon frequencies quickly on the command line, simply type the following:
=== 3. Collected finite differences ===
grep THz OUTCAR
Return to the parent directory and combine these separate displacements into one finite difference calculation using the {{TAG|CHECKPOINT_FD|CONTINUE}} tag:


To get an accurate phonon dispersion, perform the force-constants calculation in a large enough supercell.
{{TAGBL|SYSTEM}} = graphene
When increasing the size of the supercell, we recommend decreasing the '''k'''-point density in the {{FILE|KPOINTS}} file to yield the same resolution.
{{TAGBL|ENCUT}} = 400
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.
# 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|It is possible to combine the finite difference calculations in a different directory but you must include the {{FILE|vaspcheckfd.h5}} from the '''prepare''' step (as it contains the name of the subdirectories as metadata) and the subdirectories including the corresponding {{FILE|vaspcheckfd.h5}}.}}
Running this calculation, you can see that each of the '''single''' displacements are combined into one calculation in the ''stdout'':


It is possible to use phonopy{{cite|phonopy}} to post-process the results of a finite differences calculation done with VASP.{{cite|phonopy_dfpt}}
  Combining displacements from subdirectories
{{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.
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.
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.


== Related tags and sections ==
and {{FILE|vaspcheckfd.h5}} file:
{{TAG|IBRION}},
 
{{TAG|ISIF}},
h5ls vaspcheckfd.h5
{{TAG|POTIM}},
metadata                Group
subdir_prefix            Dataset {SCALAR}
total_count              Dataset {SCALAR}
 
The information about the computed phonon modes is written to ''stdout'' and {{FILE|OUTCAR}} file below <code>Eigenvectors and eigenvalues of the dynamical matrix</code> in the same way as in [[phonons from finite differences]].
 
== 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 [[:Category:electron-phonon interactions | electron-phonon]] calculations.
* You can set different {{TAG|NCORE}} settings in these calculations, offering parallelization that is not otherwise available 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:


[[Phonons: Theory]]
  -----------------------------------------------------------------------------
|                                                                            |
|    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 {{FILE|CHGCAR}} file from the parent directory of the split calculation for the individual displacements to speed up the calculation. Link this with <code>ln -s ../CHGCAR</code>, set {{TAG|LCHARG|.FALSE.}} so that the original charge density is not overwritten. Also set {{TAG|ICHARG|1}} so that the charge density is used, rather than starting from scratch.


[[Phonons from density-functional-perturbation theory]], [[Computing the phonon dispersion and DOS]]
== Related tags and sections ==
{{TAG|CHECKPOINT_FD}},
{{FILE|vaspcheckfd.h5}},
{{TAG|IBRION}},
{{FILE|CONTCAR_disp-N}}


== References==
[[Phonons from finite differences]]
<references/>


[[Category:Phonons]][[Category:Howto]]
[[Category:Phonons]][[Category:Howto]]

Latest revision as of 11:33, 16 March 2026

It is 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. Here, we will concern ourselves with restarting and splitting finite difference calculations.

There are several options for the CHECKPOINT_FD tag. The default is CHECKPOINT_FD = RESET, which creates a new vaspcheckfd.h5 file and updates the file during the calculation after each displacement. CHECKPOINT_FD = CONTINUE continues from the last completed displacement and CHECKPOINT_FD = PREPARE creates the displacements and stops after the electronic minimization for the equilibrium structure. CHECKPOINT_FD = SINGLE is used to run individual displacements.

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.

Click to see POSCAR and INCAR
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

Restarting a finite difference calculation

The calculation failed after a certain point or has 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 ***

In the directory, you will see the vaspcheckfd.h5 file. It contains the displacement calculations that have been completed up to the point of the crash:

h5ls vaspcheckfd.h5

data-1                   Group
displacements            Group
symmetry                 Group

Restart the calculation 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

and resubmit your calculation in the directory. The finite differences calculation will continue after an SCF step has been done and the stdout reads

Continuing from previous run

The calculation finishes as normal when 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 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.

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

This creates CONTCAR_disp-N files containing each of the displacements in the parent directory and you can see the following in the stdout:

Creating CONTCAR files for finite difference displacements

and in the vaspcheckfd.h5 file:

h5ls vaspcheckfd.h5

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

2. Single displacement calculations

Create directories disp-N for each of the CONTCAR_disp-N file and run the calculations separately. To this end, copy all restart files in the subdirectory, rename CONTCAR_disp-N to POSCAR, set CHECKPOINT_FD = SINGLE in the INCAR file and run the calculation:

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 vasp.run disp-$i/
  sed -i 's/PREPARE/SINGLE/g' disp-$i/INCAR
  echo """
NCORE = 4 
ICHARG = 1
LCHARG = F
""" >> disp-$i/INCAR
  ln -s ../CHGCAR disp-$i/CHGCAR
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.

# ionic (finite differences)
IBRION = 6
POTIM = 0.015
CHECKPOINT_FD = SINGLE
NCORE = 4
ICHARG = 1
LCHARG = F

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

Return to the parent directory and 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

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}

The information about the computed phonon modes is written to stdout and OUTCAR file below Eigenvectors and eigenvalues of the dynamical matrix in the same way as in phonons from finite differences.

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 available 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 CHGCAR file from the parent directory of the split calculation for the individual displacements to speed up the calculation. Link this with ln -s ../CHGCAR, set LCHARG = .FALSE. so that the original charge density is not overwritten. Also set ICHARG = 1 so that the charge density is used, rather than starting from scratch.

Related tags and sections

CHECKPOINT_FD, vaspcheckfd.h5, IBRION, CONTCAR_disp-N

Phonons from finite differences