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.916332110811                   -0.69    4.2    578ms
  2   -7.921173986183       -2.31       -1.52    1.0    337ms
  3   -7.921408706324       -3.63       -2.48    1.5    322ms
  4   -7.921440952758       -4.49       -2.85    2.2    440ms
  5   -7.921441785326       -6.08       -3.18    1.0    321ms
  6   -7.921442008551       -6.65       -4.53    1.1    289ms
  7   -7.921442022064       -7.87       -5.02    2.7    487ms
  8   -7.921442022136      -10.14       -5.34    1.7    343ms
  9   -7.921442022143      -11.18       -6.01    1.1    294ms
 10   -7.921442022144      -12.01       -6.21    1.7    357ms
 11   -7.921442022144      -12.77       -7.26    1.0    287ms
 12   -7.921442022144      -13.97       -7.53    2.1    449ms
 13   -7.921442022144      -15.05       -8.44    1.0    290ms

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.86s  Non-interacting
   1        0       1        1.03     15.1   11.4s  
   2        0       2        0.53     14.5   1.28s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.7   1.78s  
   5        0       5       -1.74     11.8   1.02s  
   6        0       6       -2.43     10.0   905ms  
   7        0       7       -3.33      8.9   842ms  
   8        0       8       -4.02      7.8   780ms  
   9        0       9       -5.04      6.4   680ms  
  10        0      10       -6.06      3.9   497ms  
  11        0      11       -7.08      2.3   402ms  
  12        0      12       -8.27      1.0   316ms  
  13        1       1       -7.53     17.8   1.87s  Restart
  14        1       2       -7.89      3.1   417ms  
  15        1       3       -8.70      2.1   361ms  
                                      19.2   2.10s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.45s  Non-interacting
   1        0       1        1.03     15.1   1.34s  
   2        0       2        0.53     14.5   1.25s  
   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.07s  
   6        0       6       -2.43     10.0   929ms  
   7        0       7       -3.33      8.9   839ms  
   8        0       8       -4.02      7.8   786ms  
   9        0       9       -5.04      6.4   684ms  
  10        0      10       -6.06      3.9   501ms  
  11        0      11       -7.08      2.3   400ms  
  12        0      12       -8.27      1.0   318ms  
  13        1       1       -7.53     17.9   1.69s  Restart
  14        1       2       -7.89      3.1   406ms  
  15        1       3       -8.68      2.1   349ms  
                                      19.2   1.57s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.03s  Non-interacting
   1        0       1        1.03     15.1   1.28s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.1   1.18s  
   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   845ms  
   8        0       8       -4.02      7.8   783ms  
   9        0       9       -5.04      6.4   674ms  
  10        0      10       -6.06      3.9   501ms  
  11        0      11       -7.08      2.3   399ms  
  12        0      12       -8.27      1.0   317ms  
  13        1       1       -7.53     17.9   1.70s  Restart
  14        1       2       -7.89      3.1   397ms  
  15        1       3       -8.66      2.1   354ms  
                                      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.1   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.7   1.20s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43     10.0   937ms  
   7        0       7       -3.33      8.9   851ms  
   8        0       8       -4.02      7.8   796ms  
   9        0       9       -5.04      6.4   675ms  
  10        0      10       -6.06      3.9   500ms  
  11        0      11       -7.08      2.3   405ms  
  12        0      12       -8.27      1.0   318ms  
  13        1       1       -7.52     17.8   2.28s  Restart
  14        1       2       -7.89      3.1   401ms  
  15        1       3       -8.70      2.1   324ms  
                                      19.2   1.51s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.39s  Non-interacting
   1        0       1        1.03     15.1   1.36s  
   2        0       2        0.53     14.5   1.24s  
   3        0       3       -0.01     14.1   1.21s  
   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   940ms  
   7        0       7       -3.33      8.9   852ms  
   8        0       8       -4.02      7.8   777ms  
   9        0       9       -5.04      6.5   676ms  
  10        0      10       -6.06      3.9   494ms  
  11        0      11       -7.08      2.3   408ms  
  12        0      12       -8.28      1.0   320ms  
  13        1       1       -7.53     17.9   1.71s  Restart
  14        1       2       -7.89      3.1   405ms  
  15        1       3       -8.68      2.1   351ms  
                                      19.2   1.58s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.45s  Non-interacting
   1        0       1        1.03     15.1   1.37s  
   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.20s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   931ms  
   7        0       7       -3.33      8.9   861ms  
   8        0       8       -4.02      7.8   787ms  
   9        0       9       -5.04      6.4   678ms  
  10        0      10       -6.06      3.9   505ms  
  11        0      11       -7.08      2.3   398ms  
  12        0      12       -8.27      1.0   335ms  
  13        1       1       -7.53     17.9   2.29s  Restart
  14        1       2       -7.88      3.1   374ms  
  15        1       3       -8.67      2.1   331ms  
                                      19.2   1.53s  Final orbitals
137.028616 seconds (75.46 M allocations: 29.759 GiB, 3.53% gc time, 24.23% 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