Phonon computations

This is a quick sketch how to run a simple phonon calculation using DFTK.

Preliminary implementation

Practical phonon computations have only seen rudimentary testing as of now. As of now we do not yet recommend relying on this feature for production calculations. Some of the limitations are:

  • symmetries must be disabled (pass symmetries=false to the model)
  • only LDA functionals are supported
  • non-linear core corrections from the pseudopotentials are not supported
  • MPI parallelization over k-points is not supported (due to $k$ and $k+q$ interactions)

We appreciate any issues, bug reports or PRs.

First we run an SCF calculation.

using AtomsBuilder
using DFTK
using Printf
using PseudoPotentialData

pseudopotentials = PseudoFamily("cp2k.nc.sr.lda.v0_1.semicore.gth")
# Make sure to disable symmetries:
model  = model_DFT(bulk(:Si); pseudopotentials, functionals=LDA(), symmetries=false)
basis  = PlaneWaveBasis(model; Ecut=10, kgrid=[4, 4, 4])
scfres = self_consistent_field(basis, tol=1e-8);
nothing  # hide
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime 
---   ---------------   ---------   ---------   ----   ------
  1   -7.916288423073                   -0.69    4.0    619ms
  2   -7.921172573963       -2.31       -1.52    1.0    258ms
  3   -7.921410979478       -3.62       -2.47    1.5    309ms
  4   -7.921440944166       -4.52       -2.87    2.2    457ms
  5   -7.921441815252       -6.06       -3.24    1.1    862ms
  6   -7.921442009038       -6.71       -4.48    1.1    270ms
  7   -7.921442022048       -7.89       -4.99    2.5    418ms
  8   -7.921442022133      -10.07       -5.26    1.6    289ms
  9   -7.921442022143      -11.02       -5.87    1.0    259ms
 10   -7.921442022144      -11.89       -6.35    1.6    332ms
 11   -7.921442022144      -12.88       -6.94    1.4    301ms
 12   -7.921442022144      -13.80       -7.59    1.8    330ms
 13   -7.921442022144   +  -14.75       -8.46    1.8    335ms

Next we compute the phonon modes at the q-point [1/4, 1/4, 1/4].

