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.916318595502                   -0.69    4.1    1.45s
  2   -7.921174340606       -2.31       -1.52    1.0    268ms
  3   -7.921407982054       -3.63       -2.48    1.4    300ms
  4   -7.921440897288       -4.48       -2.84    2.3    413ms
  5   -7.921441777201       -6.06       -3.18    1.0    319ms
  6   -7.921442007340       -6.64       -4.40    1.1    297ms
  7   -7.921442022008       -7.83       -4.93    2.4    450ms
  8   -7.921442022130       -9.91       -5.19    1.8    334ms
  9   -7.921442022142      -10.92       -5.77    1.0    270ms
 10   -7.921442022144      -11.71       -6.25    1.5    332ms
 11   -7.921442022144      -12.65       -6.97    1.5    323ms
 12   -7.921442022144      -13.82       -7.42    2.0    373ms
 13   -7.921442022144      -14.57       -8.02    1.1    297ms

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.93s  Non-interacting
   1        0       1        1.03     15.1   13.1s  
   2        0       2        0.53     14.5   1.21s  
   3        0       3       -0.01     14.1   1.16s  
   4        0       4       -0.87     13.7   1.13s  
   5        0       5       -1.74     11.8   1.02s  
   6        0       6       -2.43     10.0   874ms  
   7        0       7       -3.33      8.9   809ms  
   8        0       8       -4.02      7.8   749ms  
   9        0       9       -5.04      6.4   643ms  
  10        0      10       -6.06      4.0   470ms  
  11        0      11       -7.08      2.3   387ms  
  12        0      12       -8.27      1.0   299ms  
  13        1       1       -7.54     17.8   1.80s  Restart
  14        1       2       -7.88      3.1   389ms  
  15        1       3       -8.69      2.1   324ms  
                                      19.2   2.15s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.32s  Non-interacting
   1        0       1        1.03     15.1   1.28s  
   2        0       2        0.53     14.5   1.17s  
   3        0       3       -0.01     14.1   1.14s  
   4        0       4       -0.87     13.8   1.13s  
   5        0       5       -1.74     11.8   1.02s  
   6        0       6       -2.43     10.0   878ms  
   7        0       7       -3.33      8.9   805ms  
   8        0       8       -4.02      7.8   767ms  
   9        0       9       -5.04      6.5   637ms  
  10        0      10       -6.06      3.9   465ms  
  11        0      11       -7.08      2.3   382ms  
  12        0      12       -8.27      1.0   299ms  
  13        1       1       -7.54     17.8   1.63s  Restart
  14        1       2       -7.90      3.1   377ms  
  15        1       3       -8.69      2.0   333ms  
                                      19.2   1.50s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.37s  Non-interacting
   1        0       1        1.03     15.1   1.29s  
   2        0       2        0.53     14.5   1.18s  
   3        0       3       -0.01     14.1   1.15s  
   4        0       4       -0.87     13.8   1.14s  
   5        0       5       -1.74     11.8   1.01s  
   6        0       6       -2.43     10.0   885ms  
   7        0       7       -3.33      8.9   806ms  
   8        0       8       -4.02      7.8   745ms  
   9        0       9       -5.04      6.4   646ms  
  10        0      10       -6.06      3.9   478ms  
  11        0      11       -7.08      2.3   378ms  
  12        0      12       -8.27      1.0   299ms  
  13        1       1       -7.54     17.8   2.44s  Restart
  14        1       2       -7.89      3.1   405ms  
  15        1       3       -8.68      2.1   308ms  
                                      19.2   1.46s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.36s  Non-interacting
   1        0       1        1.03     15.1   1.28s  
   2        0       2        0.53     14.5   1.19s  
   3        0       3       -0.01     14.1   1.18s  
   4        0       4       -0.87     13.7   1.16s  
   5        0       5       -1.74     11.8   1.01s  
   6        0       6       -2.43     10.0   893ms  
   7        0       7       -3.33      8.9   820ms  
   8        0       8       -4.02      7.8   740ms  
   9        0       9       -5.04      6.4   648ms  
  10        0      10       -6.06      3.9   478ms  
  11        0      11       -7.08      2.3   382ms  
  12        0      12       -8.27      1.0   302ms  
  13        1       1       -7.54     17.8   1.61s  Restart
  14        1       2       -7.89      3.1   382ms  
  15        1       3       -8.70      2.1   327ms  
                                      19.2   1.48s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.40s  Non-interacting
   1        0       1        1.03     15.1   1.32s  
   2        0       2        0.53     14.5   1.20s  
   3        0       3       -0.01     14.1   1.16s  
   4        0       4       -0.87     13.8   1.18s  
   5        0       5       -1.74     11.8   1.02s  
   6        0       6       -2.43     10.0   897ms  
   7        0       7       -3.33      8.9   818ms  
   8        0       8       -4.02      7.8   757ms  
   9        0       9       -5.04      6.4   650ms  
  10        0      10       -6.06      3.9   479ms  
  11        0      11       -7.08      2.2   388ms  
  12        0      12       -8.27      1.0   306ms  
  13        1       1       -7.53     17.8   2.50s  Restart
  14        1       2       -7.89      3.1   386ms  
  15        1       3       -8.68      2.1   314ms  
                                      19.2   1.44s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   1.38s  Non-interacting
   1        0       1        1.03     15.1   1.27s  
   2        0       2        0.53     14.5   1.17s  
   3        0       3       -0.01     14.1   1.15s  
   4        0       4       -0.87     13.8   1.13s  
   5        0       5       -1.74     11.8   1.03s  
   6        0       6       -2.43     10.0   889ms  
   7        0       7       -3.33      8.9   817ms  
   8        0       8       -4.02      7.8   740ms  
   9        0       9       -5.04      6.5   641ms  
  10        0      10       -6.06      3.9   476ms  
  11        0      11       -7.08      2.3   376ms  
  12        0      12       -8.27      1.0   303ms  
  13        1       1       -7.53     17.8   1.60s  Restart
  14        1       2       -7.89      3.1   381ms  
  15        1       3       -8.67      2.1   339ms  
                                      19.2   1.51s  Final orbitals
134.946442 seconds (102.79 M allocations: 30.885 GiB, 3.85% gc time, 26.56% 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