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.916280160412                   -0.69    4.0    637ms
  2   -7.921169338030       -2.31       -1.52    1.0    263ms
  3   -7.921410494958       -3.62       -2.47    1.5    303ms
  4   -7.921440947668       -4.52       -2.87    2.2    390ms
  5   -7.921441817536       -6.06       -3.24    1.1    277ms
  6   -7.921442009715       -6.72       -4.49    1.1    283ms
  7   -7.921442022051       -7.91       -5.00    2.5    422ms
  8   -7.921442022134      -10.08       -5.29    1.6    324ms
  9   -7.921442022143      -11.03       -5.98    1.0    276ms
 10   -7.921442022144      -11.96       -6.34    1.8    424ms
 11   -7.921442022144      -12.95       -6.96    1.1    1.15s
 12   -7.921442022144      -13.82       -7.77    1.9    354ms
 13   -7.921442022144   +  -14.75       -8.52    2.0    383ms

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.91s  Non-interacting
   1        0       1        1.03     15.2   12.9s  
   2        0       2        0.53     14.5   1.20s  
   3        0       3       -0.01     14.1   1.11s  
   4        0       4       -0.87     13.7   1.10s  
   5        0       5       -1.74     11.8   999ms  
   6        0       6       -2.43     10.0   864ms  
   7        0       7       -3.33      8.9   792ms  
   8        0       8       -4.02      7.8   752ms  
   9        0       9       -5.04      6.4   645ms  
  10        0      10       -6.06      3.9   466ms  
  11        0      11       -7.08      2.3   376ms  
  12        0      12       -8.27      1.0   297ms  
  13        1       1       -7.55     17.8   1.72s  Restart
  14        1       2       -7.89      3.2   393ms  
  15        1       3       -8.70      2.1   346ms  
                                      19.2   2.11s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.35s  Non-interacting
   1        0       1        1.03     15.2   1.28s  
   2        0       2        0.53     14.5   1.16s  
   3        0       3       -0.01     14.1   1.14s  
   4        0       4       -0.87     13.8   1.13s  
   5        0       5       -1.74     11.8   990ms  
   6        0       6       -2.43     10.0   868ms  
   7        0       7       -3.33      8.9   803ms  
   8        0       8       -4.02      7.8   736ms  
   9        0       9       -5.04      6.4   634ms  
  10        0      10       -6.06      3.9   466ms  
  11        0      11       -7.08      2.3   379ms  
  12        0      12       -8.27      1.0   300ms  
  13        1       1       -7.52     17.8   2.50s  Restart
  14        1       2       -7.88      3.2   328ms  
  15        1       3       -8.68      2.1   329ms  
                                      19.2   1.30s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.25s  Non-interacting
   1        0       1        1.03     15.2   1.25s  
   2        0       2        0.53     14.5   1.14s  
   3        0       3       -0.01     14.1   1.13s  
   4        0       4       -0.87     13.8   1.11s  
   5        0       5       -1.74     11.8   988ms  
   6        0       6       -2.43     10.0   871ms  
   7        0       7       -3.33      8.9   782ms  
   8        0       8       -4.02      7.9   730ms  
   9        0       9       -5.04      6.4   620ms  
  10        0      10       -6.06      3.9   464ms  
  11        0      11       -7.08      2.3   372ms  
  12        0      12       -8.27      1.0   293ms  
  13        1       1       -7.53     18.0   1.59s  Restart
  14        1       2       -7.87      3.2   379ms  
  15        1       3       -8.64      2.1   326ms  
                                      19.2   1.46s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.34s  Non-interacting
   1        0       1        1.03     15.2   1.25s  
   2        0       2        0.53     14.5   1.16s  
   3        0       3       -0.01     14.1   1.13s  
   4        0       4       -0.87     13.7   1.12s  
   5        0       5       -1.74     11.8   1.00s  
   6        0       6       -2.43     10.0   863ms  
   7        0       7       -3.33      8.9   796ms  
   8        0       8       -4.02      7.8   732ms  
   9        0       9       -5.04      6.4   635ms  
  10        0      10       -6.06      3.9   460ms  
  11        0      11       -7.08      2.3   371ms  
  12        0      12       -8.27      1.0   300ms  
  13        1       1       -7.55     17.7   1.58s  Restart
  14        1       2       -7.89      3.2   368ms  
  15        1       3       -8.71      2.1   324ms  
                                      19.2   1.46s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.33s  Non-interacting
   1        0       1        1.03     15.2   1.26s  
   2        0       2        0.53     14.5   1.15s  
   3        0       3       -0.01     14.1   1.12s  
   4        0       4       -0.87     13.8   1.12s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   1.69s  
   7        0       7       -3.33      8.9   742ms  
   8        0       8       -4.02      7.8   727ms  
   9        0       9       -5.04      6.4   597ms  
  10        0      10       -6.06      3.9   432ms  
  11        0      11       -7.08      2.3   353ms  
  12        0      12       -8.27      1.0   279ms  
  13        1       1       -7.52     17.9   1.51s  Restart
  14        1       2       -7.88      3.2   368ms  
  15        1       3       -8.68      2.1   323ms  
                                      19.2   1.45s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.33s  Non-interacting
   1        0       1        1.03     15.2   1.26s  
   2        0       2        0.53     14.5   1.12s  
   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   983ms  
   6        0       6       -2.43     10.0   852ms  
   7        0       7       -3.33      8.9   785ms  
   8        0       8       -4.02      7.9   725ms  
   9        0       9       -5.04      6.4   630ms  
  10        0      10       -6.06      3.9   455ms  
  11        0      11       -7.08      2.3   373ms  
  12        0      12       -8.27      1.0   296ms  
  13        1       1       -7.53     17.9   1.57s  Restart
  14        1       2       -7.87      3.2   371ms  
  15        1       3       -8.66      2.1   329ms  
                                      19.2   1.45s  Final orbitals
132.820288 seconds (62.87 M allocations: 33.024 GiB, 3.63% gc time, 28.98% 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