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.916289693288                   -0.69    4.0    579ms
  2   -7.921172412434       -2.31       -1.52    1.0    279ms
  3   -7.921409805171       -3.62       -2.47    1.4    269ms
  4   -7.921440948662       -4.51       -2.86    2.2    404ms
  5   -7.921441803855       -6.07       -3.23    1.0    234ms
  6   -7.921442008113       -6.69       -4.45    1.1    274ms
  7   -7.921442022033       -7.86       -4.95    2.5    397ms
  8   -7.921442022130      -10.01       -5.22    1.4    274ms
  9   -7.921442022143      -10.89       -5.95    1.1    239ms
 10   -7.921442022144      -11.88       -6.34    1.8    417ms
 11   -7.921442022144      -12.92       -6.95    1.1    1.15s
 12   -7.921442022144      -13.80       -7.75    2.0    314ms
 13   -7.921442022144      -15.05       -8.31    2.0    364ms

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.90s  Non-interacting
   1        0       1        1.03     15.1   13.7s  
   2        0       2        0.53     14.5   1.08s  
   3        0       3       -0.01     14.1   979ms  
   4        0       4       -0.87     13.8   977ms  
   5        0       5       -1.74     11.8   876ms  
   6        0       6       -2.43     10.0   762ms  
   7        0       7       -3.33      8.9   705ms  
   8        0       8       -4.02      7.8   647ms  
   9        0       9       -5.04      6.4   553ms  
  10        0      10       -6.06      3.9   421ms  
  11        0      11       -7.08      2.3   334ms  
  12        0      12       -8.28      1.0   259ms  
  13        1       1       -7.54     17.9   1.55s  Restart
  14        1       2       -7.87      3.2   353ms  
  15        1       3       -8.67      2.1   310ms  
                                      19.2   1.95s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.25s  Non-interacting
   1        0       1        1.03     15.1   1.18s  
   2        0       2        0.53     14.5   1.07s  
   3        0       3       -0.01     14.0   1.05s  
   4        0       4       -0.87     13.7   1.03s  
   5        0       5       -1.74     11.8   917ms  
   6        0       6       -2.43     10.0   807ms  
   7        0       7       -3.33      8.9   773ms  
   8        0       8       -4.02      7.8   677ms  
   9        0       9       -5.04      6.4   595ms  
  10        0      10       -6.06      3.9   426ms  
  11        0      11       -7.08      2.3   352ms  
  12        0      12       -8.27      1.0   283ms  
  13        1       1       -7.54     17.9   1.48s  Restart
  14        1       2       -7.86      3.2   359ms  
  15        1       3       -8.65      2.1   312ms  
                                      19.2   2.41s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.18s  Non-interacting
   1        0       1        1.03     15.1   1.11s  
   2        0       2        0.53     14.5   988ms  
   3        0       3       -0.01     14.1   969ms  
   4        0       4       -0.87     13.7   956ms  
   5        0       5       -1.74     11.8   870ms  
   6        0       6       -2.43     10.0   757ms  
   7        0       7       -3.33      8.9   700ms  
   8        0       8       -4.02      7.8   646ms  
   9        0       9       -5.04      6.4   558ms  
  10        0      10       -6.06      3.9   417ms  
  11        0      11       -7.08      2.3   326ms  
  12        0      12       -8.27      1.0   250ms  
  13        1       1       -7.55     17.9   1.41s  Restart
  14        1       2       -7.87      3.2   341ms  
  15        1       3       -8.67      2.1   288ms  
                                      19.2   1.30s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.21s  Non-interacting
   1        0       1        1.03     15.1   1.17s  
   2        0       2        0.53     14.5   1.07s  
   3        0       3       -0.01     14.1   1.02s  
   4        0       4       -0.87     13.8   1.01s  
   5        0       5       -1.74     11.8   918ms  
   6        0       6       -2.43     10.0   799ms  
   7        0       7       -3.33      8.9   727ms  
   8        0       8       -4.02      7.8   658ms  
   9        0       9       -5.04      6.4   560ms  
  10        0      10       -6.06      3.9   447ms  
  11        0      11       -7.08      2.3   341ms  
  12        0      12       -8.28      1.0   273ms  
  13        1       1       -7.55     17.8   1.44s  Restart
  14        1       2       -7.88      3.2   347ms  
  15        1       3       -8.68      2.1   312ms  
                                      19.2   1.34s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.18s  Non-interacting
   1        0       1        1.03     15.1   1.13s  
   2        0       2        0.53     14.5   997ms  
   3        0       3       -0.01     14.0   996ms  
   4        0       4       -0.87     13.7   1.00s  
   5        0       5       -1.74     11.8   874ms  
   6        0       6       -2.43     10.0   753ms  
   7        0       7       -3.33      8.9   830ms  
   8        0       8       -4.02      7.8   1.61s  
   9        0       9       -5.04      6.4   533ms  
  10        0      10       -6.06      3.9   413ms  
  11        0      11       -7.08      2.3   334ms  
  12        0      12       -8.27      1.0   264ms  
  13        1       1       -7.53     17.9   1.47s  Restart
  14        1       2       -7.87      3.2   337ms  
  15        1       3       -8.67      2.1   319ms  
                                      19.2   1.34s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.18s  Non-interacting
   1        0       1        1.03     15.1   1.12s  
   2        0       2        0.53     14.5   1.02s  
   3        0       3       -0.01     14.1   1.00s  
   4        0       4       -0.87     13.7   994ms  
   5        0       5       -1.74     11.8   875ms  
   6        0       6       -2.43     10.0   767ms  
   7        0       7       -3.33      8.9   704ms  
   8        0       8       -4.02      7.8   652ms  
   9        0       9       -5.04      6.4   563ms  
  10        0      10       -6.06      3.9   413ms  
  11        0      11       -7.08      2.3   334ms  
  12        0      12       -8.27      1.0   263ms  
  13        1       1       -7.55     17.9   1.41s  Restart
  14        1       2       -7.87      3.2   331ms  
  15        1       3       -8.68      2.1   293ms  
                                      19.2   1.29s  Final orbitals
126.679266 seconds (62.80 M allocations: 33.008 GiB, 4.40% gc time, 31.50% 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