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.916333425392                   -0.69    4.1    677ms
  2   -7.921174115538       -2.32       -1.52    1.0    277ms
  3   -7.921407562137       -3.63       -2.48    1.4    344ms
  4   -7.921440871636       -4.48       -2.84    2.3    449ms
  5   -7.921441762972       -6.05       -3.16    1.0    288ms
  6   -7.921442006983       -6.61       -4.49    1.0    299ms
  7   -7.921442022056       -7.82       -4.96    2.6    480ms
  8   -7.921442022135      -10.10       -5.25    1.7    354ms
  9   -7.921442022142      -11.15       -5.75    1.0    296ms
 10   -7.921442022144      -11.77       -6.28    1.2    326ms
 11   -7.921442022144      -12.70       -7.17    1.8    379ms
 12   -7.921442022144      -14.15       -7.36    2.0    442ms
 13   -7.921442022144      -14.57       -8.12    1.0    305ms

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   2.02s  Non-interacting
   1        0       1        1.03     15.1   13.8s  
   2        0       2        0.53     14.5   1.22s  
   3        0       3       -0.01     14.1   1.17s  
   4        0       4       -0.87     13.7   1.22s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   972ms  
   7        0       7       -3.33      8.8   895ms  
   8        0       8       -4.02      7.9   823ms  
   9        0       9       -5.04      6.4   703ms  
  10        0      10       -6.06      3.9   526ms  
  11        0      11       -7.08      2.3   409ms  
  12        0      12       -8.27      1.0   320ms  
  13        1       1       -7.53     17.8   2.00s  Restart
  14        1       2       -7.88      3.1   430ms  
  15        1       3       -8.69      2.1   378ms  
                                      19.2   2.19s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.49s  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.29s  
   4        0       4       -0.87     13.8   1.23s  
   5        0       5       -1.74     11.8   1.10s  
   6        0       6       -2.43      9.9   959ms  
   7        0       7       -3.33      8.9   884ms  
   8        0       8       -4.02      7.8   816ms  
   9        0       9       -5.04      6.4   693ms  
  10        0      10       -6.06      3.9   509ms  
  11        0      11       -7.08      2.3   412ms  
  12        0      12       -8.27      1.0   324ms  
  13        1       1       -7.53     17.9   1.76s  Restart
  14        1       2       -7.88      3.1   421ms  
  15        1       3       -8.66      2.1   357ms  
                                      19.2   2.57s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.39s  Non-interacting
   1        0       1        1.03     15.1   1.35s  
   2        0       2        0.53     14.5   1.25s  
   3        0       3       -0.01     14.1   1.22s  
   4        0       4       -0.87     13.8   1.23s  
   5        0       5       -1.74     11.8   1.10s  
   6        0       6       -2.43     10.0   966ms  
   7        0       7       -3.33      8.9   870ms  
   8        0       8       -4.02      7.8   816ms  
   9        0       9       -5.04      6.4   695ms  
  10        0      10       -6.06      3.9   501ms  
  11        0      11       -7.08      2.3   414ms  
  12        0      12       -8.27      1.0   316ms  
  13        1       1       -7.53     18.0   1.78s  Restart
  14        1       2       -7.86      3.1   407ms  
  15        1       3       -8.65      2.1   352ms  
                                      19.2   1.62s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.48s  Non-interacting
   1        0       1        1.03     15.1   1.43s  
   2        0       2        0.53     14.5   1.34s  
   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   977ms  
   7        0       7       -3.33      8.8   890ms  
   8        0       8       -4.02      7.9   827ms  
   9        0       9       -5.04      6.4   714ms  
  10        0      10       -6.06      3.9   521ms  
  11        0      11       -7.08      2.2   412ms  
  12        0      12       -8.27      1.0   329ms  
  13        1       1       -7.52     17.8   1.80s  Restart
  14        1       2       -7.87      3.1   414ms  
  15        1       3       -8.67      2.1   456ms  
                                      19.2   2.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.41s  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.1   1.23s  
   4        0       4       -0.87     13.8   1.24s  
   5        0       5       -1.74     11.8   1.07s  
   6        0       6       -2.43     10.0   952ms  
   7        0       7       -3.33      8.9   878ms  
   8        0       8       -4.02      7.8   812ms  
   9        0       9       -5.04      6.4   697ms  
  10        0      10       -6.06      3.9   509ms  
  11        0      11       -7.08      2.3   412ms  
  12        0      12       -8.27      1.0   322ms  
  13        1       1       -7.53     17.9   1.74s  Restart
  14        1       2       -7.88      3.1   407ms  
  15        1       3       -8.66      2.1   353ms  
                                      19.2   1.61s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.49s  Non-interacting
   1        0       1        1.03     15.1   1.41s  
   2        0       2        0.53     14.5   1.27s  
   3        0       3       -0.01     14.1   1.26s  
   4        0       4       -0.87     13.8   1.24s  
   5        0       5       -1.74     11.8   1.10s  
   6        0       6       -2.43     10.0   961ms  
   7        0       7       -3.33      8.9   873ms  
   8        0       8       -4.02      7.8   816ms  
   9        0       9       -5.04      6.4   701ms  
  10        0      10       -6.06      3.9   516ms  
  11        0      11       -7.08      2.2   409ms  
  12        0      12       -8.27      1.0   321ms  
  13        1       1       -7.53     17.9   2.68s  Restart
  14        1       2       -7.86      3.1   382ms  
  15        1       3       -8.65      2.1   335ms  
                                      19.2   1.52s  Final orbitals
142.878890 seconds (102.28 M allocations: 30.824 GiB, 4.77% gc time, 24.54% 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