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 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.916324060453                   -0.69    4.2    796ms
  2   -7.921170414022       -2.31       -1.52    1.0    320ms
  3   -7.921406928331       -3.63       -2.48    1.4    354ms
  4   -7.921440932340       -4.47       -2.84    2.4    1.44s
  5   -7.921441752827       -6.09       -3.13    1.0    315ms
  6   -7.921442008560       -6.59       -4.57    1.1    316ms
  7   -7.921442022099       -7.87       -4.99    2.7    551ms
  8   -7.921442022139      -10.39       -5.36    1.5    384ms
  9   -7.921442022142      -11.54       -5.67    1.0    319ms
 10   -7.921442022144      -11.71       -6.23    1.1    327ms
 11   -7.921442022144      -12.65       -7.53    1.7    422ms
 12   -7.921442022144      -13.85       -7.42    2.8    564ms
 13   -7.921442022144      -14.57       -8.33    1.0    308ms

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.09s  Non-interacting
   1        0       1        1.03     15.1   9.62s  
   2        0       2        0.53     14.5   1.47s  
   3        0       3       -0.01     14.1   1.39s  
   4        0       4       -0.87     13.7   1.36s  
   5        0       5       -1.74     11.8   1.22s  
   6        0       6       -2.43     10.0   1.05s  
   7        0       7       -3.33      8.9   954ms  
   8        0       8       -4.02      7.8   895ms  
   9        0       9       -5.04      6.4   771ms  
  10        0      10       -6.06      3.9   543ms  
  11        0      11       -7.08      2.3   427ms  
  12        0      12       -8.27      1.0   315ms  
  13        1       1       -7.54     17.8   2.97s  Restart
  14        1       2       -7.88      3.2   412ms  
  15        1       3       -8.71      2.2   345ms  
                                      19.2   2.28s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.69s  Non-interacting
   1        0       1        1.03     15.1   1.55s  
   2        0       2        0.53     14.5   1.42s  
   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.22s  
   6        0       6       -2.43     10.0   1.04s  
   7        0       7       -3.33      8.9   968ms  
   8        0       8       -4.02      7.8   872ms  
   9        0       9       -5.04      6.4   761ms  
  10        0      10       -6.06      3.9   535ms  
  11        0      11       -7.08      2.3   421ms  
  12        0      12       -8.28      1.0   317ms  
  13        1       1       -7.54     17.8   1.92s  Restart
  14        1       2       -7.89      3.2   417ms  
  15        1       3       -8.68      2.0   354ms  
                                      19.2   1.82s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.71s  Non-interacting
   1        0       1        1.03     15.1   1.54s  
   2        0       2        0.53     14.5   1.42s  
   3        0       3       -0.01     14.1   1.38s  
   4        0       4       -0.87     13.8   1.38s  
   5        0       5       -1.74     11.8   1.22s  
   6        0       6       -2.43     10.0   1.06s  
   7        0       7       -3.33      8.9   972ms  
   8        0       8       -4.02      7.8   987ms  
   9        0       9       -5.04      6.4   1.55s  
  10        0      10       -6.06      3.9   529ms  
  11        0      11       -7.08      2.2   403ms  
  12        0      12       -8.27      1.0   299ms  
  13        1       1       -7.53     17.9   1.91s  Restart
  14        1       2       -7.88      3.2   409ms  
  15        1       3       -8.65      2.1   355ms  
                                      19.2   1.82s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.74s  Non-interacting
   1        0       1        1.03     15.1   1.56s  
   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.37s  
   5        0       5       -1.74     11.8   1.22s  
   6        0       6       -2.43     10.0   1.07s  
   7        0       7       -3.33      8.9   975ms  
   8        0       8       -4.02      7.8   885ms  
   9        0       9       -5.04      6.4   750ms  
  10        0      10       -6.06      3.9   540ms  
  11        0      11       -7.08      2.3   416ms  
  12        0      12       -8.27      1.0   314ms  
  13        1       1       -7.53     17.9   1.94s  Restart
  14        1       2       -7.87      3.2   420ms  
  15        1       3       -8.69      2.2   373ms  
                                      19.2   1.83s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.76s  Non-interacting
   1        0       1        1.03     15.1   1.55s  
   2        0       2        0.53     14.5   1.44s  
   3        0       3       -0.01     14.1   1.40s  
   4        0       4       -0.87     13.8   1.37s  
   5        0       5       -1.74     11.8   2.15s  
   6        0       6       -2.43     10.0   1.03s  
   7        0       7       -3.33      8.9   932ms  
   8        0       8       -4.02      7.8   882ms  
   9        0       9       -5.04      6.4   723ms  
  10        0      10       -6.06      3.9   531ms  
  11        0      11       -7.08      2.3   406ms  
  12        0      12       -8.28      1.0   313ms  
  13        1       1       -7.53     17.9   1.93s  Restart
  14        1       2       -7.88      3.2   431ms  
  15        1       3       -8.68      2.1   359ms  
                                      19.2   1.82s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.74s  Non-interacting
   1        0       1        1.03     15.1   1.54s  
   2        0       2        0.53     14.5   1.42s  
   3        0       3       -0.01     14.1   1.37s  
   4        0       4       -0.87     13.8   1.38s  
   5        0       5       -1.74     11.8   1.21s  
   6        0       6       -2.43     10.0   1.05s  
   7        0       7       -3.33      8.9   957ms  
   8        0       8       -4.02      7.8   880ms  
   9        0       9       -5.04      6.4   750ms  
  10        0      10       -6.06      3.9   545ms  
  11        0      11       -7.08      2.3   413ms  
  12        0      12       -8.27      1.0   326ms  
  13        1       1       -7.53     17.9   1.92s  Restart
  14        1       2       -7.88      3.2   428ms  
  15        1       3       -8.64      2.1   353ms  
                                      19.2   1.83s  Final orbitals
147.625306 seconds (144.24 M allocations: 31.707 GiB, 4.82% gc time, 19.21% compilation time)

These are the final phonon frequencies:

phret_q0.frequencies
6-element Vector{Float64}:
 0.00042654659206182245
 0.00042654659406379857
 0.0010167311239306118
 0.002180329340544575
 0.002208077701381627
 0.0022080777022311106