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.916285152075                   -0.69    4.0    632ms
  2   -7.921172157863       -2.31       -1.52    1.0    288ms
  3   -7.921410908085       -3.62       -2.47    1.5    312ms
  4   -7.921440948051       -4.52       -2.87    2.2    424ms
  5   -7.921441814236       -6.06       -3.24    1.1    301ms
  6   -7.921442008625       -6.71       -4.46    1.1    287ms
  7   -7.921442022033       -7.87       -4.96    2.5    477ms
  8   -7.921442022130      -10.01       -5.22    1.5    324ms
  9   -7.921442022142      -10.91       -5.86    1.1    284ms
 10   -7.921442022144      -11.83       -6.35    1.7    342ms
 11   -7.921442022144      -12.88       -6.96    1.2    304ms
 12   -7.921442022144      -13.80       -7.59    1.9    373ms
 13   -7.921442022144   +    -Inf       -8.44    1.9    456ms

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.89s  Non-interacting
   1        0       1        1.03     15.1   10.9s  
   2        0       2        0.53     14.5   1.25s  
   3        0       3       -0.01     14.1   1.20s  
   4        0       4       -0.87     13.7   1.20s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   932ms  
   7        0       7       -3.33      8.9   852ms  
   8        0       8       -4.02      7.8   782ms  
   9        0       9       -5.04      6.4   686ms  
  10        0      10       -6.06      3.9   497ms  
  11        0      11       -7.08      2.3   398ms  
  12        0      12       -8.28      1.0   314ms  
  13        1       1       -7.55     17.9   1.87s  Restart
  14        1       2       -7.87      3.2   424ms  
  15        1       3       -8.70      2.1   359ms  
                                      19.2   2.12s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.43s  Non-interacting
   1        0       1        1.03     15.1   1.97s  
   2        0       2        0.53     14.5   1.17s  
   3        0       3       -0.01     14.1   1.20s  
   4        0       4       -0.87     13.8   1.16s  
   5        0       5       -1.74     11.8   1.09s  
   6        0       6       -2.43     10.0   951ms  
   7        0       7       -3.33      8.9   875ms  
   8        0       8       -4.02      7.8   805ms  
   9        0       9       -5.04      6.4   681ms  
  10        0      10       -6.06      3.9   502ms  
  11        0      11       -7.08      2.3   398ms  
  12        0      12       -8.27      1.0   326ms  
  13        1       1       -7.54     17.9   1.74s  Restart
  14        1       2       -7.88      3.2   410ms  
  15        1       3       -8.67      2.1   346ms  
                                      19.2   1.58s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.44s  Non-interacting
   1        0       1        1.03     15.1   1.35s  
   2        0       2        0.53     14.5   1.24s  
   3        0       3       -0.01     14.1   1.20s  
   4        0       4       -0.87     13.8   1.19s  
   5        0       5       -1.74     11.8   1.05s  
   6        0       6       -2.43     10.0   924ms  
   7        0       7       -3.33      8.9   855ms  
   8        0       8       -4.02      7.9   774ms  
   9        0       9       -5.04      6.4   664ms  
  10        0      10       -6.06      3.9   498ms  
  11        0      11       -7.08      2.3   394ms  
  12        0      12       -8.27      1.0   310ms  
  13        1       1       -7.55     17.9   2.30s  Restart
  14        1       2       -7.87      3.2   380ms  
  15        1       3       -8.68      2.1   307ms  
                                      19.2   1.48s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.38s  Non-interacting
   1        0       1        1.03     15.1   1.34s  
   2        0       2        0.53     14.5   1.20s  
   3        0       3       -0.01     14.1   1.19s  
   4        0       4       -0.87     13.7   1.19s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43     10.0   914ms  
   7        0       7       -3.33      8.9   842ms  
   8        0       8       -4.02      7.8   781ms  
   9        0       9       -5.04      6.4   672ms  
  10        0      10       -6.06      3.9   486ms  
  11        0      11       -7.08      2.3   392ms  
  12        0      12       -8.28      1.0   308ms  
  13        1       1       -7.55     17.9   1.68s  Restart
  14        1       2       -7.86      3.2   393ms  
  15        1       3       -8.68      2.1   351ms  
                                      19.2   1.55s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.43s  Non-interacting
   1        0       1        1.03     15.1   1.35s  
   2        0       2        0.53     14.5   1.25s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.22s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   937ms  
   7        0       7       -3.33      8.9   864ms  
   8        0       8       -4.02      7.8   1.45s  
   9        0       9       -5.04      6.4   671ms  
  10        0      10       -6.06      3.9   456ms  
  11        0      11       -7.08      2.3   353ms  
  12        0      12       -8.27      1.0   276ms  
  13        1       1       -7.53     17.9   1.66s  Restart
  14        1       2       -7.87      3.2   398ms  
  15        1       3       -8.67      2.1   331ms  
                                      19.2   1.52s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.44s  Non-interacting
   1        0       1        1.03     15.1   1.36s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.1   1.21s  
   4        0       4       -0.87     13.8   1.20s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43      9.9   931ms  
   7        0       7       -3.33      8.9   853ms  
   8        0       8       -4.02      7.9   795ms  
   9        0       9       -5.04      6.4   670ms  
  10        0      10       -6.06      3.9   499ms  
  11        0      11       -7.08      2.3   392ms  
  12        0      12       -8.27      1.0   319ms  
  13        1       1       -7.54     18.0   1.71s  Restart
  14        1       2       -7.85      3.2   399ms  
  15        1       3       -8.65      2.1   356ms  
                                      19.2   1.57s  Final orbitals
135.262738 seconds (62.28 M allocations: 32.992 GiB, 4.25% gc time, 24.74% 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