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.916314783657                   -0.69    4.2    697ms
  2   -7.921169748190       -2.31       -1.52    1.0    286ms
  3   -7.921408518355       -3.62       -2.48    1.4    337ms
  4   -7.921440899272       -4.49       -2.85    2.3    429ms
  5   -7.921441780068       -6.06       -3.18    1.0    298ms
  6   -7.921442007162       -6.64       -4.46    1.0    294ms
  7   -7.921442022041       -7.83       -4.99    2.5    474ms
  8   -7.921442022135      -10.03       -5.27    1.9    372ms
  9   -7.921442022143      -11.09       -5.94    1.0    300ms
 10   -7.921442022144      -11.94       -6.21    1.6    350ms
 11   -7.921442022144      -12.73       -7.09    1.1    305ms
 12   -7.921442022144      -13.82       -7.78    2.0    418ms
 13   -7.921442022144   +  -14.75       -8.40    1.8    402ms

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.73s  Non-interacting
   1        0       1        1.03     15.1   12.7s  
   2        0       2        0.53     14.5   1.28s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.21s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   939ms  
   7        0       7       -3.33      8.9   858ms  
   8        0       8       -4.02      7.8   801ms  
   9        0       9       -5.04      6.4   696ms  
  10        0      10       -6.06      3.9   504ms  
  11        0      11       -7.08      2.3   407ms  
  12        0      12       -8.28      1.0   320ms  
  13        1       1       -7.55     17.8   1.90s  Restart
  14        1       2       -7.88      3.1   420ms  
  15        1       3       -8.69      2.1   365ms  
                                      19.2   2.16s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.46s  Non-interacting
   1        0       1        1.03     15.1   1.38s  
   2        0       2        0.53     14.5   1.26s  
   3        0       3       -0.01     14.0   1.22s  
   4        0       4       -0.87     13.7   1.20s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   946ms  
   7        0       7       -3.33      8.9   857ms  
   8        0       8       -4.02      7.8   793ms  
   9        0       9       -5.04      6.4   677ms  
  10        0      10       -6.06      3.9   507ms  
  11        0      11       -7.08      2.3   419ms  
  12        0      12       -8.27      1.0   319ms  
  13        1       1       -7.53     17.8   1.72s  Restart
  14        1       2       -7.88      3.1   403ms  
  15        1       3       -8.68      2.1   436ms  
                                      19.2   2.31s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.39s  Non-interacting
   1        0       1        1.03     15.1   1.35s  
   2        0       2        0.53     14.5   1.25s  
   3        0       3       -0.01     14.0   1.23s  
   4        0       4       -0.87     13.7   1.19s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   941ms  
   7        0       7       -3.33      8.9   861ms  
   8        0       8       -4.02      7.8   793ms  
   9        0       9       -5.04      6.4   690ms  
  10        0      10       -6.06      3.9   507ms  
  11        0      11       -7.08      2.3   402ms  
  12        0      12       -8.27      1.0   323ms  
  13        1       1       -7.54     17.8   1.72s  Restart
  14        1       2       -7.88      3.1   407ms  
  15        1       3       -8.69      2.1   351ms  
                                      19.2   1.60s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.45s  Non-interacting
   1        0       1        1.03     15.1   1.37s  
   2        0       2        0.53     14.5   1.25s  
   3        0       3       -0.01     14.1   1.23s  
   4        0       4       -0.87     13.8   1.22s  
   5        0       5       -1.74     11.8   1.10s  
   6        0       6       -2.43     10.0   950ms  
   7        0       7       -3.33      8.9   861ms  
   8        0       8       -4.02      7.8   807ms  
   9        0       9       -5.04      6.4   690ms  
  10        0      10       -6.06      3.9   504ms  
  11        0      11       -7.08      2.3   409ms  
  12        0      12       -8.28      1.0   322ms  
  13        1       1       -7.55     17.8   1.72s  Restart
  14        1       2       -7.89      3.1   406ms  
  15        1       3       -8.70      2.1   1.25s  
                                      19.2   1.57s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.36s  Non-interacting
   1        0       1        1.03     15.1   1.36s  
   2        0       2        0.53     14.5   1.26s  
   3        0       3       -0.01     14.0   1.23s  
   4        0       4       -0.87     13.7   1.19s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   949ms  
   7        0       7       -3.33      8.9   839ms  
   8        0       8       -4.02      7.8   802ms  
   9        0       9       -5.04      6.4   689ms  
  10        0      10       -6.06      3.9   507ms  
  11        0      11       -7.08      2.3   410ms  
  12        0      12       -8.27      1.0   322ms  
  13        1       1       -7.53     17.8   1.73s  Restart
  14        1       2       -7.89      3.1   403ms  
  15        1       3       -8.69      2.1   359ms  
                                      19.2   1.58s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.46s  Non-interacting
   1        0       1        1.03     15.1   1.38s  
   2        0       2        0.53     14.5   1.27s  
   3        0       3       -0.01     14.1   1.23s  
   4        0       4       -0.87     13.7   1.22s  
   5        0       5       -1.74     11.8   1.09s  
   6        0       6       -2.43     10.0   946ms  
   7        0       7       -3.33      8.9   869ms  
   8        0       8       -4.02      7.8   798ms  
   9        0       9       -5.04      6.4   689ms  
  10        0      10       -6.06      3.9   495ms  
  11        0      11       -7.08      2.3   366ms  
  12        0      12       -8.27      1.0   305ms  
  13        1       1       -7.54     17.8   2.53s  Restart
  14        1       2       -7.88      3.1   374ms  
  15        1       3       -8.70      2.1   319ms  
                                      19.2   1.50s  Final orbitals
140.152095 seconds (96.41 M allocations: 30.475 GiB, 4.18% gc time, 24.91% 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