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.916326787081 -0.69 4.1 1.37s
2 -7.921173269446 -2.31 -1.52 1.0 299ms
3 -7.921408742661 -3.63 -2.48 1.4 341ms
4 -7.921440928635 -4.49 -2.85 2.3 477ms
5 -7.921441771303 -6.07 -3.16 1.1 323ms
6 -7.921442007986 -6.63 -4.54 1.0 297ms
7 -7.921442022080 -7.85 -5.09 2.6 476ms
8 -7.921442022140 -10.23 -5.45 1.9 404ms
9 -7.921442022143 -11.47 -5.95 1.1 304ms
10 -7.921442022144 -12.05 -6.11 1.3 322ms
11 -7.921442022144 -12.69 -7.48 1.0 304ms
12 -7.921442022144 -13.75 -7.40 2.8 514ms
13 -7.921442022144 + -Inf -8.51 1.0 312ms
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 2.02s Non-interacting
1 0 1 1.03 15.2 12.9s
2 0 2 0.53 14.5 1.18s
3 0 3 -0.01 14.1 1.10s
4 0 4 -0.87 13.8 1.09s
5 0 5 -1.74 11.8 965ms
6 0 6 -2.43 10.0 850ms
7 0 7 -3.33 8.8 760ms
8 0 8 -4.02 7.8 710ms
9 0 9 -5.04 6.4 618ms
10 0 10 -6.06 3.9 451ms
11 0 11 -7.08 2.3 1.18s
12 0 12 -8.28 1.0 309ms
13 1 1 -7.54 17.8 1.76s Restart
14 1 2 -7.89 3.1 393ms
15 1 3 -8.70 2.1 315ms
19.2 2.21s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.54s Non-interacting
1 0 1 1.03 15.2 1.43s
2 0 2 0.53 14.5 1.31s
3 0 3 -0.01 14.1 1.26s
4 0 4 -0.87 13.7 1.26s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 977ms
7 0 7 -3.33 8.9 890ms
8 0 8 -4.02 7.8 821ms
9 0 9 -5.04 6.4 701ms
10 0 10 -6.06 3.9 520ms
11 0 11 -7.08 2.2 403ms
12 0 12 -8.27 1.0 328ms
13 1 1 -7.53 17.9 1.75s Restart
14 1 2 -7.89 3.2 426ms
15 1 3 -8.67 2.1 358ms
19.2 1.63s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.51s Non-interacting
1 0 1 1.03 15.2 1.41s
2 0 2 0.53 14.5 1.29s
3 0 3 -0.01 14.1 1.25s
4 0 4 -0.87 13.8 1.24s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 968ms
7 0 7 -3.33 8.9 895ms
8 0 8 -4.02 7.8 802ms
9 0 9 -5.04 6.4 798ms
10 0 10 -6.06 3.9 1.25s
11 0 11 -7.08 2.2 378ms
12 0 12 -8.27 1.0 318ms
13 1 1 -7.52 17.8 1.60s Restart
14 1 2 -7.89 3.2 426ms
15 1 3 -8.67 2.1 341ms
19.2 1.59s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.51s Non-interacting
1 0 1 1.03 15.2 1.42s
2 0 2 0.53 14.5 1.30s
3 0 3 -0.01 14.1 1.28s
4 0 4 -0.87 13.8 1.23s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 979ms
7 0 7 -3.33 8.8 894ms
8 0 8 -4.02 7.8 809ms
9 0 9 -5.04 6.4 708ms
10 0 10 -6.06 3.9 525ms
11 0 11 -7.08 2.3 408ms
12 0 12 -8.28 1.0 325ms
13 1 1 -7.53 17.9 1.78s Restart
14 1 2 -7.88 3.2 427ms
15 1 3 -8.69 2.1 350ms
19.2 1.65s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.53s Non-interacting
1 0 1 1.03 15.2 1.42s
2 0 2 0.53 14.5 1.29s
3 0 3 -0.01 14.1 1.25s
4 0 4 -0.87 13.7 1.25s
5 0 5 -1.74 11.8 1.12s
6 0 6 -2.43 10.0 977ms
7 0 7 -3.33 8.9 970ms
8 0 8 -4.02 7.8 1.54s
9 0 9 -5.04 6.5 633ms
10 0 10 -6.06 3.9 444ms
11 0 11 -7.08 2.2 380ms
12 0 12 -8.27 1.0 336ms
13 1 1 -7.54 17.9 1.69s Restart
14 1 2 -7.90 3.2 371ms
15 1 3 -8.67 2.0 368ms
19.2 1.62s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.50s Non-interacting
1 0 1 1.03 15.2 1.42s
2 0 2 0.53 14.5 1.30s
3 0 3 -0.01 14.1 1.27s
4 0 4 -0.87 13.8 1.23s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 959ms
7 0 7 -3.33 8.9 892ms
8 0 8 -4.02 7.8 808ms
9 0 9 -5.04 6.4 704ms
10 0 10 -6.06 3.9 513ms
11 0 11 -7.08 2.2 419ms
12 0 12 -8.27 1.0 310ms
13 1 1 -7.52 17.8 1.76s Restart
14 1 2 -7.88 3.2 416ms
15 1 3 -8.66 2.1 358ms
19.2 1.65s Final orbitals
141.816120 seconds (103.12 M allocations: 30.899 GiB, 4.12% gc time, 25.08% 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