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.916341251265                   -0.69    4.3    792ms
  2   -7.921168726763       -2.32       -1.52    1.0    301ms
  3   -7.921407573707       -3.62       -2.48    1.5    1.14s
  4   -7.921440914087       -4.48       -2.84    2.3    473ms
  5   -7.921441766458       -6.07       -3.16    1.0    318ms
  6   -7.921442006126       -6.62       -4.32    1.0    308ms
  7   -7.921442021970       -7.80       -4.91    2.3    500ms
  8   -7.921442022129       -9.80       -5.17    1.9    371ms
  9   -7.921442022142      -10.88       -5.81    1.0    313ms
 10   -7.921442022144      -11.77       -6.36    1.6    354ms
 11   -7.921442022144      -12.77       -6.97    1.7    376ms
 12   -7.921442022144      -13.85       -7.76    1.8    403ms
 13   -7.921442022144      -15.05       -8.19    2.0    431ms

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.98s  Non-interacting
   1        0       1        1.03     15.1   13.4s  
   2        0       2        0.53     14.5   1.33s  
   3        0       3       -0.01     14.1   1.27s  
   4        0       4       -0.87     13.7   1.25s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   977ms  
   7        0       7       -3.33      8.9   886ms  
   8        0       8       -4.02      7.8   813ms  
   9        0       9       -5.04      6.5   705ms  
  10        0      10       -6.06      3.9   524ms  
  11        0      11       -7.08      2.3   414ms  
  12        0      12       -8.27      1.0   326ms  
  13        1       1       -7.53     17.8   1.95s  Restart
  14        1       2       -7.88      3.2   514ms  
  15        1       3       -8.71      2.1   1.13s  
                                      19.2   2.22s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.54s  Non-interacting
   1        0       1        1.03     15.1   1.40s  
   2        0       2        0.53     14.5   1.29s  
   3        0       3       -0.01     14.1   1.27s  
   4        0       4       -0.87     13.8   1.24s  
   5        0       5       -1.74     11.8   1.12s  
   6        0       6       -2.43     10.0   967ms  
   7        0       7       -3.33      8.9   887ms  
   8        0       8       -4.02      7.8   824ms  
   9        0       9       -5.04      6.5   706ms  
  10        0      10       -6.06      3.9   517ms  
  11        0      11       -7.08      2.3   421ms  
  12        0      12       -8.29      1.0   327ms  
  13        1       1       -7.53     17.9   1.78s  Restart
  14        1       2       -7.89      3.2   419ms  
  15        1       3       -8.68      2.1   364ms  
                                      19.2   1.64s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.52s  Non-interacting
   1        0       1        1.03     15.1   1.42s  
   2        0       2        0.53     14.6   1.30s  
   3        0       3       -0.01     14.1   1.26s  
   4        0       4       -0.87     13.8   1.26s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   975ms  
   7        0       7       -3.33      8.9   891ms  
   8        0       8       -4.02      7.9   823ms  
   9        0       9       -5.04      6.5   715ms  
  10        0      10       -6.06      3.9   522ms  
  11        0      11       -7.08      2.3   418ms  
  12        0      12       -8.28      1.0   411ms  
  13        1       1       -7.53     17.8   2.55s  Restart
  14        1       2       -7.89      3.2   392ms  
  15        1       3       -8.69      2.1   343ms  
                                      19.2   1.61s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.50s  Non-interacting
   1        0       1        1.03     15.1   1.42s  
   2        0       2        0.53     14.5   1.34s  
   3        0       3       -0.01     14.1   1.27s  
   4        0       4       -0.87     13.7   1.25s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   969ms  
   7        0       7       -3.33      8.9   885ms  
   8        0       8       -4.02      7.8   825ms  
   9        0       9       -5.04      6.5   706ms  
  10        0      10       -6.06      3.9   524ms  
  11        0      11       -7.08      2.3   415ms  
  12        0      12       -8.27      1.0   330ms  
  13        1       1       -7.54     17.8   1.78s  Restart
  14        1       2       -7.89      3.2   427ms  
  15        1       3       -8.72      2.1   366ms  
                                      19.2   1.65s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.52s  Non-interacting
   1        0       1        1.03     15.1   1.42s  
   2        0       2        0.53     14.6   1.29s  
   3        0       3       -0.01     14.1   1.28s  
   4        0       4       -0.87     13.8   1.26s  
   5        0       5       -1.74     11.8   1.12s  
   6        0       6       -2.43     10.0   977ms  
   7        0       7       -3.33      8.9   889ms  
   8        0       8       -4.02      7.8   823ms  
   9        0       9       -5.04      6.5   708ms  
  10        0      10       -6.06      3.9   517ms  
  11        0      11       -7.08      2.3   499ms  
  12        0      12       -8.28      1.0   1.10s  
  13        1       1       -7.54     17.8   1.77s  Restart
  14        1       2       -7.89      3.2   410ms  
  15        1       3       -8.70      2.1   361ms  
                                      19.2   1.61s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.50s  Non-interacting
   1        0       1        1.03     15.1   1.42s  
   2        0       2        0.53     14.6   1.29s  
   3        0       3       -0.01     14.1   1.27s  
   4        0       4       -0.87     13.8   1.26s  
   5        0       5       -1.74     11.8   1.12s  
   6        0       6       -2.43     10.0   973ms  
   7        0       7       -3.33      8.9   885ms  
   8        0       8       -4.02      7.9   825ms  
   9        0       9       -5.04      6.5   704ms  
  10        0      10       -6.06      3.9   525ms  
  11        0      11       -7.08      2.3   413ms  
  12        0      12       -8.28      1.0   331ms  
  13        1       1       -7.53     17.8   1.77s  Restart
  14        1       2       -7.89      3.2   423ms  
  15        1       3       -8.68      2.1   362ms  
                                      19.2   1.64s  Final orbitals
146.283986 seconds (143.70 M allocations: 31.722 GiB, 4.14% gc time, 24.76% 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