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.916316482568                   -0.69    4.2    635ms
  2   -7.921170995703       -2.31       -1.52    1.0    290ms
  3   -7.921406935138       -3.63       -2.48    1.4    309ms
  4   -7.921440883564       -4.47       -2.83    2.3    528ms
  5   -7.921441755556       -6.06       -3.14    1.0    1.13s
  6   -7.921442006770       -6.60       -4.51    1.0    276ms
  7   -7.921442022059       -7.82       -4.97    2.6    460ms
  8   -7.921442022135      -10.12       -5.30    1.6    340ms
  9   -7.921442022143      -11.12       -5.98    1.1    284ms
 10   -7.921442022144      -11.97       -6.17    1.8    346ms
 11   -7.921442022144      -12.73       -7.60    1.0    285ms
 12   -7.921442022144      -13.91       -8.00    3.0    522ms

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.84s  Non-interacting
   1        0       1        1.03     15.2   12.6s  
   2        0       2        0.53     14.5   1.24s  
   3        0       3       -0.01     14.1   1.19s  
   4        0       4       -0.87     13.7   1.16s  
   5        0       5       -1.74     11.8   1.04s  
   6        0       6       -2.43     10.0   907ms  
   7        0       7       -3.33      8.9   840ms  
   8        0       8       -4.02      7.8   765ms  
   9        0       9       -5.04      6.4   661ms  
  10        0      10       -6.06      3.9   489ms  
  11        0      11       -7.08      2.3   396ms  
  12        0      12       -8.27      1.0   316ms  
  13        1       1       -7.52     17.8   1.84s  Restart
  14        1       2       -7.88      3.2   413ms  
  15        1       3       -8.71      2.1   346ms  
                                      19.2   2.10s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.40s  Non-interacting
   1        0       1        1.03     15.2   1.33s  
   2        0       2        0.53     14.5   1.20s  
   3        0       3       -0.01     14.1   2.14s  
   4        0       4       -0.87     13.8   1.11s  
   5        0       5       -1.74     11.8   990ms  
   6        0       6       -2.43     10.0   889ms  
   7        0       7       -3.33      8.9   805ms  
   8        0       8       -4.02      7.8   740ms  
   9        0       9       -5.04      6.4   642ms  
  10        0      10       -6.06      3.9   475ms  
  11        0      11       -7.08      2.3   385ms  
  12        0      12       -8.28      1.0   304ms  
  13        1       1       -7.53     17.8   1.64s  Restart
  14        1       2       -7.89      3.2   388ms  
  15        1       3       -8.67      2.1   337ms  
                                      19.2   1.51s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.38s  Non-interacting
   1        0       1        1.03     15.2   1.31s  
   2        0       2        0.53     14.5   1.20s  
   3        0       3       -0.01     14.1   1.17s  
   4        0       4       -0.87     13.7   1.15s  
   5        0       5       -1.74     11.8   1.03s  
   6        0       6       -2.43     10.0   898ms  
   7        0       7       -3.33      8.9   821ms  
   8        0       8       -4.02      7.8   765ms  
   9        0       9       -5.04      6.5   659ms  
  10        0      10       -6.06      3.9   493ms  
  11        0      11       -7.08      2.3   387ms  
  12        0      12       -8.26      1.0   309ms  
  13        1       1       -7.52     17.8   1.64s  Restart
  14        1       2       -7.88      3.2   393ms  
  15        1       3       -8.68      2.1   342ms  
                                      19.2   1.53s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.40s  Non-interacting
   1        0       1        1.03     15.2   1.31s  
   2        0       2        0.53     14.5   1.21s  
   3        0       3       -0.01     14.1   1.18s  
   4        0       4       -0.87     13.7   1.17s  
   5        0       5       -1.74     11.8   1.04s  
   6        0       6       -2.43     10.0   902ms  
   7        0       7       -3.33      8.9   927ms  
   8        0       8       -4.02      7.8   1.61s  
   9        0       9       -5.04      6.4   631ms  
  10        0      10       -6.06      3.9   459ms  
  11        0      11       -7.08      2.3   375ms  
  12        0      12       -8.27      1.0   312ms  
  13        1       1       -7.50     17.9   1.58s  Restart
  14        1       2       -7.86      3.2   393ms  
  15        1       3       -8.70      2.2   339ms  
                                      19.2   1.52s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.40s  Non-interacting
   1        0       1        1.03     15.2   1.32s  
   2        0       2        0.53     14.5   1.22s  
   3        0       3       -0.01     14.1   1.18s  
   4        0       4       -0.87     13.8   1.17s  
   5        0       5       -1.74     11.8   1.04s  
   6        0       6       -2.43     10.0   908ms  
   7        0       7       -3.33      8.9   839ms  
   8        0       8       -4.02      7.8   767ms  
   9        0       9       -5.04      6.4   665ms  
  10        0      10       -6.06      3.9   488ms  
  11        0      11       -7.08      2.3   393ms  
  12        0      12       -8.27      1.0   312ms  
  13        1       1       -7.53     17.8   1.67s  Restart
  14        1       2       -7.89      3.2   397ms  
  15        1       3       -8.68      2.1   343ms  
                                      19.2   1.53s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.40s  Non-interacting
   1        0       1        1.03     15.2   1.32s  
   2        0       2        0.53     14.5   1.21s  
   3        0       3       -0.01     14.1   1.18s  
   4        0       4       -0.87     13.7   1.17s  
   5        0       5       -1.74     11.8   1.04s  
   6        0       6       -2.43     10.0   911ms  
   7        0       7       -3.33      8.9   830ms  
   8        0       8       -4.02      7.8   772ms  
   9        0       9       -5.04      6.4   662ms  
  10        0      10       -6.06      3.9   488ms  
  11        0      11       -7.08      2.3   405ms  
  12        0      12       -8.26      1.0   305ms  
  13        1       1       -7.52     17.9   2.60s  Restart
  14        1       2       -7.88      3.2   386ms  
  15        1       3       -8.67      2.1   323ms  
                                      19.2   1.48s  Final orbitals
135.379599 seconds (101.89 M allocations: 30.817 GiB, 4.23% gc time, 25.14% 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