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.916345553590                   -0.69    4.2    648ms
  2   -7.921177855996       -2.32       -1.52    1.0    247ms
  3   -7.921408584057       -3.64       -2.48    1.4    278ms
  4   -7.921440926928       -4.49       -2.84    2.3    389ms
  5   -7.921441775656       -6.07       -3.16    1.1    263ms
  6   -7.921442008154       -6.63       -4.50    1.0    252ms
  7   -7.921442022051       -7.86       -4.97    2.6    424ms
  8   -7.921442022132      -10.09       -5.22    1.7    307ms
  9   -7.921442022143      -10.98       -5.95    1.0    264ms
 10   -7.921442022144      -11.93       -6.15    1.6    311ms
 11   -7.921442022144      -12.67       -7.12    1.0    261ms
 12   -7.921442022144      -13.75       -7.54    2.0    372ms
 13   -7.921442022144   +    -Inf       -8.48    1.1    270ms

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.62s  Non-interacting
   1        0       1        1.03     15.2   10.0s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.16s  
   4        0       4       -0.87     13.7   1.62s  
   5        0       5       -1.74     11.8   906ms  
   6        0       6       -2.43     10.0   799ms  
   7        0       7       -3.33      8.8   739ms  
   8        0       8       -4.02      7.8   686ms  
   9        0       9       -5.04      6.4   592ms  
  10        0      10       -6.06      3.9   442ms  
  11        0      11       -7.08      2.3   347ms  
  12        0      12       -8.27      1.0   277ms  
  13        1       1       -7.53     17.8   1.64s  Restart
  14        1       2       -7.87      3.2   377ms  
  15        1       3       -8.70      2.1   332ms  
                                      19.2   1.84s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.25s  Non-interacting
   1        0       1        1.03     15.2   1.17s  
   2        0       2        0.53     14.5   1.07s  
   3        0       3       -0.01     14.1   1.05s  
   4        0       4       -0.87     13.7   1.03s  
   5        0       5       -1.74     11.8   925ms  
   6        0       6       -2.43     10.0   810ms  
   7        0       7       -3.33      8.9   744ms  
   8        0       8       -4.02      7.8   678ms  
   9        0       9       -5.04      6.5   584ms  
  10        0      10       -6.06      3.9   438ms  
  11        0      11       -7.08      2.2   346ms  
  12        0      12       -8.27      1.0   278ms  
  13        1       1       -7.53     17.9   1.47s  Restart
  14        1       2       -7.88      3.2   357ms  
  15        1       3       -8.67      2.1   303ms  
                                      19.2   1.35s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.92s  Non-interacting
   1        0       1        1.03     15.2   1.11s  
   2        0       2        0.53     14.5   1.05s  
   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   922ms  
   6        0       6       -2.43     10.0   809ms  
   7        0       7       -3.33      8.9   741ms  
   8        0       8       -4.02      7.8   675ms  
   9        0       9       -5.04      6.4   598ms  
  10        0      10       -6.06      3.9   431ms  
  11        0      11       -7.08      2.2   356ms  
  12        0      12       -8.27      1.0   273ms  
  13        1       1       -7.52     17.9   1.48s  Restart
  14        1       2       -7.87      3.2   359ms  
  15        1       3       -8.65      2.1   306ms  
                                      19.2   1.35s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.25s  Non-interacting
   1        0       1        1.03     15.2   1.18s  
   2        0       2        0.53     14.5   1.07s  
   3        0       3       -0.01     14.1   1.05s  
   4        0       4       -0.87     13.7   1.04s  
   5        0       5       -1.74     11.8   927ms  
   6        0       6       -2.43     10.0   814ms  
   7        0       7       -3.33      8.9   745ms  
   8        0       8       -4.02      7.8   678ms  
   9        0       9       -5.04      6.4   590ms  
  10        0      10       -6.06      3.9   440ms  
  11        0      11       -7.08      2.3   348ms  
  12        0      12       -8.27      1.0   274ms  
  13        1       1       -7.53     17.9   1.49s  Restart
  14        1       2       -7.88      3.2   350ms  
  15        1       3       -8.71      2.1   1.02s  
                                      19.2   1.32s  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.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.7   1.04s  
   5        0       5       -1.74     11.8   918ms  
   6        0       6       -2.43     10.0   807ms  
   7        0       7       -3.33      8.9   744ms  
   8        0       8       -4.02      7.8   674ms  
   9        0       9       -5.04      6.4   585ms  
  10        0      10       -6.06      3.9   435ms  
  11        0      11       -7.08      2.2   344ms  
  12        0      12       -8.27      1.0   275ms  
  13        1       1       -7.53     17.9   1.47s  Restart
  14        1       2       -7.87      3.2   356ms  
  15        1       3       -8.67      2.1   304ms  
                                      19.2   1.35s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.24s  Non-interacting
   1        0       1        1.03     15.2   1.18s  
   2        0       2        0.53     14.5   1.08s  
   3        0       3       -0.01     14.1   1.04s  
   4        0       4       -0.87     13.8   1.04s  
   5        0       5       -1.74     11.8   927ms  
   6        0       6       -2.43     10.0   803ms  
   7        0       7       -3.33      8.9   761ms  
   8        0       8       -4.02      7.8   676ms  
   9        0       9       -5.04      6.4   592ms  
  10        0      10       -6.06      3.9   439ms  
  11        0      11       -7.08      2.2   347ms  
  12        0      12       -8.27      1.0   274ms  
  13        1       1       -7.52     17.9   1.60s  Restart
  14        1       2       -7.87      3.2   925ms  
  15        1       3       -8.65      2.1   283ms  
                                      19.2   1.31s  Final orbitals
119.849260 seconds (64.68 M allocations: 29.581 GiB, 5.03% gc time, 23.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