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.916323665424                   -0.69    4.2    340ms
  2   -7.921173526708       -2.31       -1.52    1.0    211ms
  3   -7.921406408674       -3.63       -2.48    1.4    160ms
  4   -7.921440852327       -4.46       -2.84    2.2    230ms
  5   -7.921441741870       -6.05       -3.13    1.0    181ms
  6   -7.921442007448       -6.58       -4.53    1.1    146ms
  7   -7.921442022092       -7.83       -5.06    2.7    245ms
  8   -7.921442022140      -10.32       -5.41    1.6    178ms
  9   -7.921442022143      -11.53       -5.85    1.1    146ms
 10   -7.921442022144      -11.95       -6.37    1.2    162ms
 11   -7.921442022144      -12.88       -7.24    1.8    179ms
 12   -7.921442022144      -14.10       -7.60    2.1    211ms
 13   -7.921442022144   +    -Inf       -8.30    1.0    154ms

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.04s  Non-interacting
   1        0       1        1.03     15.1   7.16s  
   2        0       2        0.53     14.5   653ms  
   3        0       3       -0.01     14.1   661ms  
   4        0       4       -0.87     13.8   610ms  
   5        0       5       -1.74     11.8   545ms  
   6        0       6       -2.43     10.0   1.06s  
   7        0       7       -3.33      8.9   417ms  
   8        0       8       -4.02      7.8   380ms  
   9        0       9       -5.04      6.4   359ms  
  10        0      10       -6.06      3.9   249ms  
  11        0      11       -7.08      2.3   209ms  
  12        0      12       -8.28      1.0   160ms  
  13        1       1       -7.53     17.8   992ms  Restart
  14        1       2       -7.88      3.1   221ms  
  15        1       3       -8.69      2.1   193ms  
                                      19.2   1.13s  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   748ms  Non-interacting
   1        0       1        1.03     15.1   699ms  
   2        0       2        0.53     14.6   679ms  
   3        0       3       -0.01     14.0   618ms  
   4        0       4       -0.87     13.7   632ms  
   5        0       5       -1.74     11.8   534ms  
   6        0       6       -2.43     10.0   476ms  
   7        0       7       -3.33      8.9   420ms  
   8        0       8       -4.02      7.8   397ms  
   9        0       9       -5.04      6.5   339ms  
  10        0      10       -6.06      3.9   254ms  
  11        0      11       -7.08      2.3   200ms  
  12        0      12       -8.27      1.0   160ms  
  13        1       1       -7.53     17.9   859ms  Restart
  14        1       2       -7.87      3.1   203ms  
  15        1       3       -8.68      2.1   178ms  
                                      19.2   813ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   733ms  Non-interacting
   1        0       1        1.03     15.1   700ms  
   2        0       2        0.53     14.5   635ms  
   3        0       3       -0.01     14.1   1.23s  
   4        0       4       -0.87     13.8   585ms  
   5        0       5       -1.74     11.8   524ms  
   6        0       6       -2.43     10.0   480ms  
   7        0       7       -3.33      8.9   422ms  
   8        0       8       -4.02      7.8   392ms  
   9        0       9       -5.04      6.5   335ms  
  10        0      10       -6.06      3.9   249ms  
  11        0      11       -7.08      2.3   202ms  
  12        0      12       -8.27      1.0   156ms  
  13        1       1       -7.53     17.9   864ms  Restart
  14        1       2       -7.88      3.1   204ms  
  15        1       3       -8.68      2.1   183ms  
                                      19.2   796ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   737ms  Non-interacting
   1        0       1        1.03     15.1   714ms  
   2        0       2        0.53     14.5   631ms  
   3        0       3       -0.01     14.1   617ms  
   4        0       4       -0.87     13.8   605ms  
   5        0       5       -1.74     11.8   544ms  
   6        0       6       -2.43     10.0   478ms  
   7        0       7       -3.33      8.9   436ms  
   8        0       8       -4.02      7.8   406ms  
   9        0       9       -5.04      6.4   350ms  
  10        0      10       -6.06      3.9   256ms  
  11        0      11       -7.08      2.3   211ms  
  12        0      12       -8.28      1.0   160ms  
  13        1       1       -7.53     17.8   855ms  Restart
  14        1       2       -7.88      3.1   210ms  
  15        1       3       -8.70      2.1   182ms  
                                      19.2   787ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   730ms  Non-interacting
   1        0       1        1.03     15.1   740ms  
   2        0       2        0.53     14.6   1.28s  
   3        0       3       -0.01     14.0   600ms  
   4        0       4       -0.87     13.7   594ms  
   5        0       5       -1.74     11.8   545ms  
   6        0       6       -2.43     10.0   474ms  
   7        0       7       -3.33      8.9   460ms  
   8        0       8       -4.02      7.8   395ms  
   9        0       9       -5.04      6.5   346ms  
  10        0      10       -6.06      3.9   265ms  
  11        0      11       -7.08      2.3   208ms  
  12        0      12       -8.27      1.0   165ms  
  13        1       1       -7.53     17.9   871ms  Restart
  14        1       2       -7.86      3.1   207ms  
  15        1       3       -8.67      2.1   186ms  
                                      19.2   800ms  Final orbitals
Iter  Restart  Krydim  log10(res)  avg(CG)  Δtime   Comment
----  -------  ------  ----------  -------  ------  ---------------
                                      20.0   755ms  Non-interacting
   1        0       1        1.03     15.1   692ms  
   2        0       2        0.53     14.5   630ms  
   3        0       3       -0.01     14.1   613ms  
   4        0       4       -0.87     13.8   609ms  
   5        0       5       -1.74     11.8   544ms  
   6        0       6       -2.43     10.0   479ms  
   7        0       7       -3.33      8.9   441ms  
   8        0       8       -4.02      7.8   408ms  
   9        0       9       -5.04      6.5   347ms  
  10        0      10       -6.06      3.9   265ms  
  11        0      11       -7.08      2.3   208ms  
  12        0      12       -8.27      1.0   164ms  
  13        1       1       -7.53     17.9   876ms  Restart
  14        1       2       -7.89      3.1   214ms  
  15        1       3       -8.68      2.1   182ms  
                                      19.2   812ms  Final orbitals
 76.920663 seconds (73.45 M allocations: 29.678 GiB, 6.26% gc time, 27.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