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.916331837602                   -0.69    4.2    710ms
  2   -7.921172241278       -2.32       -1.52    1.0    317ms
  3   -7.921407966757       -3.63       -2.48    1.4    362ms
  4   -7.921440933647       -4.48       -2.84    2.3    486ms
  5   -7.921441779557       -6.07       -3.17    1.0    328ms
  6   -7.921442007333       -6.64       -4.39    1.0    322ms
  7   -7.921442022005       -7.83       -4.91    2.4    522ms
  8   -7.921442022131       -9.90       -5.24    1.8    528ms
  9   -7.921442022143      -10.94       -5.93    1.1    1.06s
 10   -7.921442022144      -11.87       -6.23    1.7    397ms
 11   -7.921442022144      -12.75       -7.14    1.1    315ms
 12   -7.921442022144      -13.80       -7.54    2.1    439ms
 13   -7.921442022144      -14.57       -8.28    1.0    363ms

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.9s  
   2        0       2        0.53     14.5   1.39s  
   3        0       3       -0.01     14.1   1.32s  
   4        0       4       -0.87     13.7   1.30s  
   5        0       5       -1.74     11.8   1.18s  
   6        0       6       -2.43     10.0   1.02s  
   7        0       7       -3.33      8.9   928ms  
   8        0       8       -4.02      7.8   861ms  
   9        0       9       -5.04      6.4   743ms  
  10        0      10       -6.06      3.9   549ms  
  11        0      11       -7.08      2.3   436ms  
  12        0      12       -8.27      1.0   350ms  
  13        1       1       -7.53     17.8   2.05s  Restart
  14        1       2       -7.87      3.1   460ms  
  15        1       3       -8.68      2.1   371ms  
                                      19.2   2.31s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.59s  Non-interacting
   1        0       1        1.03     15.1   1.50s  
   2        0       2        0.53     14.5   2.18s  
   3        0       3       -0.01     14.1   1.30s  
   4        0       4       -0.87     13.7   1.23s  
   5        0       5       -1.74     11.8   1.15s  
   6        0       6       -2.43     10.0   1.01s  
   7        0       7       -3.33      8.9   921ms  
   8        0       8       -4.02      7.8   857ms  
   9        0       9       -5.04      6.4   739ms  
  10        0      10       -6.06      3.9   539ms  
  11        0      11       -7.08      2.3   437ms  
  12        0      12       -8.28      1.0   342ms  
  13        1       1       -7.53     17.8   1.88s  Restart
  14        1       2       -7.88      3.1   438ms  
  15        1       3       -8.66      2.1   381ms  
                                      19.2   1.73s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.60s  Non-interacting
   1        0       1        1.03     15.1   1.49s  
   2        0       2        0.53     14.5   1.36s  
   3        0       3       -0.01     14.1   1.32s  
   4        0       4       -0.87     13.8   1.32s  
   5        0       5       -1.74     11.8   1.18s  
   6        0       6       -2.43     10.0   1.02s  
   7        0       7       -3.33      8.9   937ms  
   8        0       8       -4.02      7.8   845ms  
   9        0       9       -5.04      6.4   731ms  
  10        0      10       -6.06      3.9   534ms  
  11        0      11       -7.08      2.3   428ms  
  12        0      12       -8.27      1.0   350ms  
  13        1       1       -7.54     17.8   1.86s  Restart
  14        1       2       -7.89      3.1   436ms  
  15        1       3       -8.67      2.1   393ms  
                                      19.2   1.73s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.58s  Non-interacting
   1        0       1        1.03     15.1   2.30s  
   2        0       2        0.53     14.5   1.29s  
   3        0       3       -0.01     14.1   1.23s  
   4        0       4       -0.87     13.7   1.28s  
   5        0       5       -1.74     11.8   1.17s  
   6        0       6       -2.43     10.0   1.02s  
   7        0       7       -3.33      8.9   939ms  
   8        0       8       -4.02      7.9   870ms  
   9        0       9       -5.04      6.4   743ms  
  10        0      10       -6.06      3.9   556ms  
  11        0      11       -7.08      2.3   438ms  
  12        0      12       -8.27      1.0   340ms  
  13        1       1       -7.53     17.8   1.83s  Restart
  14        1       2       -7.89      3.1   442ms  
  15        1       3       -8.68      2.1   363ms  
                                      19.2   1.70s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.55s  Non-interacting
   1        0       1        1.03     15.1   1.46s  
   2        0       2        0.53     14.5   1.33s  
   3        0       3       -0.01     14.1   1.33s  
   4        0       4       -0.87     13.7   1.32s  
   5        0       5       -1.74     11.8   1.17s  
   6        0       6       -2.43     10.0   976ms  
   7        0       7       -3.33      8.9   937ms  
   8        0       8       -4.02      7.9   864ms  
   9        0       9       -5.04      6.5   717ms  
  10        0      10       -6.06      3.9   546ms  
  11        0      11       -7.08      2.3   442ms  
  12        0      12       -8.28      1.0   333ms  
  13        1       1       -7.54     17.8   1.86s  Restart
  14        1       2       -7.89      3.1   422ms  
  15        1       3       -8.67      2.0   377ms  
                                      19.2   1.73s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.36s  Non-interacting
   1        0       1        1.03     15.1   1.43s  
   2        0       2        0.53     14.5   1.30s  
   3        0       3       -0.01     14.1   1.32s  
   4        0       4       -0.87     13.8   1.30s  
   5        0       5       -1.74     11.8   1.16s  
   6        0       6       -2.43     10.0   1.02s  
   7        0       7       -3.33      8.9   921ms  
   8        0       8       -4.02      7.8   849ms  
   9        0       9       -5.04      6.4   729ms  
  10        0      10       -6.06      3.9   548ms  
  11        0      11       -7.08      2.3   437ms  
  12        0      12       -8.27      1.0   347ms  
  13        1       1       -7.54     17.8   1.85s  Restart
  14        1       2       -7.90      3.1   444ms  
  15        1       3       -8.69      2.1   376ms  
                                      19.2   1.70s  Final orbitals
147.165364 seconds (143.91 M allocations: 31.725 GiB, 3.44% gc time, 23.10% 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