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.916286992758                   -0.69    4.0    635ms
  2   -7.921172622944       -2.31       -1.52    1.0    302ms
  3   -7.921410105929       -3.62       -2.47    1.4    326ms
  4   -7.921440909312       -4.51       -2.86    2.2    423ms
  5   -7.921441803125       -6.05       -3.22    1.1    304ms
  6   -7.921442008345       -6.69       -4.45    1.1    300ms
  7   -7.921442022021       -7.86       -4.93    2.5    469ms
  8   -7.921442022127       -9.97       -5.18    1.4    398ms
  9   -7.921442022142      -10.82       -5.88    1.1    830ms
 10   -7.921442022144      -11.81       -6.32    1.8    361ms
 11   -7.921442022144      -12.86       -6.91    1.1    302ms
 12   -7.921442022144      -13.67       -7.62    1.9    356ms
 13   -7.921442022144   +  -14.75       -8.33    2.0    451ms

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   11.7s  
   2        0       2        0.53     14.4   1.24s  
   3        0       3       -0.01     14.1   1.20s  
   4        0       4       -0.87     13.7   1.18s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   932ms  
   7        0       7       -3.33      8.9   858ms  
   8        0       8       -4.02      7.8   771ms  
   9        0       9       -5.04      6.4   667ms  
  10        0      10       -6.06      3.9   506ms  
  11        0      11       -7.08      2.3   405ms  
  12        0      12       -8.27      1.0   327ms  
  13        1       1       -7.55     17.9   1.84s  Restart
  14        1       2       -7.86      3.2   431ms  
  15        1       3       -8.67      2.1   374ms  
                                      19.2   2.19s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.47s  Non-interacting
   1        0       1        1.03     15.1   1.38s  
   2        0       2        0.53     14.5   1.21s  
   3        0       3       -0.01     14.1   1.23s  
   4        0       4       -0.87     13.8   1.87s  
   5        0       5       -1.74     11.8   1.04s  
   6        0       6       -2.43     10.0   907ms  
   7        0       7       -3.33      8.9   854ms  
   8        0       8       -4.02      7.9   768ms  
   9        0       9       -5.04      6.4   620ms  
  10        0      10       -6.06      3.9   488ms  
  11        0      11       -7.08      2.2   399ms  
  12        0      12       -8.27      1.0   314ms  
  13        1       1       -7.54     18.0   1.68s  Restart
  14        1       2       -7.86      3.2   405ms  
  15        1       3       -8.66      2.1   362ms  
                                      19.2   1.58s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.43s  Non-interacting
   1        0       1        1.03     15.2   1.37s  
   2        0       2        0.53     14.5   1.23s  
   3        0       3       -0.01     14.1   1.19s  
   4        0       4       -0.87     13.8   1.21s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   954ms  
   7        0       7       -3.33      8.9   863ms  
   8        0       8       -4.02      7.9   807ms  
   9        0       9       -5.04      6.4   688ms  
  10        0      10       -6.06      3.9   513ms  
  11        0      11       -7.08      2.2   406ms  
  12        0      12       -8.27      1.0   332ms  
  13        1       1       -7.53     18.1   1.75s  Restart
  14        1       2       -7.84      3.2   399ms  
  15        1       3       -8.61      2.1   361ms  
                                      19.2   1.60s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.46s  Non-interacting
   1        0       1        1.03     15.1   2.01s  
   2        0       2        0.53     14.5   1.22s  
   3        0       3       -0.01     14.1   1.19s  
   4        0       4       -0.87     13.7   1.17s  
   5        0       5       -1.74     11.8   1.01s  
   6        0       6       -2.43     10.0   894ms  
   7        0       7       -3.33      8.9   860ms  
   8        0       8       -4.02      7.8   773ms  
   9        0       9       -5.04      6.4   683ms  
  10        0      10       -6.06      3.9   509ms  
  11        0      11       -7.08      2.3   409ms  
  12        0      12       -8.27      1.0   325ms  
  13        1       1       -7.56     17.9   1.70s  Restart
  14        1       2       -7.87      3.1   413ms  
  15        1       3       -8.68      2.1   357ms  
                                      19.2   1.59s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.46s  Non-interacting
   1        0       1        1.03     15.1   1.36s  
   2        0       2        0.53     14.5   1.21s  
   3        0       3       -0.01     14.1   1.23s  
   4        0       4       -0.87     13.8   1.23s  
   5        0       5       -1.74     11.8   1.08s  
   6        0       6       -2.43     10.0   928ms  
   7        0       7       -3.33      8.9   868ms  
   8        0       8       -4.02      7.9   789ms  
   9        0       9       -5.04      6.4   645ms  
  10        0      10       -6.06      3.9   474ms  
  11        0      11       -7.08      2.2   411ms  
  12        0      12       -8.27      1.0   310ms  
  13        1       1       -7.54     17.9   1.67s  Restart
  14        1       2       -7.87      3.2   405ms  
  15        1       3       -8.67      2.1   360ms  
                                      19.2   2.22s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      19.9   1.32s  Non-interacting
   1        0       1        1.03     15.2   1.36s  
   2        0       2        0.53     14.5   1.25s  
   3        0       3       -0.01     14.1   1.20s  
   4        0       4       -0.87     13.8   1.22s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43     10.0   944ms  
   7        0       7       -3.33      8.9   863ms  
   8        0       8       -4.02      7.9   812ms  
   9        0       9       -5.04      6.4   706ms  
  10        0      10       -6.06      3.9   516ms  
  11        0      11       -7.08      2.3   390ms  
  12        0      12       -8.27      1.0   326ms  
  13        1       1       -7.54     18.0   1.75s  Restart
  14        1       2       -7.86      3.2   419ms  
  15        1       3       -8.64      2.1   342ms  
                                      19.2   1.62s  Final orbitals
135.844365 seconds (63.58 M allocations: 33.069 GiB, 3.78% gc time, 24.86% 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