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.916326941482                   -0.69    4.2    675ms
  2   -7.921170508787       -2.31       -1.52    1.0    302ms
  3   -7.921409083422       -3.62       -2.48    1.5    350ms
  4   -7.921440945646       -4.50       -2.86    2.3    453ms
  5   -7.921441791054       -6.07       -3.20    1.0    306ms
  6   -7.921442006509       -6.67       -4.41    1.1    311ms
  7   -7.921442022003       -7.81       -4.91    2.5    491ms
  8   -7.921442022130       -9.90       -5.18    1.8    384ms
  9   -7.921442022142      -10.94       -5.67    1.0    307ms
 10   -7.921442022144      -11.66       -6.42    1.1    319ms
 11   -7.921442022144      -12.68       -6.97    2.0    502ms
 12   -7.921442022144      -13.94       -7.23    1.8    1.12s
 13   -7.921442022144      -14.75       -8.01    1.0    300ms

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.99s  Non-interacting
   1        0       1        1.03     15.1   12.5s  
   2        0       2        0.53     14.5   1.21s  
   3        0       3       -0.01     14.1   1.14s  
   4        0       4       -0.87     13.7   1.12s  
   5        0       5       -1.74     11.8   999ms  
   6        0       6       -2.43     10.0   877ms  
   7        0       7       -3.33      8.9   802ms  
   8        0       8       -4.02      7.8   734ms  
   9        0       9       -5.04      6.4   644ms  
  10        0      10       -6.06      3.9   464ms  
  11        0      11       -7.08      2.3   378ms  
  12        0      12       -8.28      1.0   294ms  
  13        1       1       -7.52     17.8   1.77s  Restart
  14        1       2       -7.88      3.2   394ms  
  15        1       3       -8.70      2.1   326ms  
                                      19.2   2.06s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.36s  Non-interacting
   1        0       1        1.03     15.1   1.28s  
   2        0       2        0.53     14.5   1.16s  
   3        0       3       -0.01     14.1   1.14s  
   4        0       4       -0.87     13.8   1.92s  
   5        0       5       -1.74     11.8   993ms  
   6        0       6       -2.43     10.0   936ms  
   7        0       7       -3.33      8.9   796ms  
   8        0       8       -4.02      7.8   726ms  
   9        0       9       -5.04      6.4   626ms  
  10        0      10       -6.06      3.9   466ms  
  11        0      11       -7.08      2.3   372ms  
  12        0      12       -8.28      1.0   302ms  
  13        1       1       -7.53     17.9   1.62s  Restart
  14        1       2       -7.89      3.1   373ms  
  15        1       3       -8.68      2.0   328ms  
                                      19.2   1.46s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.35s  Non-interacting
   1        0       1        1.03     15.1   1.26s  
   2        0       2        0.53     14.5   1.20s  
   3        0       3       -0.01     14.1   1.12s  
   4        0       4       -0.87     13.8   1.12s  
   5        0       5       -1.74     11.8   994ms  
   6        0       6       -2.43     10.0   867ms  
   7        0       7       -3.33      8.9   790ms  
   8        0       8       -4.02      7.8   738ms  
   9        0       9       -5.04      6.4   632ms  
  10        0      10       -6.06      3.9   463ms  
  11        0      11       -7.08      2.3   377ms  
  12        0      12       -8.27      1.0   295ms  
  13        1       1       -7.54     17.9   1.59s  Restart
  14        1       2       -7.89      3.1   372ms  
  15        1       3       -8.67      2.1   323ms  
                                      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.1   2.06s  
   2        0       2        0.53     14.5   1.15s  
   3        0       3       -0.01     14.1   1.18s  
   4        0       4       -0.87     13.7   1.10s  
   5        0       5       -1.74     11.8   982ms  
   6        0       6       -2.43     10.0   866ms  
   7        0       7       -3.33      8.9   803ms  
   8        0       8       -4.02      7.8   737ms  
   9        0       9       -5.04      6.4   633ms  
  10        0      10       -6.06      3.9   470ms  
  11        0      11       -7.08      2.3   375ms  
  12        0      12       -8.28      1.0   295ms  
  13        1       1       -7.52     17.8   1.61s  Restart
  14        1       2       -7.88      3.2   374ms  
  15        1       3       -8.70      2.1   335ms  
                                      19.2   1.46s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.37s  Non-interacting
   1        0       1        1.03     15.1   1.29s  
   2        0       2        0.53     14.5   1.17s  
   3        0       3       -0.01     14.1   1.15s  
   4        0       4       -0.87     13.8   1.13s  
   5        0       5       -1.74     11.8   1.01s  
   6        0       6       -2.43     10.0   880ms  
   7        0       7       -3.33      8.9   803ms  
   8        0       8       -4.02      7.8   744ms  
   9        0       9       -5.04      6.4   639ms  
  10        0      10       -6.06      3.9   474ms  
  11        0      11       -7.08      2.3   374ms  
  12        0      12       -8.28      1.0   295ms  
  13        1       1       -7.53     17.9   1.61s  Restart
  14        1       2       -7.89      3.1   378ms  
  15        1       3       -8.69      2.0   402ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.34s  Non-interacting
   1        0       1        1.03     15.1   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.12s  
   5        0       5       -1.74     11.8   993ms  
   6        0       6       -2.43     10.0   875ms  
   7        0       7       -3.33      8.9   794ms  
   8        0       8       -4.02      7.8   736ms  
   9        0       9       -5.04      6.4   631ms  
  10        0      10       -6.06      3.9   469ms  
  11        0      11       -7.08      2.3   373ms  
  12        0      12       -8.27      1.0   295ms  
  13        1       1       -7.54     17.9   1.59s  Restart
  14        1       2       -7.88      3.1   377ms  
  15        1       3       -8.67      2.1   323ms  
                                      19.2   1.47s  Final orbitals
132.356987 seconds (143.92 M allocations: 31.714 GiB, 3.70% gc time, 25.14% 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