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.916333300542                   -0.69    4.2    806ms
  2   -7.921175305656       -2.31       -1.52    1.0    312ms
  3   -7.921409044632       -3.63       -2.48    1.5    373ms
  4   -7.921440935292       -4.50       -2.85    2.2    475ms
  5   -7.921441773567       -6.08       -3.17    1.0    448ms
  6   -7.921442007463       -6.63       -4.55    1.0    1.22s
  7   -7.921442022084       -7.84       -5.11    2.7    538ms
  8   -7.921442022139      -10.26       -5.45    1.8    391ms
  9   -7.921442022143      -11.42       -6.04    1.1    336ms
 10   -7.921442022144      -12.14       -6.17    1.5    397ms
 11   -7.921442022144      -12.80       -7.52    1.0    308ms
 12   -7.921442022144      -14.05       -7.74    2.8    585ms
 13   -7.921442022144      -14.75       -8.51    1.0    339ms

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.13s  Non-interacting
   1        0       1        1.03     15.2   10.0s  
   2        0       2        0.53     14.5   1.51s  
   3        0       3       -0.01     14.1   1.41s  
   4        0       4       -0.87     13.8   1.39s  
   5        0       5       -1.74     11.8   1.25s  
   6        0       6       -2.43     10.0   1.08s  
   7        0       7       -3.33      8.9   975ms  
   8        0       8       -4.02      7.8   894ms  
   9        0       9       -5.04      6.4   775ms  
  10        0      10       -6.06      3.9   563ms  
  11        0      11       -7.08      2.3   417ms  
  12        0      12       -8.28      1.0   331ms  
  13        1       1       -7.52     17.9   2.15s  Restart
  14        1       2       -7.87      3.2   458ms  
  15        1       3       -8.68      2.2   386ms  
                                      19.2   2.40s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.76s  Non-interacting
   1        0       1        1.03     15.2   1.56s  
   2        0       2        0.53     14.5   1.41s  
   3        0       3       -0.01     14.1   1.38s  
   4        0       4       -0.87     13.7   1.40s  
   5        0       5       -1.74     11.8   1.25s  
   6        0       6       -2.43     10.0   1.07s  
   7        0       7       -3.33      8.9   982ms  
   8        0       8       -4.02      7.8   881ms  
   9        0       9       -5.04      6.4   770ms  
  10        0      10       -6.06      3.9   541ms  
  11        0      11       -7.08      2.3   436ms  
  12        0      12       -8.28      1.0   325ms  
  13        1       1       -7.54     17.9   1.94s  Restart
  14        1       2       -7.88      3.1   448ms  
  15        1       3       -8.64      2.1   360ms  
                                      19.2   1.83s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.74s  Non-interacting
   1        0       1        1.03     15.2   1.55s  
   2        0       2        0.53     14.5   1.45s  
   3        0       3       -0.01     14.1   1.41s  
   4        0       4       -0.87     13.7   1.39s  
   5        0       5       -1.74     11.8   1.24s  
   6        0       6       -2.43     10.0   1.06s  
   7        0       7       -3.33      8.9   972ms  
   8        0       8       -4.02      7.8   889ms  
   9        0       9       -5.04      6.4   756ms  
  10        0      10       -6.06      3.9   545ms  
  11        0      11       -7.08      2.3   423ms  
  12        0      12       -8.27      1.0   320ms  
  13        1       1       -7.53     17.9   1.94s  Restart
  14        1       2       -7.88      3.1   423ms  
  15        1       3       -8.67      2.1   367ms  
                                      19.2   1.85s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.75s  Non-interacting
   1        0       1        1.03     15.2   1.54s  
   2        0       2        0.53     14.5   1.43s  
   3        0       3       -0.01     14.1   1.39s  
   4        0       4       -0.87     13.8   1.38s  
   5        0       5       -1.74     11.8   1.23s  
   6        0       6       -2.43     10.0   1.08s  
   7        0       7       -3.33      8.9   972ms  
   8        0       8       -4.02      7.8   904ms  
   9        0       9       -5.04      6.4   756ms  
  10        0      10       -6.06      3.9   543ms  
  11        0      11       -7.08      2.3   423ms  
  12        0      12       -8.28      1.0   321ms  
  13        1       1       -7.52     17.8   1.94s  Restart
  14        1       2       -7.89      3.1   431ms  
  15        1       3       -8.69      2.1   376ms  
                                      19.2   1.85s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.74s  Non-interacting
   1        0       1        1.03     15.2   1.57s  
   2        0       2        0.53     14.5   1.44s  
   3        0       3       -0.01     14.1   1.41s  
   4        0       4       -0.87     13.7   1.39s  
   5        0       5       -1.74     11.8   1.23s  
   6        0       6       -2.43     10.0   1.07s  
   7        0       7       -3.33      8.9   985ms  
   8        0       8       -4.02      7.8   893ms  
   9        0       9       -5.04      6.4   761ms  
  10        0      10       -6.06      3.9   542ms  
  11        0      11       -7.08      2.3   423ms  
  12        0      12       -8.28      1.0   322ms  
  13        1       1       -7.54     17.9   1.96s  Restart
  14        1       2       -7.89      3.1   431ms  
  15        1       3       -8.65      2.1   371ms  
                                      19.2   1.85s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.79s  Non-interacting
   1        0       1        1.03     15.2   1.54s  
   2        0       2        0.53     14.5   1.44s  
   3        0       3       -0.01     14.1   1.40s  
   4        0       4       -0.87     13.7   1.38s  
   5        0       5       -1.74     11.8   1.21s  
   6        0       6       -2.43     10.0   1.07s  
   7        0       7       -3.33      8.8   972ms  
   8        0       8       -4.02      7.8   915ms  
   9        0       9       -5.04      6.4   773ms  
  10        0      10       -6.06      3.9   575ms  
  11        0      11       -7.08      2.3   432ms  
  12        0      12       -8.27      1.0   330ms  
  13        1       1       -7.53     17.9   1.96s  Restart
  14        1       2       -7.88      3.1   433ms  
  15        1       3       -8.67      2.1   379ms  
                                      19.2   1.88s  Final orbitals
149.623452 seconds (102.14 M allocations: 30.818 GiB, 4.61% gc time, 20.34% 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