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.916284257731                   -0.69    4.0    318ms
  2   -7.921172234654       -2.31       -1.52    1.0    159ms
  3   -7.921410280505       -3.62       -2.47    1.5    152ms
  4   -7.921440920553       -4.51       -2.86    2.2    198ms
  5   -7.921441804369       -6.05       -3.23    1.0    135ms
  6   -7.921442007853       -6.69       -4.43    1.1    149ms
  7   -7.921442022003       -7.85       -4.90    2.5    228ms
  8   -7.921442022125       -9.92       -5.16    1.4    155ms
  9   -7.921442022142      -10.75       -5.87    1.1    142ms
 10   -7.921442022144      -11.78       -6.30    1.8    246ms
 11   -7.921442022144      -12.83       -7.03    1.1    658ms
 12   -7.921442022144      -13.91       -7.74    2.0    180ms
 13   -7.921442022144      -14.45       -8.41    1.9    185ms

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.07s  Non-interacting
   1        0       1        1.03     15.1   7.41s  
   2        0       2        0.53     14.5   627ms  
   3        0       3       -0.01     14.1   564ms  
   4        0       4       -0.87     13.7   562ms  
   5        0       5       -1.74     11.8   512ms  
   6        0       6       -2.43     10.0   455ms  
   7        0       7       -3.33      8.9   405ms  
   8        0       8       -4.02      7.8   366ms  
   9        0       9       -5.04      6.4   320ms  
  10        0      10       -6.06      3.9   239ms  
  11        0      11       -7.08      2.3   188ms  
  12        0      12       -8.27      1.0   148ms  
  13        1       1       -7.55     17.8   918ms  Restart
  14        1       2       -7.89      3.2   214ms  
  15        1       3       -8.68      2.1   163ms  
                                      19.2   1.14s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   681ms  Non-interacting
   1        0       1        1.03     15.1   645ms  
   2        0       2        0.53     14.5   593ms  
   3        0       3       -0.01     14.1   590ms  
   4        0       4       -0.87     13.8   583ms  
   5        0       5       -1.74     11.8   504ms  
   6        0       6       -2.43     10.0   436ms  
   7        0       7       -3.33      8.9   464ms  
   8        0       8       -4.02      7.8   918ms  
   9        0       9       -5.04      6.4   308ms  
  10        0      10       -6.06      3.9   226ms  
  11        0      11       -7.08      2.3   177ms  
  12        0      12       -8.27      1.0   138ms  
  13        1       1       -7.54     17.9   773ms  Restart
  14        1       2       -7.90      3.2   181ms  
  15        1       3       -8.68      2.1   158ms  
                                      19.2   734ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   678ms  Non-interacting
   1        0       1        1.03     15.1   649ms  
   2        0       2        0.53     14.5   583ms  
   3        0       3       -0.01     14.1   616ms  
   4        0       4       -0.87     13.8   554ms  
   5        0       5       -1.74     11.8   496ms  
   6        0       6       -2.43     10.0   432ms  
   7        0       7       -3.33      8.9   391ms  
   8        0       8       -4.02      7.9   381ms  
   9        0       9       -5.04      6.4   322ms  
  10        0      10       -6.06      3.9   230ms  
  11        0      11       -7.08      2.3   189ms  
  12        0      12       -8.27      1.0   148ms  
  13        1       1       -7.54     17.9   793ms  Restart
  14        1       2       -7.88      3.2   193ms  
  15        1       3       -8.66      2.1   164ms  
                                      19.2   730ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   673ms  Non-interacting
   1        0       1        1.03     15.1   637ms  
   2        0       2        0.53     14.5   581ms  
   3        0       3       -0.01     14.1   580ms  
   4        0       4       -0.87     13.7   554ms  
   5        0       5       -1.74     11.8   495ms  
   6        0       6       -2.43     10.0   433ms  
   7        0       7       -3.33      8.9   400ms  
   8        0       8       -4.02      7.8   363ms  
   9        0       9       -5.04      6.4   315ms  
  10        0      10       -6.06      3.9   232ms  
  11        0      11       -7.08      2.3   796ms  
  12        0      12       -8.27      1.0   143ms  
  13        1       1       -7.54     17.9   809ms  Restart
  14        1       2       -7.87      3.2   182ms  
  15        1       3       -8.67      2.1   161ms  
                                      19.2   739ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   657ms  Non-interacting
   1        0       1        1.03     15.1   626ms  
   2        0       2        0.53     14.5   574ms  
   3        0       3       -0.01     14.1   571ms  
   4        0       4       -0.87     13.8   568ms  
   5        0       5       -1.74     11.8   508ms  
   6        0       6       -2.43     10.0   447ms  
   7        0       7       -3.33      8.9   409ms  
   8        0       8       -4.02      7.8   375ms  
   9        0       9       -5.04      6.4   321ms  
  10        0      10       -6.06      3.9   235ms  
  11        0      11       -7.08      2.3   194ms  
  12        0      12       -8.27      1.0   153ms  
  13        1       1       -7.54     17.8   796ms  Restart
  14        1       2       -7.90      3.2   204ms  
  15        1       3       -8.68      2.1   172ms  
                                      19.2   774ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   714ms  Non-interacting
   1        0       1        1.03     15.1   672ms  
   2        0       2        0.53     14.5   613ms  
   3        0       3       -0.01     14.1   605ms  
   4        0       4       -0.87     13.8   588ms  
   5        0       5       -1.74     11.8   528ms  
   6        0       6       -2.43     10.0   454ms  
   7        0       7       -3.33      8.9   426ms  
   8        0       8       -4.02      7.9   389ms  
   9        0       9       -5.04      6.4   331ms  
  10        0      10       -6.06      3.9   245ms  
  11        0      11       -7.08      2.3   194ms  
  12        0      12       -8.27      1.0   156ms  
  13        1       1       -7.53     17.8   906ms  Restart
  14        1       2       -7.88      3.2   754ms  
  15        1       3       -8.66      2.1   167ms  
                                      19.2   754ms  Final orbitals
 73.280298 seconds (63.60 M allocations: 33.058 GiB, 5.65% gc time, 31.66% 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