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.916341251265 -0.69 4.3 792ms
2 -7.921168726763 -2.32 -1.52 1.0 301ms
3 -7.921407573707 -3.62 -2.48 1.5 1.14s
4 -7.921440914087 -4.48 -2.84 2.3 473ms
5 -7.921441766458 -6.07 -3.16 1.0 318ms
6 -7.921442006126 -6.62 -4.32 1.0 308ms
7 -7.921442021970 -7.80 -4.91 2.3 500ms
8 -7.921442022129 -9.80 -5.17 1.9 371ms
9 -7.921442022142 -10.88 -5.81 1.0 313ms
10 -7.921442022144 -11.77 -6.36 1.6 354ms
11 -7.921442022144 -12.77 -6.97 1.7 376ms
12 -7.921442022144 -13.85 -7.76 1.8 403ms
13 -7.921442022144 -15.05 -8.19 2.0 431ms
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.98s Non-interacting
1 0 1 1.03 15.1 13.4s
2 0 2 0.53 14.5 1.33s
3 0 3 -0.01 14.1 1.27s
4 0 4 -0.87 13.7 1.25s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 977ms
7 0 7 -3.33 8.9 886ms
8 0 8 -4.02 7.8 813ms
9 0 9 -5.04 6.5 705ms
10 0 10 -6.06 3.9 524ms
11 0 11 -7.08 2.3 414ms
12 0 12 -8.27 1.0 326ms
13 1 1 -7.53 17.8 1.95s Restart
14 1 2 -7.88 3.2 514ms
15 1 3 -8.71 2.1 1.13s
19.2 2.22s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.54s Non-interacting
1 0 1 1.03 15.1 1.40s
2 0 2 0.53 14.5 1.29s
3 0 3 -0.01 14.1 1.27s
4 0 4 -0.87 13.8 1.24s
5 0 5 -1.74 11.8 1.12s
6 0 6 -2.43 10.0 967ms
7 0 7 -3.33 8.9 887ms
8 0 8 -4.02 7.8 824ms
9 0 9 -5.04 6.5 706ms
10 0 10 -6.06 3.9 517ms
11 0 11 -7.08 2.3 421ms
12 0 12 -8.29 1.0 327ms
13 1 1 -7.53 17.9 1.78s Restart
14 1 2 -7.89 3.2 419ms
15 1 3 -8.68 2.1 364ms
19.2 1.64s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.52s Non-interacting
1 0 1 1.03 15.1 1.42s
2 0 2 0.53 14.6 1.30s
3 0 3 -0.01 14.1 1.26s
4 0 4 -0.87 13.8 1.26s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 975ms
7 0 7 -3.33 8.9 891ms
8 0 8 -4.02 7.9 823ms
9 0 9 -5.04 6.5 715ms
10 0 10 -6.06 3.9 522ms
11 0 11 -7.08 2.3 418ms
12 0 12 -8.28 1.0 411ms
13 1 1 -7.53 17.8 2.55s Restart
14 1 2 -7.89 3.2 392ms
15 1 3 -8.69 2.1 343ms
19.2 1.61s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.50s Non-interacting
1 0 1 1.03 15.1 1.42s
2 0 2 0.53 14.5 1.34s
3 0 3 -0.01 14.1 1.27s
4 0 4 -0.87 13.7 1.25s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 969ms
7 0 7 -3.33 8.9 885ms
8 0 8 -4.02 7.8 825ms
9 0 9 -5.04 6.5 706ms
10 0 10 -6.06 3.9 524ms
11 0 11 -7.08 2.3 415ms
12 0 12 -8.27 1.0 330ms
13 1 1 -7.54 17.8 1.78s Restart
14 1 2 -7.89 3.2 427ms
15 1 3 -8.72 2.1 366ms
19.2 1.65s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.52s Non-interacting
1 0 1 1.03 15.1 1.42s
2 0 2 0.53 14.6 1.29s
3 0 3 -0.01 14.1 1.28s
4 0 4 -0.87 13.8 1.26s
5 0 5 -1.74 11.8 1.12s
6 0 6 -2.43 10.0 977ms
7 0 7 -3.33 8.9 889ms
8 0 8 -4.02 7.8 823ms
9 0 9 -5.04 6.5 708ms
10 0 10 -6.06 3.9 517ms
11 0 11 -7.08 2.3 499ms
12 0 12 -8.28 1.0 1.10s
13 1 1 -7.54 17.8 1.77s Restart
14 1 2 -7.89 3.2 410ms
15 1 3 -8.70 2.1 361ms
19.2 1.61s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.50s Non-interacting
1 0 1 1.03 15.1 1.42s
2 0 2 0.53 14.6 1.29s
3 0 3 -0.01 14.1 1.27s
4 0 4 -0.87 13.8 1.26s
5 0 5 -1.74 11.8 1.12s
6 0 6 -2.43 10.0 973ms
7 0 7 -3.33 8.9 885ms
8 0 8 -4.02 7.9 825ms
9 0 9 -5.04 6.5 704ms
10 0 10 -6.06 3.9 525ms
11 0 11 -7.08 2.3 413ms
12 0 12 -8.28 1.0 331ms
13 1 1 -7.53 17.8 1.77s Restart
14 1 2 -7.89 3.2 423ms
15 1 3 -8.68 2.1 362ms
19.2 1.64s Final orbitals
146.283986 seconds (143.70 M allocations: 31.722 GiB, 4.14% gc time, 24.76% 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