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.916323813826                   -0.69    4.2    687ms
  2   -7.921169768509       -2.31       -1.52    1.0    295ms
  3   -7.921408352159       -3.62       -2.48    1.4    341ms
  4   -7.921440905648       -4.49       -2.85    2.3    463ms
  5   -7.921441779284       -6.06       -3.17    1.1    316ms
  6   -7.921442007907       -6.64       -4.53    1.0    310ms
  7   -7.921442022077       -7.85       -5.10    2.7    592ms
  8   -7.921442022137      -10.22       -5.34    1.9    1.14s
  9   -7.921442022143      -11.23       -5.98    1.1    299ms
 10   -7.921442022144      -12.08       -6.05    1.5    332ms
 11   -7.921442022144      -12.57       -7.09    1.0    299ms
 12   -7.921442022144      -13.75       -7.32    2.1    451ms
 13   -7.921442022144   +  -15.05       -8.31    1.0    289ms

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.98s  Non-interacting
   1        0       1        1.03     15.1   12.8s  
   2        0       2        0.53     14.5   1.33s  
   3        0       3       -0.01     14.1   1.25s  
   4        0       4       -0.87     13.7   1.25s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   974ms  
   7        0       7       -3.33      8.9   885ms  
   8        0       8       -4.02      7.8   823ms  
   9        0       9       -5.04      6.4   698ms  
  10        0      10       -6.06      3.9   513ms  
  11        0      11       -7.08      2.3   419ms  
  12        0      12       -8.27      1.0   325ms  
  13        1       1       -7.53     17.8   1.95s  Restart
  14        1       2       -7.87      3.1   430ms  
  15        1       3       -8.67      2.1   351ms  
                                      19.2   2.23s  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.41s  
   2        0       2        0.53     14.5   1.28s  
   3        0       3       -0.01     14.1   1.27s  
   4        0       4       -0.87     13.8   1.24s  
   5        0       5       -1.74     11.8   1.97s  
   6        0       6       -2.43     10.0   940ms  
   7        0       7       -3.33      8.9   822ms  
   8        0       8       -4.02      7.8   770ms  
   9        0       9       -5.04      6.4   674ms  
  10        0      10       -6.06      3.9   500ms  
  11        0      11       -7.08      2.3   390ms  
  12        0      12       -8.28      1.0   322ms  
  13        1       1       -7.53     17.8   1.76s  Restart
  14        1       2       -7.88      3.1   414ms  
  15        1       3       -8.67      2.1   365ms  
                                      19.2   1.63s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.51s  Non-interacting
   1        0       1        1.03     15.1   1.42s  
   2        0       2        0.53     14.5   1.29s  
   3        0       3       -0.01     14.1   1.26s  
   4        0       4       -0.87     13.7   1.24s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   967ms  
   7        0       7       -3.33      8.9   880ms  
   8        0       8       -4.02      7.8   824ms  
   9        0       9       -5.04      6.4   706ms  
  10        0      10       -6.06      3.9   517ms  
  11        0      11       -7.08      2.3   415ms  
  12        0      12       -8.27      1.0   336ms  
  13        1       1       -7.53     17.9   1.77s  Restart
  14        1       2       -7.88      3.1   420ms  
  15        1       3       -8.65      2.1   360ms  
                                      19.2   1.64s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.50s  Non-interacting
   1        0       1        1.03     15.1   1.41s  
   2        0       2        0.53     14.5   1.29s  
   3        0       3       -0.01     14.1   2.11s  
   4        0       4       -0.87     13.7   1.18s  
   5        0       5       -1.74     11.8   1.05s  
   6        0       6       -2.43      9.9   938ms  
   7        0       7       -3.33      8.9   859ms  
   8        0       8       -4.02      7.8   799ms  
   9        0       9       -5.04      6.4   692ms  
  10        0      10       -6.06      3.9   510ms  
  11        0      11       -7.08      2.3   419ms  
  12        0      12       -8.28      1.0   324ms  
  13        1       1       -7.54     17.8   1.70s  Restart
  14        1       2       -7.88      3.1   393ms  
  15        1       3       -8.68      2.1   350ms  
                                      19.2   1.54s  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.34s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.1   1.20s  
   4        0       4       -0.87     13.8   1.19s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43     10.0   915ms  
   7        0       7       -3.33      8.9   840ms  
   8        0       8       -4.02      7.8   774ms  
   9        0       9       -5.04      6.4   669ms  
  10        0      10       -6.06      3.9   495ms  
  11        0      11       -7.08      2.3   398ms  
  12        0      12       -8.28      1.0   311ms  
  13        1       1       -7.54     17.9   1.69s  Restart
  14        1       2       -7.88      3.1   396ms  
  15        1       3       -8.67      2.1   346ms  
                                      19.2   1.55s  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.34s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.1   1.24s  
   4        0       4       -0.87     13.7   1.22s  
   5        0       5       -1.74     11.8   1.09s  
   6        0       6       -2.43     10.0   949ms  
   7        0       7       -3.33      8.9   877ms  
   8        0       8       -4.02      7.8   814ms  
   9        0       9       -5.04      6.4   713ms  
  10        0      10       -6.06      3.9   508ms  
  11        0      11       -7.08      2.3   405ms  
  12        0      12       -8.27      1.0   330ms  
  13        1       1       -7.53     17.9   1.78s  Restart
  14        1       2       -7.88      3.1   410ms  
  15        1       3       -8.65      2.1   363ms  
                                      19.2   1.65s  Final orbitals
140.279987 seconds (101.35 M allocations: 30.775 GiB, 3.65% gc time, 24.52% 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