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.916282211117                   -0.69    4.0    577ms
  2   -7.921172215610       -2.31       -1.52    1.0    281ms
  3   -7.921410913922       -3.62       -2.47    1.5    284ms
  4   -7.921440941715       -4.52       -2.87    2.2    388ms
  5   -7.921441813633       -6.06       -3.24    1.1    266ms
  6   -7.921442009519       -6.71       -4.47    1.2    270ms
  7   -7.921442022041       -7.90       -4.97    2.5    495ms
  8   -7.921442022132      -10.04       -5.26    1.5    1.05s
  9   -7.921442022143      -10.97       -6.01    1.1    253ms
 10   -7.921442022144      -11.94       -6.27    2.0    331ms
 11   -7.921442022144      -12.84       -6.94    1.0    257ms
 12   -7.921442022144      -13.80       -7.65    1.9    339ms
 13   -7.921442022144      -15.05       -8.27    2.0    397ms

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.82s  Non-interacting
   1        0       1        1.03     15.2   12.6s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.04s  
   4        0       4       -0.87     13.7   1.04s  
   5        0       5       -1.74     11.8   925ms  
   6        0       6       -2.43     10.0   806ms  
   7        0       7       -3.33      8.9   744ms  
   8        0       8       -4.02      7.8   687ms  
   9        0       9       -5.04      6.4   594ms  
  10        0      10       -6.06      3.9   446ms  
  11        0      11       -7.08      2.3   360ms  
  12        0      12       -8.27      1.0   289ms  
  13        1       1       -7.53     17.9   1.62s  Restart
  14        1       2       -7.87      3.2   379ms  
  15        1       3       -8.68      2.1   341ms  
                                      19.2   1.97s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.23s  Non-interacting
   1        0       1        1.03     15.2   1.16s  
   2        0       2        0.53     14.5   1.06s  
   3        0       3       -0.01     14.1   1.04s  
   4        0       4       -0.87     13.8   1.03s  
   5        0       5       -1.74     11.8   918ms  
   6        0       6       -2.43     10.0   802ms  
   7        0       7       -3.33      8.9   734ms  
   8        0       8       -4.02      7.8   671ms  
   9        0       9       -5.04      6.4   590ms  
  10        0      10       -6.06      3.9   436ms  
  11        0      11       -7.08      2.3   352ms  
  12        0      12       -8.27      1.0   282ms  
  13        1       1       -7.53     17.9   2.33s  Restart
  14        1       2       -7.87      3.2   324ms  
  15        1       3       -8.65      2.1   314ms  
                                      19.2   1.28s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.19s  Non-interacting
   1        0       1        1.03     15.2   1.17s  
   2        0       2        0.53     14.5   1.06s  
   3        0       3       -0.01     14.1   1.04s  
   4        0       4       -0.87     13.8   1.02s  
   5        0       5       -1.74     11.8   917ms  
   6        0       6       -2.43     10.0   798ms  
   7        0       7       -3.33      8.9   732ms  
   8        0       8       -4.02      7.9   669ms  
   9        0       9       -5.04      6.4   578ms  
  10        0      10       -6.06      3.9   437ms  
  11        0      11       -7.08      2.3   346ms  
  12        0      12       -8.27      1.0   270ms  
  13        1       1       -7.53     17.9   1.47s  Restart
  14        1       2       -7.86      3.2   355ms  
  15        1       3       -8.65      2.1   305ms  
                                      19.2   1.33s  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.20s  
   2        0       2        0.53     14.5   1.08s  
   3        0       3       -0.01     14.1   1.07s  
   4        0       4       -0.87     13.7   1.05s  
   5        0       5       -1.74     11.8   935ms  
   6        0       6       -2.43     10.0   818ms  
   7        0       7       -3.33      8.9   750ms  
   8        0       8       -4.02      7.8   683ms  
   9        0       9       -5.04      6.4   596ms  
  10        0      10       -6.06      3.9   444ms  
  11        0      11       -7.08      2.3   361ms  
  12        0      12       -8.27      1.0   290ms  
  13        1       1       -7.54     17.8   1.50s  Restart
  14        1       2       -7.89      3.2   359ms  
  15        1       3       -8.69      2.1   316ms  
                                      19.2   1.36s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.22s  Non-interacting
   1        0       1        1.03     15.2   1.18s  
   2        0       2        0.53     14.5   1.06s  
   3        0       3       -0.01     14.1   1.04s  
   4        0       4       -0.87     13.8   1.11s  
   5        0       5       -1.74     11.8   1.68s  
   6        0       6       -2.43     10.0   751ms  
   7        0       7       -3.33      8.9   708ms  
   8        0       8       -4.02      7.8   687ms  
   9        0       9       -5.04      6.4   580ms  
  10        0      10       -6.06      3.9   431ms  
  11        0      11       -7.08      2.3   382ms  
  12        0      12       -8.27      1.0   286ms  
  13        1       1       -7.52     17.9   1.47s  Restart
  14        1       2       -7.88      3.2   361ms  
  15        1       3       -8.68      2.1   315ms  
                                      19.2   1.35s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.22s  Non-interacting
   1        0       1        1.03     15.2   1.17s  
   2        0       2        0.53     14.5   1.05s  
   3        0       3       -0.01     14.1   1.03s  
   4        0       4       -0.87     13.8   1.02s  
   5        0       5       -1.74     11.8   907ms  
   6        0       6       -2.43     10.0   798ms  
   7        0       7       -3.33      8.9   728ms  
   8        0       8       -4.02      7.9   676ms  
   9        0       9       -5.04      6.4   580ms  
  10        0      10       -6.06      3.9   431ms  
  11        0      11       -7.08      2.3   360ms  
  12        0      12       -8.27      1.0   279ms  
  13        1       1       -7.53     17.8   1.46s  Restart
  14        1       2       -7.88      3.2   353ms  
  15        1       3       -8.67      2.1   309ms  
                                      19.2   1.34s  Final orbitals
125.737791 seconds (62.72 M allocations: 33.018 GiB, 3.67% gc time, 29.60% 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