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.916279961267                   -0.69    4.0    599ms
  2   -7.921170923325       -2.31       -1.52    1.0    296ms
  3   -7.921410854209       -3.62       -2.47    1.5    291ms
  4   -7.921440930488       -4.52       -2.87    2.2    385ms
  5   -7.921441814994       -6.05       -3.24    1.1    274ms
  6   -7.921442009267       -6.71       -4.47    1.1    269ms
  7   -7.921442022046       -7.89       -4.98    2.5    426ms
  8   -7.921442022133      -10.06       -5.25    1.5    308ms
  9   -7.921442022143      -11.01       -5.80    1.0    271ms
 10   -7.921442022144      -11.84       -6.38    1.4    296ms
 11   -7.921442022144      -12.86       -7.22    1.6    326ms
 12   -7.921442022144      -14.05       -7.55    2.0    471ms
 13   -7.921442022144      -15.05       -8.44    1.0    1.08s

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.66s  Non-interacting
   1        0       1        1.03     15.1   12.6s  
   2        0       2        0.53     14.5   1.14s  
   3        0       3       -0.01     14.0   1.13s  
   4        0       4       -0.87     13.7   1.09s  
   5        0       5       -1.74     11.8   966ms  
   6        0       6       -2.43     10.0   849ms  
   7        0       7       -3.33      8.8   777ms  
   8        0       8       -4.02      7.8   721ms  
   9        0       9       -5.04      6.4   623ms  
  10        0      10       -6.06      3.9   457ms  
  11        0      11       -7.08      2.3   370ms  
  12        0      12       -8.27      1.0   295ms  
  13        1       1       -7.54     17.9   1.70s  Restart
  14        1       2       -7.87      3.2   393ms  
  15        1       3       -8.67      2.1   342ms  
                                      19.2   2.05s  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.24s  
   2        0       2        0.53     14.5   1.12s  
   3        0       3       -0.01     14.1   1.11s  
   4        0       4       -0.87     13.8   1.09s  
   5        0       5       -1.74     11.8   964ms  
   6        0       6       -2.43     10.0   850ms  
   7        0       7       -3.33      8.9   777ms  
   8        0       8       -4.02      7.8   716ms  
   9        0       9       -5.04      6.4   614ms  
  10        0      10       -6.06      3.9   462ms  
  11        0      11       -7.08      2.3   364ms  
  12        0      12       -8.27      1.0   282ms  
  13        1       1       -7.53     17.9   1.57s  Restart
  14        1       2       -7.88      3.2   377ms  
  15        1       3       -8.65      2.1   324ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.23s  Non-interacting
   1        0       1        1.03     15.1   1.19s  
   2        0       2        0.53     14.5   1.06s  
   3        0       3       -0.01     14.1   1.08s  
   4        0       4       -0.87     13.8   1.09s  
   5        0       5       -1.74     11.8   967ms  
   6        0       6       -2.43     10.0   837ms  
   7        0       7       -3.33      8.9   775ms  
   8        0       8       -4.02      7.9   719ms  
   9        0       9       -5.04      6.4   615ms  
  10        0      10       -6.06      3.9   460ms  
  11        0      11       -7.08      2.3   365ms  
  12        0      12       -8.27      1.0   294ms  
  13        1       1       -7.54     17.9   1.55s  Restart
  14        1       2       -7.87      3.2   368ms  
  15        1       3       -8.66      2.1   328ms  
                                      19.2   1.43s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.30s  Non-interacting
   1        0       1        1.03     15.1   1.24s  
   2        0       2        0.53     14.5   1.13s  
   3        0       3       -0.01     14.0   1.10s  
   4        0       4       -0.87     13.7   1.08s  
   5        0       5       -1.74     11.8   974ms  
   6        0       6       -2.43     10.0   845ms  
   7        0       7       -3.33      8.9   774ms  
   8        0       8       -4.02      7.8   716ms  
   9        0       9       -5.04      6.4   611ms  
  10        0      10       -6.06      3.9   457ms  
  11        0      11       -7.08      2.3   365ms  
  12        0      12       -8.27      1.0   293ms  
  13        1       1       -7.54     18.0   1.56s  Restart
  14        1       2       -7.85      3.2   369ms  
  15        1       3       -8.64      2.1   328ms  
                                      19.2   1.44s  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.24s  
   2        0       2        0.53     14.5   1.12s  
   3        0       3       -0.01     14.1   1.10s  
   4        0       4       -0.87     13.8   1.09s  
   5        0       5       -1.74     11.8   959ms  
   6        0       6       -2.43     10.0   842ms  
   7        0       7       -3.33      8.9   774ms  
   8        0       8       -4.02      7.8   712ms  
   9        0       9       -5.04      6.4   605ms  
  10        0      10       -6.06      3.9   549ms  
  11        0      11       -7.08      2.3   1.22s  
  12        0      12       -8.27      1.0   270ms  
  13        1       1       -7.53     17.9   1.53s  Restart
  14        1       2       -7.87      3.2   342ms  
  15        1       3       -8.65      2.1   310ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.30s  Non-interacting
   1        0       1        1.03     15.1   1.25s  
   2        0       2        0.53     14.5   1.14s  
   3        0       3       -0.01     14.1   1.10s  
   4        0       4       -0.87     13.8   1.09s  
   5        0       5       -1.74     11.8   971ms  
   6        0       6       -2.43     10.0   847ms  
   7        0       7       -3.33      8.9   771ms  
   8        0       8       -4.02      7.9   713ms  
   9        0       9       -5.04      6.4   618ms  
  10        0      10       -6.06      3.9   452ms  
  11        0      11       -7.08      2.3   365ms  
  12        0      12       -8.27      1.0   294ms  
  13        1       1       -7.53     18.0   1.54s  Restart
  14        1       2       -7.86      3.2   367ms  
  15        1       3       -8.63      2.1   321ms  
                                      19.2   1.42s  Final orbitals
129.685896 seconds (62.72 M allocations: 33.013 GiB, 3.83% gc time, 28.31% 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