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.916314266416                   -0.69    4.1    657ms
  2   -7.921170251901       -2.31       -1.52    1.0    258ms
  3   -7.921407829405       -3.62       -2.48    1.4    321ms
  4   -7.921440924692       -4.48       -2.84    2.2    389ms
  5   -7.921441775284       -6.07       -3.16    1.1    274ms
  6   -7.921442008070       -6.63       -4.54    1.0    271ms
  7   -7.921442022071       -7.85       -5.00    2.7    453ms
  8   -7.921442022135      -10.19       -5.27    1.7    318ms
  9   -7.921442022142      -11.11       -5.80    1.0    272ms
 10   -7.921442022144      -11.80       -6.14    1.2    309ms
 11   -7.921442022144      -12.58       -7.44    1.2    402ms
 12   -7.921442022144      -13.75       -7.25    2.8    1.33s
 13   -7.921442022144      -14.75       -8.47    1.0    259ms

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.88s  Non-interacting
   1        0       1        1.03     15.2   12.9s  
   2        0       2        0.53     14.6   1.19s  
   3        0       3       -0.01     14.1   1.12s  
   4        0       4       -0.87     13.7   1.11s  
   5        0       5       -1.74     11.8   999ms  
   6        0       6       -2.43     10.0   870ms  
   7        0       7       -3.33      8.9   791ms  
   8        0       8       -4.02      7.8   722ms  
   9        0       9       -5.04      6.4   625ms  
  10        0      10       -6.06      3.9   472ms  
  11        0      11       -7.08      2.3   369ms  
  12        0      12       -8.27      1.0   291ms  
  13        1       1       -7.52     17.8   1.76s  Restart
  14        1       2       -7.89      3.2   388ms  
  15        1       3       -8.70      2.1   336ms  
                                      19.2   2.06s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.35s  Non-interacting
   1        0       1        1.03     15.2   1.26s  
   2        0       2        0.53     14.6   1.16s  
   3        0       3       -0.01     14.1   1.13s  
   4        0       4       -0.87     13.8   1.11s  
   5        0       5       -1.74     11.8   988ms  
   6        0       6       -2.43     10.0   855ms  
   7        0       7       -3.33      8.9   794ms  
   8        0       8       -4.02      7.8   743ms  
   9        0       9       -5.04      6.4   622ms  
  10        0      10       -6.06      3.9   1.44s  
  11        0      11       -7.08      2.3   361ms  
  12        0      12       -8.27      1.0   292ms  
  13        1       1       -7.53     17.9   1.60s  Restart
  14        1       2       -7.89      3.2   376ms  
  15        1       3       -8.68      2.1   316ms  
                                      19.2   1.47s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.33s  Non-interacting
   1        0       1        1.03     15.2   1.26s  
   2        0       2        0.53     14.6   1.15s  
   3        0       3       -0.01     14.1   1.13s  
   4        0       4       -0.87     13.8   1.10s  
   5        0       5       -1.74     11.8   1.02s  
   6        0       6       -2.43     10.0   866ms  
   7        0       7       -3.33      8.9   785ms  
   8        0       8       -4.02      7.8   724ms  
   9        0       9       -5.04      6.4   637ms  
  10        0      10       -6.06      3.9   457ms  
  11        0      11       -7.08      2.3   376ms  
  12        0      12       -8.27      1.0   291ms  
  13        1       1       -7.52     17.8   1.57s  Restart
  14        1       2       -7.89      3.2   372ms  
  15        1       3       -8.69      2.1   329ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.33s  Non-interacting
   1        0       1        1.03     15.2   1.28s  
   2        0       2        0.53     14.5   1.15s  
   3        0       3       -0.01     14.1   1.13s  
   4        0       4       -0.87     13.7   1.11s  
   5        0       5       -1.74     11.8   994ms  
   6        0       6       -2.43     10.0   867ms  
   7        0       7       -3.33      8.9   788ms  
   8        0       8       -4.02      7.8   725ms  
   9        0       9       -5.04      6.4   626ms  
  10        0      10       -6.06      3.9   459ms  
  11        0      11       -7.08      2.3   365ms  
  12        0      12       -8.27      1.0   294ms  
  13        1       1       -7.52     17.8   1.57s  Restart
  14        1       2       -7.88      3.2   373ms  
  15        1       3       -8.70      2.2   327ms  
                                      19.2   2.51s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.30s  Non-interacting
   1        0       1        1.03     15.2   1.26s  
   2        0       2        0.53     14.6   1.13s  
   3        0       3       -0.01     14.1   1.11s  
   4        0       4       -0.87     13.8   1.11s  
   5        0       5       -1.74     11.8   985ms  
   6        0       6       -2.43     10.0   865ms  
   7        0       7       -3.33      8.9   789ms  
   8        0       8       -4.02      7.8   734ms  
   9        0       9       -5.04      6.4   623ms  
  10        0      10       -6.06      3.9   464ms  
  11        0      11       -7.08      2.3   370ms  
  12        0      12       -8.27      1.0   293ms  
  13        1       1       -7.53     17.9   1.58s  Restart
  14        1       2       -7.88      3.2   370ms  
  15        1       3       -8.66      2.1   322ms  
                                      19.2   1.47s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.34s  Non-interacting
   1        0       1        1.03     15.2   1.26s  
   2        0       2        0.53     14.6   1.16s  
   3        0       3       -0.01     14.1   1.12s  
   4        0       4       -0.87     13.8   1.10s  
   5        0       5       -1.74     11.8   989ms  
   6        0       6       -2.43     10.0   858ms  
   7        0       7       -3.33      8.9   785ms  
   8        0       8       -4.02      7.8   740ms  
   9        0       9       -5.04      6.4   626ms  
  10        0      10       -6.06      3.9   467ms  
  11        0      11       -7.08      2.3   368ms  
  12        0      12       -8.27      1.0   292ms  
  13        1       1       -7.52     17.9   1.58s  Restart
  14        1       2       -7.87      3.2   405ms  
  15        1       3       -8.67      2.1   325ms  
                                      19.2   1.45s  Final orbitals
132.536611 seconds (102.04 M allocations: 30.820 GiB, 4.48% gc time, 26.33% 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