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.916297462299                   -0.69    4.2    647ms
  2   -7.921168397484       -2.31       -1.52    1.0    266ms
  3   -7.921407894430       -3.62       -2.48    1.5    299ms
  4   -7.921440899418       -4.48       -2.85    2.3    427ms
  5   -7.921441775215       -6.06       -3.17    1.1    275ms
  6   -7.921442008045       -6.63       -4.48    1.1    268ms
  7   -7.921442022063       -7.85       -5.13    2.6    459ms
  8   -7.921442022140      -10.12       -5.56    2.0    364ms
  9   -7.921442022143      -11.43       -6.03    1.2    291ms
 10   -7.921442022144      -12.17       -6.24    1.4    310ms
 11   -7.921442022144      -12.91       -7.72    1.1    282ms
 12   -7.921442022144      -13.94       -7.86    3.0    508ms
 13   -7.921442022144   +  -14.75       -8.59    1.0    273ms

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   13.2s  
   2        0       2        0.53     14.5   1.28s  
   3        0       3       -0.01     14.1   1.21s  
   4        0       4       -0.87     13.8   1.20s  
   5        0       5       -1.74     11.8   1.89s  
   6        0       6       -2.43      9.9   882ms  
   7        0       7       -3.33      8.9   830ms  
   8        0       8       -4.02      7.8   765ms  
   9        0       9       -5.04      6.4   671ms  
  10        0      10       -6.06      3.9   491ms  
  11        0      11       -7.08      2.3   391ms  
  12        0      12       -8.28      1.0   307ms  
  13        1       1       -7.52     17.9   1.86s  Restart
  14        1       2       -7.88      3.2   416ms  
  15        1       3       -8.68      2.1   355ms  
                                      19.2   2.16s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.43s  Non-interacting
   1        0       1        1.03     15.1   1.35s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.0   1.20s  
   4        0       4       -0.87     13.7   1.19s  
   5        0       5       -1.74     11.8   1.05s  
   6        0       6       -2.43      9.9   922ms  
   7        0       7       -3.33      8.8   836ms  
   8        0       8       -4.02      7.8   780ms  
   9        0       9       -5.04      6.5   680ms  
  10        0      10       -6.06      3.9   490ms  
  11        0      11       -7.08      2.3   395ms  
  12        0      12       -8.28      1.0   310ms  
  13        1       1       -7.53     17.8   1.69s  Restart
  14        1       2       -7.89      3.2   399ms  
  15        1       3       -8.66      2.1   340ms  
                                      19.2   1.56s  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.34s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.1   2.03s  
   4        0       4       -0.87     13.8   1.14s  
   5        0       5       -1.74     11.8   988ms  
   6        0       6       -2.43      9.9   917ms  
   7        0       7       -3.33      8.9   858ms  
   8        0       8       -4.02      7.8   765ms  
   9        0       9       -5.04      6.5   658ms  
  10        0      10       -6.06      3.9   502ms  
  11        0      11       -7.08      2.3   394ms  
  12        0      12       -8.27      1.0   315ms  
  13        1       1       -7.53     17.9   1.70s  Restart
  14        1       2       -7.87      3.2   408ms  
  15        1       3       -8.66      2.1   346ms  
                                      19.2   1.57s  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.36s  
   2        0       2        0.53     14.5   1.22s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.20s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43      9.9   927ms  
   7        0       7       -3.33      8.9   841ms  
   8        0       8       -4.02      7.8   777ms  
   9        0       9       -5.04      6.4   675ms  
  10        0      10       -6.06      3.9   501ms  
  11        0      11       -7.08      2.3   399ms  
  12        0      12       -8.28      1.0   314ms  
  13        1       1       -7.53     17.8   1.70s  Restart
  14        1       2       -7.88      3.2   399ms  
  15        1       3       -8.68      2.1   347ms  
                                      19.2   1.57s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.30s  Non-interacting
   1        0       1        1.03     15.1   1.28s  
   2        0       2        0.53     14.5   1.18s  
   3        0       3       -0.01     14.0   1.16s  
   4        0       4       -0.87     13.7   1.16s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43      9.9   914ms  
   7        0       7       -3.33      8.8   846ms  
   8        0       8       -4.02      7.8   777ms  
   9        0       9       -5.04      6.5   679ms  
  10        0      10       -6.06      3.9   494ms  
  11        0      11       -7.08      2.3   393ms  
  12        0      12       -8.28      1.0   321ms  
  13        1       1       -7.53     17.8   1.70s  Restart
  14        1       2       -7.87      3.2   399ms  
  15        1       3       -8.67      2.1   345ms  
                                      19.2   1.58s  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.36s  
   2        0       2        0.53     14.5   1.22s  
   3        0       3       -0.01     14.1   1.21s  
   4        0       4       -0.87     13.8   1.19s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43      9.9   926ms  
   7        0       7       -3.33      8.9   855ms  
   8        0       8       -4.02      7.8   792ms  
   9        0       9       -5.04      6.5   677ms  
  10        0      10       -6.06      3.9   490ms  
  11        0      11       -7.08      2.3   406ms  
  12        0      12       -8.27      1.0   318ms  
  13        1       1       -7.55     17.8   1.70s  Restart
  14        1       2       -7.88      3.2   492ms  
  15        1       3       -8.66      2.1   1.10s  
                                      19.2   1.47s  Final orbitals
139.741357 seconds (102.77 M allocations: 30.868 GiB, 4.21% gc time, 25.84% 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