phret_q0 = @time DFTK.phonon_modes(scfres; q=[0.25, 0.25, 0.25]);
nothing  # hide
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.91s  Non-interacting
   1        0       1        1.03     15.2   12.7s  
   2        0       2        0.53     14.5   1.08s  
   3        0       3       -0.01     14.1   1.01s  
   4        0       4       -0.87     13.7   995ms  
   5        0       5       -1.74     11.8   884ms  
   6        0       6       -2.43     10.0   772ms  
   7        0       7       -3.33      8.9   708ms  
   8        0       8       -4.02      7.8   657ms  
   9        0       9       -5.04      6.4   562ms  
  10        0      10       -6.06      3.9   413ms  
  11        0      11       -7.08      2.3   339ms  
  12        0      12       -8.28      1.0   267ms  
  13        1       1       -7.54     17.8   1.57s  Restart
  14        1       2       -7.88      3.2   357ms  
  15        1       3       -8.67      2.1   308ms  
                                      19.2   1.95s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.22s  Non-interacting
   1        0       1        1.03     15.2   1.18s  
   2        0       2        0.53     14.5   1.76s  
   3        0       3       -0.01     14.1   1.03s  
   4        0       4       -0.87     13.8   1.04s  
   5        0       5       -1.74     11.8   874ms  
   6        0       6       -2.43     10.0   766ms  
   7        0       7       -3.33      8.9   701ms  
   8        0       8       -4.02      7.8   653ms  
   9        0       9       -5.04      6.5   570ms  
  10        0      10       -6.06      3.9   414ms  
  11        0      11       -7.08      2.3   330ms  
  12        0      12       -8.27      1.0   261ms  
  13        1       1       -7.52     17.8   1.41s  Restart
  14        1       2       -7.88      3.2   335ms  
  15        1       3       -8.69      2.1   290ms  
                                      19.2   1.31s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.20s  Non-interacting
   1        0       1        1.03     15.2   1.17s  
   2        0       2        0.53     14.6   1.08s  
   3        0       3       -0.01     14.1   1.05s  
   4        0       4       -0.87     13.8   1.04s  
   5        0       5       -1.74     11.8   924ms  
   6        0       6       -2.43     10.0   810ms  
   7        0       7       -3.33      8.9   738ms  
   8        0       8       -4.02      7.9   674ms  
   9        0       9       -5.04      6.4   583ms  
  10        0      10       -6.06      3.9   422ms  
  11        0      11       -7.08      2.3   344ms  
  12        0      12       -8.26      1.0   265ms  
  13        1       1       -7.52     17.9   1.47s  Restart
  14        1       2       -7.85      3.2   345ms  
  15        1       3       -8.69      2.1   297ms  
                                      19.2   1.96s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.15s  Non-interacting
   1        0       1        1.03     15.2   1.10s  
   2        0       2        0.53     14.5   1.02s  
   3        0       3       -0.01     14.1   1.00s  
   4        0       4       -0.87     13.7   990ms  
   5        0       5       -1.74     11.8   880ms  
   6        0       6       -2.43     10.0   767ms  
   7        0       7       -3.33      8.9   706ms  
   8        0       8       -4.02      7.8   651ms  
   9        0       9       -5.04      6.4   563ms  
  10        0      10       -6.06      3.9   419ms  
  11        0      11       -7.08      2.3   334ms  
  12        0      12       -8.28      1.0   265ms  
  13        1       1       -7.54     17.8   1.41s  Restart
  14        1       2       -7.88      3.2   334ms  
  15        1       3       -8.68      2.1   298ms  
                                      19.2   1.30s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.20s  Non-interacting
   1        0       1        1.03     15.2   1.17s  
   2        0       2        0.53     14.5   1.07s  
   3        0       3       -0.01     14.1   1.06s  
   4        0       4       -0.87     13.8   1.04s  
   5        0       5       -1.74     11.8   918ms  
   6        0       6       -2.43     10.0   805ms  
   7        0       7       -3.33      8.9   738ms  
   8        0       8       -4.02      7.8   674ms  
   9        0       9       -5.04      6.5   582ms  
  10        0      10       -6.06      3.9   421ms  
  11        0      11       -7.08      2.3   342ms  
  12        0      12       -8.27      1.0   265ms  
  13        1       1       -7.53     17.8   1.47s  Restart
  14        1       2       -7.89      3.2   344ms  
  15        1       3       -8.70      2.1   293ms  
                                      19.2   1.96s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.18s  Non-interacting
   1        0       1        1.03     15.2   1.11s  
   2        0       2        0.53     14.6   1.03s  
   3        0       3       -0.01     14.1   998ms  
   4        0       4       -0.87     13.8  1000ms  
   5        0       5       -1.74     11.8   885ms  
   6        0       6       -2.43     10.0   771ms  
   7        0       7       -3.33      8.9   711ms  
   8        0       8       -4.02      7.9   651ms  
   9        0       9       -5.04      6.4   567ms  
  10        0      10       -6.06      3.9   417ms  
  11        0      11       -7.08      2.3   332ms  
  12        0      12       -8.26      1.0   262ms  
  13        1       1       -7.53     17.9   1.43s  Restart
  14        1       2       -7.86      3.2   333ms  
  15        1       3       -8.69      2.1   293ms  
                                      19.2   1.31s  Final orbitals
124.711184 seconds (63.71 M allocations: 33.070 GiB, 3.80% gc time, 30.50% compilation time)

These are the final phonon frequencies:

for (i, ω) in enumerate(phret_q0.frequencies)
    @printf("Mode %2d: %8.3f cm-1\n", i, ω .* DFTK.hartree_to_cm⁻¹)
end
Mode  1:   93.616 cm-1
Mode  2:   93.616 cm-1
Mode  3:  223.147 cm-1
Mode  4:  478.527 cm-1
Mode  5:  484.617 cm-1
Mode  6:  484.617 cm-1