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.916320155657                   -0.69    4.2    652ms
  2   -7.921171611812       -2.31       -1.52    1.0    293ms
  3   -7.921409038922       -3.62       -2.48    1.4    337ms
  4   -7.921440908694       -4.50       -2.85    2.2    438ms
  5   -7.921441783745       -6.06       -3.18    1.0    291ms
  6   -7.921442007941       -6.65       -4.46    1.0    299ms
  7   -7.921442022054       -7.85       -5.09    2.4    567ms
  8   -7.921442022138      -10.07       -5.40    2.0    1.24s
  9   -7.921442022143      -11.30       -6.00    1.0    289ms
 10   -7.921442022144      -12.12       -6.08    1.5    333ms
 11   -7.921442022144      -12.63       -7.01    1.0    278ms
 12   -7.921442022144      -13.82       -7.45    2.1    412ms
 13   -7.921442022144      -14.57       -8.02    1.1    294ms

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   13.1s  
   2        0       2        0.53     14.5   1.28s  
   3        0       3       -0.01     14.1   1.24s  
   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   936ms  
   7        0       7       -3.33      8.9   848ms  
   8        0       8       -4.02      7.9   790ms  
   9        0       9       -5.04      6.4   681ms  
  10        0      10       -6.06      3.9   504ms  
  11        0      11       -7.08      2.3   397ms  
  12        0      12       -8.28      1.0   317ms  
  13        1       1       -7.51     17.9   1.90s  Restart
  14        1       2       -7.86      3.2   400ms  
  15        1       3       -8.70      2.2   368ms  
                                      19.2   2.18s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.48s  Non-interacting
   1        0       1        1.03     15.1   1.37s  
   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.20s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   934ms  
   7        0       7       -3.33      8.9   861ms  
   8        0       8       -4.02      7.8   887ms  
   9        0       9       -5.04      6.4   1.57s  
  10        0      10       -6.06      3.9   480ms  
  11        0      11       -7.08      2.2   380ms  
  12        0      12       -8.28      1.0   307ms  
  13        1       1       -7.55     17.9   1.66s  Restart
  14        1       2       -7.88      3.1   395ms  
  15        1       3       -8.64      2.0   335ms  
                                      19.2   1.57s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.46s  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.24s  
   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   936ms  
   7        0       7       -3.33      8.9   849ms  
   8        0       8       -4.02      7.9   783ms  
   9        0       9       -5.04      6.4   675ms  
  10        0      10       -6.06      3.9   504ms  
  11        0      11       -7.08      2.3   395ms  
  12        0      12       -8.27      1.0   315ms  
  13        1       1       -7.54     17.9   1.70s  Restart
  14        1       2       -7.88      3.1   399ms  
  15        1       3       -8.65      2.1   348ms  
                                      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.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.7   1.19s  
   5        0       5       -1.74     11.8   1.09s  
   6        0       6       -2.43     10.0   928ms  
   7        0       7       -3.33      8.9   859ms  
   8        0       8       -4.02      7.9   782ms  
   9        0       9       -5.04      6.4   666ms  
  10        0      10       -6.06      3.9   599ms  
  11        0      11       -7.08      2.3   1.28s  
  12        0      12       -8.28      1.0   301ms  
  13        1       1       -7.52     17.8   1.62s  Restart
  14        1       2       -7.88      3.2   401ms  
  15        1       3       -8.71      2.1   341ms  
                                      19.2   1.54s  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.25s  
   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     10.0   930ms  
   7        0       7       -3.33      8.9   860ms  
   8        0       8       -4.02      7.8   787ms  
   9        0       9       -5.04      6.4   676ms  
  10        0      10       -6.06      3.9   495ms  
  11        0      11       -7.08      2.2   398ms  
  12        0      12       -8.28      1.0   316ms  
  13        1       1       -7.54     17.9   1.71s  Restart
  14        1       2       -7.89      3.1   409ms  
  15        1       3       -8.65      2.0   348ms  
                                      19.2   1.59s  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.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.20s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   931ms  
   7        0       7       -3.33      8.9   853ms  
   8        0       8       -4.02      7.9   787ms  
   9        0       9       -5.04      6.4   680ms  
  10        0      10       -6.06      3.9   505ms  
  11        0      11       -7.08      2.3   399ms  
  12        0      12       -8.27      1.0   415ms  
  13        1       1       -7.54     17.8   2.55s  Restart
  14        1       2       -7.89      3.1   385ms  
  15        1       3       -8.68      2.1   328ms  
                                      19.2   1.57s  Final orbitals
139.706530 seconds (102.14 M allocations: 30.820 GiB, 4.26% gc time, 25.19% 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