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.916279824294                   -0.69    4.0    612ms
  2   -7.921170428829       -2.31       -1.52    1.0    268ms
  3   -7.921410789655       -3.62       -2.47    1.5    349ms
  4   -7.921440967467       -4.52       -2.87    2.2    381ms
  5   -7.921441818132       -6.07       -3.25    1.0    271ms
  6   -7.921442009684       -6.72       -4.48    1.1    282ms
  7   -7.921442022053       -7.91       -5.00    2.5    414ms
  8   -7.921442022134      -10.09       -5.29    1.6    317ms
  9   -7.921442022143      -11.07       -6.01    1.0    271ms
 10   -7.921442022144      -12.00       -6.27    1.8    340ms
 11   -7.921442022144      -12.86       -6.93    1.0    264ms
 12   -7.921442022144      -13.80       -7.75    1.9    348ms
 13   -7.921442022144      -14.57       -8.47    2.0    389ms

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.94s  Non-interacting
   1        0       1        1.03     15.1   12.5s  
   2        0       2        0.53     14.5   1.15s  
   3        0       3       -0.01     14.1   1.08s  
   4        0       4       -0.87     13.8   1.05s  
   5        0       5       -1.74     11.8   985ms  
   6        0       6       -2.43     10.0   835ms  
   7        0       7       -3.33      8.9   763ms  
   8        0       8       -4.02      7.8   702ms  
   9        0       9       -5.04      6.4   599ms  
  10        0      10       -6.06      3.9   453ms  
  11        0      11       -7.08      2.3   361ms  
  12        0      12       -8.28      1.0   284ms  
  13        1       1       -7.54     17.8   1.64s  Restart
  14        1       2       -7.87      3.2   384ms  
  15        1       3       -8.71      2.2   337ms  
                                      19.2   2.11s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.25s  Non-interacting
   1        0       1        1.03     15.1   1.19s  
   2        0       2        0.53     14.5   1.09s  
   3        0       3       -0.01     14.1   1.06s  
   4        0       4       -0.87     13.7   1.06s  
   5        0       5       -1.74     11.8   893ms  
   6        0       6       -2.43     10.0   781ms  
   7        0       7       -3.33      8.9   722ms  
   8        0       8       -4.02      7.8   670ms  
   9        0       9       -5.04      6.4   574ms  
  10        0      10       -6.06      3.9   421ms  
  11        0      11       -7.08      2.3   336ms  
  12        0      12       -8.28      1.0   270ms  
  13        1       1       -7.53     17.9   1.44s  Restart
  14        1       2       -7.87      3.2   349ms  
  15        1       3       -8.67      2.1   300ms  
                                      19.2   1.34s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.23s  Non-interacting
   1        0       1        1.03     15.1   1.15s  
   2        0       2        0.53     14.5   1.05s  
   3        0       3       -0.01     14.1   1.03s  
   4        0       4       -0.87     13.7   1.02s  
   5        0       5       -1.74     11.8   897ms  
   6        0       6       -2.43     10.0   790ms  
   7        0       7       -3.33      8.9   722ms  
   8        0       8       -4.02      7.9   668ms  
   9        0       9       -5.04      6.4   564ms  
  10        0      10       -6.06      3.9   430ms  
  11        0      11       -7.08      2.3   333ms  
  12        0      12       -8.27      1.0   273ms  
  13        1       1       -7.55     17.8   1.44s  Restart
  14        1       2       -7.88      3.2   341ms  
  15        1       3       -8.70      2.1   301ms  
                                      19.2   1.33s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.22s  Non-interacting
   1        0       1        1.03     15.1   1.14s  
   2        0       2        0.53     14.5   1.05s  
   3        0       3       -0.01     14.1   1.03s  
   4        0       4       -0.87     13.8   1.02s  
   5        0       5       -1.74     11.8   898ms  
   6        0       6       -2.43     10.0   884ms  
   7        0       7       -3.33      8.9   1.61s  
   8        0       8       -4.02      7.8   629ms  
   9        0       9       -5.04      6.4   615ms  
  10        0      10       -6.06      3.9   403ms  
  11        0      11       -7.08      2.3   350ms  
  12        0      12       -8.28      1.0   291ms  
  13        1       1       -7.54     18.0   1.51s  Restart
  14        1       2       -7.85      3.2   384ms  
  15        1       3       -8.66      2.1   308ms  
                                      19.2   1.40s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.28s  Non-interacting
   1        0       1        1.03     15.1   1.22s  
   2        0       2        0.53     14.5   1.11s  
   3        0       3       -0.01     14.1   1.09s  
   4        0       4       -0.87     13.7   1.08s  
   5        0       5       -1.74     11.8   949ms  
   6        0       6       -2.43     10.0   835ms  
   7        0       7       -3.33      8.9   767ms  
   8        0       8       -4.02      7.8   724ms  
   9        0       9       -5.04      6.4   607ms  
  10        0      10       -6.06      3.9   450ms  
  11        0      11       -7.08      2.3   360ms  
  12        0      12       -8.28      1.0   281ms  
  13        1       1       -7.52     18.0   1.54s  Restart
  14        1       2       -7.85      3.2   375ms  
  15        1       3       -8.65      2.1   304ms  
                                      19.2   1.42s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.29s  Non-interacting
   1        0       1        1.03     15.1   1.22s  
   2        0       2        0.53     14.5   1.13s  
   3        0       3       -0.01     14.1   1.09s  
   4        0       4       -0.87     13.7   1.09s  
   5        0       5       -1.74     11.8   966ms  
   6        0       6       -2.43     10.0   842ms  
   7        0       7       -3.33      8.9   777ms  
   8        0       8       -4.02      7.9   725ms  
   9        0       9       -5.04      6.4   616ms  
  10        0      10       -6.06      3.9   458ms  
  11        0      11       -7.08      2.3   361ms  
  12        0      12       -8.27      1.0   288ms  
  13        1       1       -7.53     18.0   1.54s  Restart
  14        1       2       -7.86      3.2   367ms  
  15        1       3       -8.65      2.1   321ms  
                                      19.2   1.41s  Final orbitals
128.305821 seconds (62.71 M allocations: 33.017 GiB, 4.72% gc time, 29.02% 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