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.916282955627                   -0.69    4.0    575ms
  2   -7.921172278555       -2.31       -1.52    1.0    257ms
  3   -7.921410044806       -3.62       -2.47    1.4    283ms
  4   -7.921440933603       -4.51       -2.86    2.2    376ms
  5   -7.921441804574       -6.06       -3.23    1.0    247ms
  6   -7.921442008336       -6.69       -4.45    1.1    269ms
  7   -7.921442022026       -7.86       -4.94    2.5    414ms
  8   -7.921442022128       -9.99       -5.20    1.4    287ms
  9   -7.921442022143      -10.83       -5.97    1.1    263ms
 10   -7.921442022144      -11.85       -6.32    1.9    342ms
 11   -7.921442022144      -12.90       -6.86    1.0    260ms
 12   -7.921442022144      -13.75       -7.68    1.9    332ms
 13   -7.921442022144      -14.75       -8.18    2.0    378ms

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.84s  Non-interacting
   1        0       1        1.03     15.2   12.7s  
   2        0       2        0.53     14.5   1.13s  
   3        0       3       -0.01     14.1   1.05s  
   4        0       4       -0.87     13.7   1.06s  
   5        0       5       -1.74     11.8   1.53s  
   6        0       6       -2.43     10.0   753ms  
   7        0       7       -3.33      8.9   733ms  
   8        0       8       -4.02      7.8   675ms  
   9        0       9       -5.04      6.4   595ms  
  10        0      10       -6.06      3.9   434ms  
  11        0      11       -7.08      2.3   356ms  
  12        0      12       -8.27      1.0   277ms  
  13        1       1       -7.53     17.8   1.63s  Restart
  14        1       2       -7.88      3.2   369ms  
  15        1       3       -8.70      2.2   318ms  
                                      19.2   2.00s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.26s  Non-interacting
   1        0       1        1.03     15.2   1.17s  
   2        0       2        0.53     14.5   1.08s  
   3        0       3       -0.01     14.1   1.05s  
   4        0       4       -0.87     13.8   1.05s  
   5        0       5       -1.74     11.8   925ms  
   6        0       6       -2.43     10.0   812ms  
   7        0       7       -3.33      8.9   743ms  
   8        0       8       -4.02      7.8   677ms  
   9        0       9       -5.04      6.4   590ms  
  10        0      10       -6.06      3.9   440ms  
  11        0      11       -7.08      2.3   349ms  
  12        0      12       -8.27      1.0   277ms  
  13        1       1       -7.52     17.8   1.49s  Restart
  14        1       2       -7.88      3.2   355ms  
  15        1       3       -8.69      2.1   308ms  
                                      19.2   1.38s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.26s  Non-interacting
   1        0       1        1.03     15.2   1.78s  
   2        0       2        0.53     14.6   986ms  
   3        0       3       -0.01     14.1   1.02s  
   4        0       4       -0.87     13.8   1.04s  
   5        0       5       -1.74     11.8   917ms  
   6        0       6       -2.43     10.0   810ms  
   7        0       7       -3.33      8.9   742ms  
   8        0       8       -4.02      7.9   691ms  
   9        0       9       -5.04      6.4   589ms  
  10        0      10       -6.06      3.9   439ms  
  11        0      11       -7.08      2.3   346ms  
  12        0      12       -8.27      1.0   278ms  
  13        1       1       -7.53     17.9   1.49s  Restart
  14        1       2       -7.87      3.2   354ms  
  15        1       3       -8.64      2.1   309ms  
                                      19.2   1.38s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.26s  Non-interacting
   1        0       1        1.03     15.2   1.19s  
   2        0       2        0.53     14.6   1.08s  
   3        0       3       -0.01     14.1   1.06s  
   4        0       4       -0.87     13.7   1.05s  
   5        0       5       -1.74     11.8   942ms  
   6        0       6       -2.43     10.0   812ms  
   7        0       7       -3.33      8.9   757ms  
   8        0       8       -4.02      7.8   690ms  
   9        0       9       -5.04      6.4   597ms  
  10        0      10       -6.06      3.9   447ms  
  11        0      11       -7.08      2.3   353ms  
  12        0      12       -8.27      1.0   282ms  
  13        1       1       -7.54     17.8   1.50s  Restart
  14        1       2       -7.89      3.2   980ms  
  15        1       3       -8.71      2.1   289ms  
                                      19.2   1.29s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.24s  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   939ms  
   6        0       6       -2.43     10.0   819ms  
   7        0       7       -3.33      8.9   754ms  
   8        0       8       -4.02      7.8   690ms  
   9        0       9       -5.04      6.4   589ms  
  10        0      10       -6.06      3.9   437ms  
  11        0      11       -7.08      2.3   359ms  
  12        0      12       -8.27      1.0   277ms  
  13        1       1       -7.52     17.8   1.49s  Restart
  14        1       2       -7.89      3.2   356ms  
  15        1       3       -8.70      2.1   313ms  
                                      19.2   1.38s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.27s  Non-interacting
   1        0       1        1.03     15.2   1.20s  
   2        0       2        0.53     14.6   1.09s  
   3        0       3       -0.01     14.1   1.07s  
   4        0       4       -0.87     13.8   1.05s  
   5        0       5       -1.74     11.8   940ms  
   6        0       6       -2.43     10.0   822ms  
   7        0       7       -3.33      8.9   751ms  
   8        0       8       -4.02      7.9   696ms  
   9        0       9       -5.04      6.4   593ms  
  10        0      10       -6.06      3.9   436ms  
  11        0      11       -7.08      2.3   952ms  
  12        0      12       -8.27      1.0   290ms  
  13        1       1       -7.54     17.8   1.37s  Restart
  14        1       2       -7.88      3.2   347ms  
  15        1       3       -8.67      2.1   280ms  
                                      19.2   1.36s  Final orbitals
126.736615 seconds (63.82 M allocations: 33.075 GiB, 4.00% gc time, 29.18% 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