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.916322523815                   -0.69    4.2    649ms
  2   -7.921170019852       -2.31       -1.52    1.0    282ms
  3   -7.921408582202       -3.62       -2.48    1.4    356ms
  4   -7.921440896929       -4.49       -2.85    2.3    416ms
  5   -7.921441775588       -6.06       -3.18    1.0    279ms
  6   -7.921442007515       -6.63       -4.43    1.1    316ms
  7   -7.921442022013       -7.84       -4.94    2.4    450ms
  8   -7.921442022131       -9.93       -5.26    1.8    359ms
  9   -7.921442022143      -10.95       -6.05    1.1    278ms
 10   -7.921442022144      -11.94       -6.10    2.0    392ms
 11   -7.921442022144      -12.59       -7.05    1.0    279ms
 12   -7.921442022144      -13.80       -7.45    2.1    403ms
 13   -7.921442022144      -14.75       -8.05    1.1    281ms

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.93s  Non-interacting
   1        0       1        1.03     15.2   12.9s  
   2        0       2        0.53     14.5   1.97s  
   3        0       3       -0.01     14.1   1.21s  
   4        0       4       -0.87     13.7   1.17s  
   5        0       5       -1.74     11.8   1.04s  
   6        0       6       -2.43     10.0   927ms  
   7        0       7       -3.33      8.9   846ms  
   8        0       8       -4.02      7.8   785ms  
   9        0       9       -5.04      6.4   672ms  
  10        0      10       -6.06      4.0   502ms  
  11        0      11       -7.08      2.3   401ms  
  12        0      12       -8.27      1.0   316ms  
  13        1       1       -7.52     17.8   1.89s  Restart
  14        1       2       -7.89      3.1   411ms  
  15        1       3       -8.71      2.1   357ms  
                                      19.2   2.16s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.46s  Non-interacting
   1        0       1        1.03     15.2   1.36s  
   2        0       2        0.53     14.6   1.24s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.18s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   917ms  
   7        0       7       -3.33      8.9   856ms  
   8        0       8       -4.02      7.9   802ms  
   9        0       9       -5.04      6.4   688ms  
  10        0      10       -6.06      3.9   485ms  
  11        0      11       -7.08      2.3   404ms  
  12        0      12       -8.27      1.0   312ms  
  13        1       1       -7.54     17.8   2.49s  Restart
  14        1       2       -7.90      3.1   387ms  
  15        1       3       -8.69      2.0   334ms  
                                      19.2   1.51s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.42s  Non-interacting
   1        0       1        1.03     15.2   1.34s  
   2        0       2        0.53     14.6   1.24s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.19s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43     10.0   932ms  
   7        0       7       -3.33      8.9   855ms  
   8        0       8       -4.02      7.8   783ms  
   9        0       9       -5.04      6.4   670ms  
  10        0      10       -6.06      3.9   485ms  
  11        0      11       -7.08      2.3   403ms  
  12        0      12       -8.27      1.0   307ms  
  13        1       1       -7.52     17.8   1.68s  Restart
  14        1       2       -7.90      3.1   408ms  
  15        1       3       -8.71      2.1   342ms  
                                      19.2   1.59s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.46s  Non-interacting
   1        0       1        1.03     15.2   1.36s  
   2        0       2        0.53     14.6   1.25s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.7   1.20s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   929ms  
   7        0       7       -3.33      8.9   861ms  
   8        0       8       -4.02      7.8   786ms  
   9        0       9       -5.04      6.4   672ms  
  10        0      10       -6.06      4.0   501ms  
  11        0      11       -7.08      2.3   477ms  
  12        0      12       -8.27      1.0   1.06s  
  13        1       1       -7.52     17.8   1.67s  Restart
  14        1       2       -7.88      3.1   389ms  
  15        1       3       -8.71      2.2   338ms  
                                      19.2   1.55s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.44s  Non-interacting
   1        0       1        1.03     15.2   1.35s  
   2        0       2        0.53     14.5   1.24s  
   3        0       3       -0.01     14.1   1.21s  
   4        0       4       -0.87     13.8   1.19s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   933ms  
   7        0       7       -3.33      8.9   849ms  
   8        0       8       -4.02      7.9   786ms  
   9        0       9       -5.04      6.5   671ms  
  10        0      10       -6.06      3.9   503ms  
  11        0      11       -7.08      2.3   402ms  
  12        0      12       -8.27      1.0   315ms  
  13        1       1       -7.53     17.9   1.72s  Restart
  14        1       2       -7.88      3.1   394ms  
  15        1       3       -8.67      2.1   352ms  
                                      19.2   1.57s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.47s  Non-interacting
   1        0       1        1.03     15.2   1.36s  
   2        0       2        0.53     14.6   1.25s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.20s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   927ms  
   7        0       7       -3.33      8.9   1.68s  
   8        0       8       -4.02      7.8   762ms  
   9        0       9       -5.04      6.4   658ms  
  10        0      10       -6.06      3.9   480ms  
  11        0      11       -7.08      2.3   396ms  
  12        0      12       -8.27      1.0   307ms  
  13        1       1       -7.52     17.8   1.68s  Restart
  14        1       2       -7.90      3.1   395ms  
  15        1       3       -8.69      2.1   342ms  
                                      19.2   1.59s  Final orbitals
139.383511 seconds (143.72 M allocations: 31.716 GiB, 4.37% gc time, 24.34% 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