Phonon computations
This is a quick sketch how to run a simple phonon calculation using DFTK.
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=falseto 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 # hiden Energy log10(ΔE) log10(Δρ) Diag Δtime
--- --------------- --------- --------- ---- ------
1 -7.916320155657 -0.69 4.2 652ms
2 -7.921171611812 -2.31 -1.52 1.0 293ms
3 -7.921409038922 -3.62 -2.48 1.4 337ms
4 -7.921440908694 -4.50 -2.85 2.2 438ms
5 -7.921441783745 -6.06 -3.18 1.0 291ms
6 -7.921442007941 -6.65 -4.46 1.0 299ms
7 -7.921442022054 -7.85 -5.09 2.4 567ms
8 -7.921442022138 -10.07 -5.40 2.0 1.24s
9 -7.921442022143 -11.30 -6.00 1.0 289ms
10 -7.921442022144 -12.12 -6.08 1.5 333ms
11 -7.921442022144 -12.63 -7.01 1.0 278ms
12 -7.921442022144 -13.82 -7.45 2.1 412ms
13 -7.921442022144 -14.57 -8.02 1.1 294ms
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 # hideIter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.89s Non-interacting
1 0 1 1.03 15.1 13.1s
2 0 2 0.53 14.5 1.28s
3 0 3 -0.01 14.1 1.24s
4 0 4 -0.87 13.7 1.20s
5 0 5 -1.74 11.8 1.07s
6 0 6 -2.43 10.0 936ms
7 0 7 -3.33 8.9 848ms
8 0 8 -4.02 7.9 790ms
9 0 9 -5.04 6.4 681ms
10 0 10 -6.06 3.9 504ms
11 0 11 -7.08 2.3 397ms
12 0 12 -8.28 1.0 317ms
13 1 1 -7.51 17.9 1.90s Restart
14 1 2 -7.86 3.2 400ms
15 1 3 -8.70 2.2 368ms
19.2 2.18s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.48s Non-interacting
1 0 1 1.03 15.1 1.37s
2 0 2 0.53 14.5 1.25s
3 0 3 -0.01 14.1 1.22s
4 0 4 -0.87 13.8 1.20s
5 0 5 -1.74 11.8 1.08s
6 0 6 -2.43 10.0 934ms
7 0 7 -3.33 8.9 861ms
8 0 8 -4.02 7.8 887ms
9 0 9 -5.04 6.4 1.57s
10 0 10 -6.06 3.9 480ms
11 0 11 -7.08 2.2 380ms
12 0 12 -8.28 1.0 307ms
13 1 1 -7.55 17.9 1.66s Restart
14 1 2 -7.88 3.1 395ms
15 1 3 -8.64 2.0 335ms
19.2 1.57s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.46s Non-interacting
1 0 1 1.03 15.1 1.35s
2 0 2 0.53 14.5 1.24s
3 0 3 -0.01 14.1 1.24s
4 0 4 -0.87 13.8 1.20s
5 0 5 -1.74 11.8 1.07s
6 0 6 -2.43 10.0 936ms
7 0 7 -3.33 8.9 849ms
8 0 8 -4.02 7.9 783ms
9 0 9 -5.04 6.4 675ms
10 0 10 -6.06 3.9 504ms
11 0 11 -7.08 2.3 395ms
12 0 12 -8.27 1.0 315ms
13 1 1 -7.54 17.9 1.70s Restart
14 1 2 -7.88 3.1 399ms
15 1 3 -8.65 2.1 348ms
19.2 1.58s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.45s Non-interacting
1 0 1 1.03 15.1 1.36s
2 0 2 0.53 14.5 1.23s
3 0 3 -0.01 14.1 1.21s
4 0 4 -0.87 13.7 1.19s
5 0 5 -1.74 11.8 1.09s
6 0 6 -2.43 10.0 928ms
7 0 7 -3.33 8.9 859ms
8 0 8 -4.02 7.9 782ms
9 0 9 -5.04 6.4 666ms
10 0 10 -6.06 3.9 599ms
11 0 11 -7.08 2.3 1.28s
12 0 12 -8.28 1.0 301ms
13 1 1 -7.52 17.8 1.62s Restart
14 1 2 -7.88 3.2 401ms
15 1 3 -8.71 2.1 341ms
19.2 1.54s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.44s Non-interacting
1 0 1 1.03 15.1 1.36s
2 0 2 0.53 14.5 1.25s
3 0 3 -0.01 14.1 1.21s
4 0 4 -0.87 13.8 1.20s
5 0 5 -1.74 11.8 1.07s
6 0 6 -2.43 10.0 930ms
7 0 7 -3.33 8.9 860ms
8 0 8 -4.02 7.8 787ms
9 0 9 -5.04 6.4 676ms
10 0 10 -6.06 3.9 495ms
11 0 11 -7.08 2.2 398ms
12 0 12 -8.28 1.0 316ms
13 1 1 -7.54 17.9 1.71s Restart
14 1 2 -7.89 3.1 409ms
15 1 3 -8.65 2.0 348ms
19.2 1.59s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.45s Non-interacting
1 0 1 1.03 15.1 1.36s
2 0 2 0.53 14.6 1.24s
3 0 3 -0.01 14.1 1.22s
4 0 4 -0.87 13.8 1.20s
5 0 5 -1.74 11.8 1.07s
6 0 6 -2.43 10.0 931ms
7 0 7 -3.33 8.9 853ms
8 0 8 -4.02 7.9 787ms
9 0 9 -5.04 6.4 680ms
10 0 10 -6.06 3.9 505ms
11 0 11 -7.08 2.3 399ms
12 0 12 -8.27 1.0 415ms
13 1 1 -7.54 17.8 2.55s Restart
14 1 2 -7.89 3.1 385ms
15 1 3 -8.68 2.1 328ms
19.2 1.57s Final orbitals
139.706530 seconds (102.14 M allocations: 30.820 GiB, 4.26% gc time, 25.19% 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⁻¹)
endMode 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