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.916338637934                   -0.69    4.2    516ms
  2   -7.921174228864       -2.32       -1.52    1.0    233ms
  3   -7.921409502879       -3.63       -2.48    1.5    228ms
  4   -7.921440882380       -4.50       -2.85    2.2    304ms
  5   -7.921441789981       -6.04       -3.20    1.1    216ms
  6   -7.921442006907       -6.66       -4.39    1.1    226ms
  7   -7.921442021992       -7.82       -4.90    2.4    417ms
  8   -7.921442022127       -9.87       -5.17    1.6    769ms
  9   -7.921442022143      -10.81       -5.98    1.1    219ms
 10   -7.921442022144      -11.83       -6.37    2.0    289ms
 11   -7.921442022144      -12.89       -7.02    1.1    219ms
 12   -7.921442022144      -13.82       -7.67    2.0    305ms
 13   -7.921442022144   +  -15.05       -8.20    1.9    286ms

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.32s  Non-interacting
   1        0       1        1.03     15.1   8.24s  
   2        0       2        0.53     14.5   927ms  
   3        0       3       -0.01     14.1   840ms  
   4        0       4       -0.87     13.8   842ms  
   5        0       5       -1.74     11.8   765ms  
   6        0       6       -2.43     10.0   649ms  
   7        0       7       -3.33      8.9   639ms  
   8        0       8       -4.02      7.8   558ms  
   9        0       9       -5.04      6.5   492ms  
  10        0      10       -6.06      3.9   355ms  
  11        0      11       -7.08      2.3   290ms  
  12        0      12       -8.28      1.0   238ms  
  13        1       1       -7.53     17.9   1.39s  Restart
  14        1       2       -7.87      3.1   315ms  
  15        1       3       -8.68      2.1   277ms  
                                      19.2   1.52s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.06s  Non-interacting
   1        0       1        1.03     15.1   951ms  
   2        0       2        0.53     14.5   1.49s  
   3        0       3       -0.01     14.1   876ms  
   4        0       4       -0.87     13.7   837ms  
   5        0       5       -1.74     11.8   750ms  
   6        0       6       -2.43     10.0   673ms  
   7        0       7       -3.33      8.9   613ms  
   8        0       8       -4.02      7.8   584ms  
   9        0       9       -5.04      6.4   503ms  
  10        0      10       -6.06      3.9   357ms  
  11        0      11       -7.08      2.3   306ms  
  12        0      12       -8.28      1.0   243ms  
  13        1       1       -7.54     17.9   1.22s  Restart
  14        1       2       -7.90      3.1   291ms  
  15        1       3       -8.70      2.1   289ms  
                                      19.2   1.22s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.05s  Non-interacting
   1        0       1        1.03     15.1   1.03s  
   2        0       2        0.53     14.5   918ms  
   3        0       3       -0.01     14.1   928ms  
   4        0       4       -0.87     13.7   882ms  
   5        0       5       -1.74     11.8   806ms  
   6        0       6       -2.43     10.0   691ms  
   7        0       7       -3.33      8.9   703ms  
   8        0       8       -4.02      7.8   622ms  
   9        0       9       -5.04      6.4   560ms  
  10        0      10       -6.06      3.9   432ms  
  11        0      11       -7.08      2.2   342ms  
  12        0      12       -8.27      1.0   261ms  
  13        1       1       -7.53     17.9   1.33s  Restart
  14        1       2       -7.88      3.1   317ms  
  15        1       3       -8.66      2.1   269ms  
                                      19.2   1.80s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.05s  Non-interacting
   1        0       1        1.03     15.1   968ms  
   2        0       2        0.53     14.5   944ms  
   3        0       3       -0.01     14.1   918ms  
   4        0       4       -0.87     13.8   865ms  
   5        0       5       -1.74     11.8   780ms  
   6        0       6       -2.43     10.0   690ms  
   7        0       7       -3.33      8.9   629ms  
   8        0       8       -4.02      7.8   569ms  
   9        0       9       -5.04      6.4   515ms  
  10        0      10       -6.06      3.9   366ms  
  11        0      11       -7.08      2.3   319ms  
  12        0      12       -8.28      1.0   265ms  
  13        1       1       -7.53     17.9   1.25s  Restart
  14        1       2       -7.86      3.1   306ms  
  15        1       3       -8.67      2.2   266ms  
                                      19.2   1.15s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.08s  Non-interacting
   1        0       1        1.03     15.1   1.01s  
   2        0       2        0.53     14.5   926ms  
   3        0       3       -0.01     14.1   897ms  
   4        0       4       -0.87     13.7   894ms  
   5        0       5       -1.74     11.8   817ms  
   6        0       6       -2.43     10.0   709ms  
   7        0       7       -3.33      8.9   683ms  
   8        0       8       -4.02      7.8   606ms  
   9        0       9       -5.04      6.5   511ms  
  10        0      10       -6.06      3.9   413ms  
  11        0      11       -7.08      2.3   331ms  
  12        0      12       -8.28      1.0   243ms  
  13        1       1       -7.54     17.9   1.29s  Restart
  14        1       2       -7.88      3.1   414ms  
  15        1       3       -8.65      2.1   816ms  
                                      19.2   1.11s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.05s  Non-interacting
   1        0       1        1.03     15.1   991ms  
   2        0       2        0.53     14.5   942ms  
   3        0       3       -0.01     14.1   916ms  
   4        0       4       -0.87     13.7   924ms  
   5        0       5       -1.74     11.8   790ms  
   6        0       6       -2.43     10.0   695ms  
   7        0       7       -3.33      8.9   623ms  
   8        0       8       -4.02      7.8   582ms  
   9        0       9       -5.04      6.4   506ms  
  10        0      10       -6.06      3.9   356ms  
  11        0      11       -7.08      2.2   313ms  
  12        0      12       -8.27      1.0   241ms  
  13        1       1       -7.52     17.9   1.26s  Restart
  14        1       2       -7.87      3.2   299ms  
  15        1       3       -8.66      2.1   282ms  
                                      19.2   1.13s  Final orbitals
101.735449 seconds (73.37 M allocations: 29.676 GiB, 4.52% gc time, 22.69% 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