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.916286247410                   -0.69    4.0    573ms
  2   -7.921172360294       -2.31       -1.52    1.0    327ms
  3   -7.921410928682       -3.62       -2.47    1.5    309ms
  4   -7.921440946072       -4.52       -2.87    2.2    389ms
  5   -7.921441814026       -6.06       -3.24    1.1    303ms
  6   -7.921442009321       -6.71       -4.46    1.2    278ms
  7   -7.921442022048       -7.90       -5.01    2.5    431ms
  8   -7.921442022134      -10.07       -5.29    1.7    313ms
  9   -7.921442022143      -11.04       -6.21    1.1    275ms
 10   -7.921442022144      -12.12       -6.20    2.1    388ms
 11   -7.921442022144      -12.77       -6.88    1.0    264ms
 12   -7.921442022144      -13.82       -7.85    1.7    327ms
 13   -7.921442022144      -14.57       -8.29    2.1    405ms

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   2.10s  Non-interacting
   1        0       1        1.03     15.1   12.3s  
   2        0       2        0.53     14.5   1.18s  
   3        0       3       -0.01     14.1   1.11s  
   4        0       4       -0.87     13.7   1.09s  
   5        0       5       -1.74     11.8   1.58s  
   6        0       6       -2.43     10.0   832ms  
   7        0       7       -3.33      8.9   777ms  
   8        0       8       -4.02      7.9   704ms  
   9        0       9       -5.04      6.4   608ms  
  10        0      10       -6.06      3.9   475ms  
  11        0      11       -7.08      2.3   366ms  
  12        0      12       -8.27      1.0   293ms  
  13        1       1       -7.56     17.8   1.71s  Restart
  14        1       2       -7.88      3.2   390ms  
  15        1       3       -8.69      2.1   340ms  
                                      19.2   2.21s  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.25s  
   2        0       2        0.53     14.5   1.13s  
   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   973ms  
   6        0       6       -2.43     10.0   868ms  
   7        0       7       -3.33      8.9   781ms  
   8        0       8       -4.02      7.8   729ms  
   9        0       9       -5.04      6.4   622ms  
  10        0      10       -6.06      3.9   457ms  
  11        0      11       -7.08      2.3   374ms  
  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   372ms  
  15        1       3       -8.65      2.1   322ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.32s  Non-interacting
   1        0       1        1.03     15.1   1.86s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.11s  
   4        0       4       -0.87     13.8   1.08s  
   5        0       5       -1.74     11.8   971ms  
   6        0       6       -2.43     10.0   852ms  
   7        0       7       -3.33      8.9   782ms  
   8        0       8       -4.02      7.9   726ms  
   9        0       9       -5.04      6.4   621ms  
  10        0      10       -6.06      3.9   461ms  
  11        0      11       -7.08      2.3   370ms  
  12        0      12       -8.27      1.0   294ms  
  13        1       1       -7.54     17.9   1.57s  Restart
  14        1       2       -7.87      3.2   377ms  
  15        1       3       -8.66      2.1   323ms  
                                      19.2   1.46s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.32s  Non-interacting
   1        0       1        1.03     15.1   1.25s  
   2        0       2        0.53     14.5   1.15s  
   3        0       3       -0.01     14.1   1.11s  
   4        0       4       -0.87     13.7   1.12s  
   5        0       5       -1.74     11.8   979ms  
   6        0       6       -2.43     10.0   857ms  
   7        0       7       -3.33      8.9   783ms  
   8        0       8       -4.02      7.9   726ms  
   9        0       9       -5.04      6.4   625ms  
  10        0      10       -6.06      3.9   466ms  
  11        0      11       -7.08      2.3   370ms  
  12        0      12       -8.27      1.0   294ms  
  13        1       1       -7.56     17.9   1.57s  Restart
  14        1       2       -7.88      3.2   458ms  
  15        1       3       -8.68      2.1   868ms  
                                      19.2   1.39s  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.23s  
   2        0       2        0.53     14.5   1.14s  
   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   856ms  
   7        0       7       -3.33      8.9   784ms  
   8        0       8       -4.02      7.8   730ms  
   9        0       9       -5.04      6.4   626ms  
  10        0      10       -6.06      3.9   462ms  
  11        0      11       -7.08      2.3   378ms  
  12        0      12       -8.27      1.0   293ms  
  13        1       1       -7.54     17.9   1.57s  Restart
  14        1       2       -7.88      3.2   372ms  
  15        1       3       -8.64      2.1   324ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.32s  Non-interacting
   1        0       1        1.03     15.1   1.25s  
   2        0       2        0.53     14.5   1.15s  
   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   990ms  
   6        0       6       -2.43     10.0   861ms  
   7        0       7       -3.33      8.9   789ms  
   8        0       8       -4.02      7.9   721ms  
   9        0       9       -5.04      6.4   623ms  
  10        0      10       -6.06      3.9   464ms  
  11        0      11       -7.08      2.3   368ms  
  12        0      12       -8.27      1.0   356ms  
  13        1       1       -7.54     17.9   2.07s  Restart
  14        1       2       -7.87      3.2   360ms  
  15        1       3       -8.67      2.1   327ms  
                                      19.2   1.41s  Final orbitals
129.604249 seconds (74.23 M allocations: 33.429 GiB, 3.88% gc time, 26.97% 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