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.916314154966                   -0.69    4.2    652ms
  2   -7.921169745969       -2.31       -1.52    1.0    267ms
  3   -7.921406806913       -3.63       -2.48    1.4    317ms
  4   -7.921440851197       -4.47       -2.84    2.3    406ms
  5   -7.921441745710       -6.05       -3.13    1.1    278ms
  6   -7.921442008305       -6.58       -4.53    1.0    273ms
  7   -7.921442022076       -7.86       -5.09    2.6    457ms
  8   -7.921442022140      -10.20       -5.44    1.9    349ms
  9   -7.921442022143      -11.46       -5.96    1.0    276ms
 10   -7.921442022144      -12.10       -6.11    1.4    394ms
 11   -7.921442022144      -12.69       -7.27    1.0    262ms
 12   -7.921442022144      -13.82       -7.37    2.3    1.24s
 13   -7.921442022144      -15.05       -8.08    1.0    278ms

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.93s  Non-interacting
   1        0       1        1.03     15.1   13.5s  
   2        0       2        0.53     14.5   1.32s  
   3        0       3       -0.01     14.1   1.29s  
   4        0       4       -0.87     13.7   1.28s  
   5        0       5       -1.74     11.8   1.13s  
   6        0       6       -2.43     10.0   998ms  
   7        0       7       -3.33      8.9   907ms  
   8        0       8       -4.02      7.8   840ms  
   9        0       9       -5.04      6.4   721ms  
  10        0      10       -6.06      3.9   534ms  
  11        0      11       -7.08      2.3   435ms  
  12        0      12       -8.27      1.0   333ms  
  13        1       1       -7.53     17.8   2.00s  Restart
  14        1       2       -7.90      3.1   441ms  
  15        1       3       -8.71      2.1   380ms  
                                      19.2   2.27s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.52s  Non-interacting
   1        0       1        1.03     15.2   1.43s  
   2        0       2        0.53     14.6   1.31s  
   3        0       3       -0.01     14.1   1.28s  
   4        0       4       -0.87     13.8   1.27s  
   5        0       5       -1.74     11.8   1.12s  
   6        0       6       -2.43     10.0   973ms  
   7        0       7       -3.33      8.9   903ms  
   8        0       8       -4.02      7.8   830ms  
   9        0       9       -5.04      6.4   806ms  
  10        0      10       -6.06      3.9   1.39s  
  11        0      11       -7.08      2.2   427ms  
  12        0      12       -8.27      1.0   346ms  
  13        1       1       -7.53     17.8   1.63s  Restart
  14        1       2       -7.89      3.1   419ms  
  15        1       3       -8.69      2.1   328ms  
                                      19.2   1.64s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.48s  Non-interacting
   1        0       1        1.03     15.2   1.44s  
   2        0       2        0.53     14.6   1.32s  
   3        0       3       -0.01     14.1   1.29s  
   4        0       4       -0.87     13.8   1.27s  
   5        0       5       -1.74     11.8   1.13s  
   6        0       6       -2.43     10.0   990ms  
   7        0       7       -3.33      8.9   895ms  
   8        0       8       -4.02      7.8   841ms  
   9        0       9       -5.04      6.5   719ms  
  10        0      10       -6.06      3.9   530ms  
  11        0      11       -7.08      2.2   421ms  
  12        0      12       -8.27      1.0   335ms  
  13        1       1       -7.52     17.8   1.81s  Restart
  14        1       2       -7.88      3.1   430ms  
  15        1       3       -8.67      2.1   372ms  
                                      19.2   1.67s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.53s  Non-interacting
   1        0       1        1.03     15.1   1.43s  
   2        0       2        0.53     14.5   1.32s  
   3        0       3       -0.01     14.1   1.28s  
   4        0       4       -0.87     13.7   1.26s  
   5        0       5       -1.74     11.8   1.13s  
   6        0       6       -2.43     10.0   984ms  
   7        0       7       -3.33      8.9   909ms  
   8        0       8       -4.02      7.8   831ms  
   9        0       9       -5.04      6.4   716ms  
  10        0      10       -6.06      3.9   533ms  
  11        0      11       -7.08      2.3   425ms  
  12        0      12       -8.27      1.0   422ms  
  13        1       1       -7.53     17.8   2.60s  Restart
  14        1       2       -7.90      3.1   388ms  
  15        1       3       -8.71      2.1   318ms  
                                      19.2   1.65s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.50s  Non-interacting
   1        0       1        1.03     15.2   1.42s  
   2        0       2        0.53     14.6   1.31s  
   3        0       3       -0.01     14.1   1.28s  
   4        0       4       -0.87     13.8   1.27s  
   5        0       5       -1.74     11.8   1.13s  
   6        0       6       -2.43     10.0   986ms  
   7        0       7       -3.33      8.9   903ms  
   8        0       8       -4.02      7.8   838ms  
   9        0       9       -5.04      6.4   723ms  
  10        0      10       -6.06      3.9   522ms  
  11        0      11       -7.08      2.2   421ms  
  12        0      12       -8.27      1.0   331ms  
  13        1       1       -7.53     17.8   1.82s  Restart
  14        1       2       -7.90      3.1   428ms  
  15        1       3       -8.70      2.0   362ms  
                                      19.2   1.68s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.52s  Non-interacting
   1        0       1        1.03     15.2   1.43s  
   2        0       2        0.53     14.6   1.30s  
   3        0       3       -0.01     14.1   1.28s  
   4        0       4       -0.87     13.8   1.27s  
   5        0       5       -1.74     11.8   1.13s  
   6        0       6       -2.43     10.0   990ms  
   7        0       7       -3.33      8.9   906ms  
   8        0       8       -4.02      7.8   834ms  
   9        0       9       -5.04      6.5   717ms  
  10        0      10       -6.06      3.9   524ms  
  11        0      11       -7.08      2.2   430ms  
  12        0      12       -8.27      1.0   337ms  
  13        1       1       -7.53     17.8   2.68s  Restart
  14        1       2       -7.89      3.1   418ms  
  15        1       3       -8.67      2.1   331ms  
                                      19.2   1.52s  Final orbitals
146.156329 seconds (96.42 M allocations: 30.481 GiB, 3.76% gc time, 25.42% 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