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.916319548576                   -0.69    4.2    1.53s
  2   -7.921173118227       -2.31       -1.52    1.0    302ms
  3   -7.921409113338       -3.63       -2.48    1.5    329ms
  4   -7.921440956409       -4.50       -2.85    2.2    564ms
  5   -7.921441784701       -6.08       -3.18    1.0    382ms
  6   -7.921442007782       -6.65       -4.42    1.1    332ms
  7   -7.921442022059       -7.85       -5.17    2.5    491ms
  8   -7.921442022140      -10.09       -5.55    2.1    449ms
  9   -7.921442022143      -11.44       -6.06    1.1    328ms
 10   -7.921442022144      -12.30       -6.16    1.3    330ms
 11   -7.921442022144      -12.76       -7.16    1.0    330ms
 12   -7.921442022144      -13.97       -7.81    2.1    485ms
 13   -7.921442022144      -14.45       -8.79    1.6    414ms

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.09s  Non-interacting
   1        0       1        1.03     15.1   14.1s  
   2        0       2        0.53     14.5   1.32s  
   3        0       3       -0.01     14.1   1.26s  
   4        0       4       -0.87     13.8   2.23s  
   5        0       5       -1.74     11.8   1.09s  
   6        0       6       -2.43     10.0   916ms  
   7        0       7       -3.33      8.9   919ms  
   8        0       8       -4.02      7.8   863ms  
   9        0       9       -5.04      6.4   768ms  
  10        0      10       -6.06      3.9   520ms  
  11        0      11       -7.08      2.3   411ms  
  12        0      12       -8.27      1.0   331ms  
  13        1       1       -7.53     17.8   2.01s  Restart
  14        1       2       -7.89      3.1   446ms  
  15        1       3       -8.68      2.1   411ms  
                                      19.2   2.28s  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.46s  
   2        0       2        0.53     14.5   1.37s  
   3        0       3       -0.01     14.1   1.31s  
   4        0       4       -0.87     13.7   1.33s  
   5        0       5       -1.74     11.8   1.15s  
   6        0       6       -2.43     10.0   993ms  
   7        0       7       -3.33      8.9   890ms  
   8        0       8       -4.02      7.8   848ms  
   9        0       9       -5.04      6.5   712ms  
  10        0      10       -6.06      3.9   530ms  
  11        0      11       -7.08      2.3   433ms  
  12        0      12       -8.28      1.0   325ms  
  13        1       1       -7.54     17.8   1.82s  Restart
  14        1       2       -7.90      3.1   424ms  
  15        1       3       -8.69      2.0   361ms  
                                      19.2   1.67s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   2.43s  Non-interacting
   1        0       1        1.03     15.1   1.34s  
   2        0       2        0.53     14.5   1.22s  
   3        0       3       -0.01     14.1   1.26s  
   4        0       4       -0.87     13.8   1.17s  
   5        0       5       -1.74     11.8   1.06s  
   6        0       6       -2.43     10.0   1.00s  
   7        0       7       -3.33      8.9   926ms  
   8        0       8       -4.02      7.8   842ms  
   9        0       9       -5.04      6.4   718ms  
  10        0      10       -6.06      3.9   534ms  
  11        0      11       -7.08      2.3   390ms  
  12        0      12       -8.27      1.0   324ms  
  13        1       1       -7.54     17.8   1.82s  Restart
  14        1       2       -7.89      3.1   413ms  
  15        1       3       -8.69      2.0   359ms  
                                      19.2   1.69s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.56s  Non-interacting
   1        0       1        1.03     15.1   1.44s  
   2        0       2        0.53     14.5   1.27s  
   3        0       3       -0.01     14.1   1.30s  
   4        0       4       -0.87     13.8   1.27s  
   5        0       5       -1.74     11.8   1.11s  
   6        0       6       -2.43     10.0   949ms  
   7        0       7       -3.33      8.9   901ms  
   8        0       8       -4.02      7.8   855ms  
   9        0       9       -5.04      6.4   722ms  
  10        0      10       -6.06      3.9   512ms  
  11        0      11       -7.08      2.3   433ms  
  12        0      12       -8.27      1.0   336ms  
  13        1       1       -7.53     17.8   1.91s  Restart
  14        1       2       -7.88      3.1   1.24s  
  15        1       3       -8.68      2.1   367ms  
                                      19.2   1.52s  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.32s  
   2        0       2        0.53     14.6   1.23s  
   3        0       3       -0.01     14.1   1.27s  
   4        0       4       -0.87     13.7   1.28s  
   5        0       5       -1.74     11.8   1.16s  
   6        0       6       -2.43     10.0   980ms  
   7        0       7       -3.33      8.9   894ms  
   8        0       8       -4.02      7.8   856ms  
   9        0       9       -5.04      6.4   715ms  
  10        0      10       -6.06      3.9   529ms  
  11        0      11       -7.08      2.3   409ms  
  12        0      12       -8.28      1.0   332ms  
  13        1       1       -7.54     17.8   1.80s  Restart
  14        1       2       -7.89      3.1   431ms  
  15        1       3       -8.68      2.0   362ms  
                                      19.2   1.70s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.55s  Non-interacting
   1        0       1        1.03     15.1   1.47s  
   2        0       2        0.53     14.5   1.34s  
   3        0       3       -0.01     14.1   1.30s  
   4        0       4       -0.87     13.8   1.33s  
   5        0       5       -1.74     11.8   1.17s  
   6        0       6       -2.43     10.0   991ms  
   7        0       7       -3.33      8.9   913ms  
   8        0       8       -4.02      7.8   880ms  
   9        0       9       -5.04      6.4   710ms  
  10        0      10       -6.06      3.9   517ms  
  11        0      11       -7.08      2.3   441ms  
  12        0      12       -8.27      1.0   408ms  
  13        1       1       -7.53     17.8   2.67s  Restart
  14        1       2       -7.88      3.1   390ms  
  15        1       3       -8.68      2.1   329ms  
                                      19.2   1.56s  Final orbitals
148.938693 seconds (143.90 M allocations: 31.720 GiB, 4.53% gc time, 25.07% 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