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.916284869330                   -0.69    4.0    588ms
  2   -7.921172114054       -2.31       -1.52    1.0    259ms
  3   -7.921409869599       -3.62       -2.47    1.4    290ms
  4   -7.921440915730       -4.51       -2.86    2.2    414ms
  5   -7.921441802626       -6.05       -3.22    1.1    265ms
  6   -7.921442008479       -6.69       -4.45    1.1    279ms
  7   -7.921442022026       -7.87       -4.97    2.5    433ms
  8   -7.921442022129       -9.99       -5.22    1.5    307ms
  9   -7.921442022143      -10.86       -6.20    1.1    273ms
 10   -7.921442022144      -12.08       -6.14    2.2    416ms
 11   -7.921442022144      -12.61       -6.84    1.0    299ms
 12   -7.921442022144      -13.69       -7.69    1.8    332ms
 13   -7.921442022144      -14.75       -8.11    2.0    381ms

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.93s  Non-interacting
   1        0       1        1.03     15.1   13.5s  
   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.07s  
   5        0       5       -1.74     11.8   961ms  
   6        0       6       -2.43     10.0   839ms  
   7        0       7       -3.33      8.9   762ms  
   8        0       8       -4.02      7.8   707ms  
   9        0       9       -5.04      6.4   608ms  
  10        0      10       -6.06      3.9   453ms  
  11        0      11       -7.08      2.3   366ms  
  12        0      12       -8.27      1.0   289ms  
  13        1       1       -7.55     17.8   1.69s  Restart
  14        1       2       -7.88      3.2   384ms  
  15        1       3       -8.71      2.1   329ms  
                                      19.2   2.07s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.31s  Non-interacting
   1        0       1        1.03     15.1   1.22s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.08s  
   4        0       4       -0.87     13.8   1.08s  
   5        0       5       -1.74     11.8   952ms  
   6        0       6       -2.43     10.0   837ms  
   7        0       7       -3.33      8.9   762ms  
   8        0       8       -4.02      7.8   704ms  
   9        0       9       -5.04      6.4   612ms  
  10        0      10       -6.06      3.9   446ms  
  11        0      11       -7.08      2.3   365ms  
  12        0      12       -8.27      1.0   286ms  
  13        1       1       -7.53     17.9   1.54s  Restart
  14        1       2       -7.88      3.2   366ms  
  15        1       3       -8.67      2.1   384ms  
                                      19.2   1.96s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.25s  Non-interacting
   1        0       1        1.03     15.1   1.20s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.09s  
   4        0       4       -0.87     13.8   1.12s  
   5        0       5       -1.74     11.8   957ms  
   6        0       6       -2.43     10.0   836ms  
   7        0       7       -3.33      8.9   763ms  
   8        0       8       -4.02      7.9   706ms  
   9        0       9       -5.04      6.4   605ms  
  10        0      10       -6.06      3.9   443ms  
  11        0      11       -7.08      2.3   365ms  
  12        0      12       -8.27      1.0   286ms  
  13        1       1       -7.53     17.9   1.55s  Restart
  14        1       2       -7.87      3.2   361ms  
  15        1       3       -8.67      2.1   326ms  
                                      19.2   1.41s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.33s  Non-interacting
   1        0       1        1.03     15.1   1.21s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.09s  
   4        0       4       -0.87     13.7   1.08s  
   5        0       5       -1.74     11.8   957ms  
   6        0       6       -2.43     10.0   840ms  
   7        0       7       -3.33      8.9   760ms  
   8        0       8       -4.02      7.8   703ms  
   9        0       9       -5.04      6.4   612ms  
  10        0      10       -6.06      3.9   455ms  
  11        0      11       -7.08      2.3   361ms  
  12        0      12       -8.27      1.0   290ms  
  13        1       1       -7.55     17.9   2.10s  Restart
  14        1       2       -7.87      3.2   343ms  
  15        1       3       -8.68      2.2   282ms  
                                      19.2   1.39s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.28s  Non-interacting
   1        0       1        1.03     15.1   1.21s  
   2        0       2        0.53     14.5   1.10s  
   3        0       3       -0.01     14.1   1.09s  
   4        0       4       -0.87     13.8   1.07s  
   5        0       5       -1.74     11.8   945ms  
   6        0       6       -2.43     10.0   832ms  
   7        0       7       -3.33      8.9   753ms  
   8        0       8       -4.02      7.8   701ms  
   9        0       9       -5.04      6.4   605ms  
  10        0      10       -6.06      3.9   443ms  
  11        0      11       -7.08      2.3   368ms  
  12        0      12       -8.27      1.0   290ms  
  13        1       1       -7.54     17.9   1.53s  Restart
  14        1       2       -7.89      3.2   362ms  
  15        1       3       -8.67      2.1   314ms  
                                      19.2   1.41s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.35s  Non-interacting
   1        0       1        1.03     15.1   1.23s  
   2        0       2        0.53     14.5   1.13s  
   3        0       3       -0.01     14.1   1.09s  
   4        0       4       -0.87     13.8   1.10s  
   5        0       5       -1.74     11.8   964ms  
   6        0       6       -2.43     10.0   843ms  
   7        0       7       -3.33      8.9   776ms  
   8        0       8       -4.02      7.9   713ms  
   9        0       9       -5.04      6.4   610ms  
  10        0      10       -6.06      3.9   452ms  
  11        0      11       -7.08      2.3   453ms  
  12        0      12       -8.27      1.0   829ms  
  13        1       1       -7.54     17.9   1.50s  Restart
  14        1       2       -7.87      3.2   346ms  
  15        1       3       -8.67      2.1   290ms  
                                      19.2   1.38s  Final orbitals
129.863569 seconds (63.49 M allocations: 33.056 GiB, 4.00% gc time, 28.84% 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