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.916316482568 -0.69 4.2 635ms
2 -7.921170995703 -2.31 -1.52 1.0 290ms
3 -7.921406935138 -3.63 -2.48 1.4 309ms
4 -7.921440883564 -4.47 -2.83 2.3 528ms
5 -7.921441755556 -6.06 -3.14 1.0 1.13s
6 -7.921442006770 -6.60 -4.51 1.0 276ms
7 -7.921442022059 -7.82 -4.97 2.6 460ms
8 -7.921442022135 -10.12 -5.30 1.6 340ms
9 -7.921442022143 -11.12 -5.98 1.1 284ms
10 -7.921442022144 -11.97 -6.17 1.8 346ms
11 -7.921442022144 -12.73 -7.60 1.0 285ms
12 -7.921442022144 -13.91 -8.00 3.0 522ms
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.84s Non-interacting
1 0 1 1.03 15.2 12.6s
2 0 2 0.53 14.5 1.24s
3 0 3 -0.01 14.1 1.19s
4 0 4 -0.87 13.7 1.16s
5 0 5 -1.74 11.8 1.04s
6 0 6 -2.43 10.0 907ms
7 0 7 -3.33 8.9 840ms
8 0 8 -4.02 7.8 765ms
9 0 9 -5.04 6.4 661ms
10 0 10 -6.06 3.9 489ms
11 0 11 -7.08 2.3 396ms
12 0 12 -8.27 1.0 316ms
13 1 1 -7.52 17.8 1.84s Restart
14 1 2 -7.88 3.2 413ms
15 1 3 -8.71 2.1 346ms
19.2 2.10s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.40s Non-interacting
1 0 1 1.03 15.2 1.33s
2 0 2 0.53 14.5 1.20s
3 0 3 -0.01 14.1 2.14s
4 0 4 -0.87 13.8 1.11s
5 0 5 -1.74 11.8 990ms
6 0 6 -2.43 10.0 889ms
7 0 7 -3.33 8.9 805ms
8 0 8 -4.02 7.8 740ms
9 0 9 -5.04 6.4 642ms
10 0 10 -6.06 3.9 475ms
11 0 11 -7.08 2.3 385ms
12 0 12 -8.28 1.0 304ms
13 1 1 -7.53 17.8 1.64s Restart
14 1 2 -7.89 3.2 388ms
15 1 3 -8.67 2.1 337ms
19.2 1.51s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.38s Non-interacting
1 0 1 1.03 15.2 1.31s
2 0 2 0.53 14.5 1.20s
3 0 3 -0.01 14.1 1.17s
4 0 4 -0.87 13.7 1.15s
5 0 5 -1.74 11.8 1.03s
6 0 6 -2.43 10.0 898ms
7 0 7 -3.33 8.9 821ms
8 0 8 -4.02 7.8 765ms
9 0 9 -5.04 6.5 659ms
10 0 10 -6.06 3.9 493ms
11 0 11 -7.08 2.3 387ms
12 0 12 -8.26 1.0 309ms
13 1 1 -7.52 17.8 1.64s Restart
14 1 2 -7.88 3.2 393ms
15 1 3 -8.68 2.1 342ms
19.2 1.53s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.40s Non-interacting
1 0 1 1.03 15.2 1.31s
2 0 2 0.53 14.5 1.21s
3 0 3 -0.01 14.1 1.18s
4 0 4 -0.87 13.7 1.17s
5 0 5 -1.74 11.8 1.04s
6 0 6 -2.43 10.0 902ms
7 0 7 -3.33 8.9 927ms
8 0 8 -4.02 7.8 1.61s
9 0 9 -5.04 6.4 631ms
10 0 10 -6.06 3.9 459ms
11 0 11 -7.08 2.3 375ms
12 0 12 -8.27 1.0 312ms
13 1 1 -7.50 17.9 1.58s Restart
14 1 2 -7.86 3.2 393ms
15 1 3 -8.70 2.2 339ms
19.2 1.52s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.40s Non-interacting
1 0 1 1.03 15.2 1.32s
2 0 2 0.53 14.5 1.22s
3 0 3 -0.01 14.1 1.18s
4 0 4 -0.87 13.8 1.17s
5 0 5 -1.74 11.8 1.04s
6 0 6 -2.43 10.0 908ms
7 0 7 -3.33 8.9 839ms
8 0 8 -4.02 7.8 767ms
9 0 9 -5.04 6.4 665ms
10 0 10 -6.06 3.9 488ms
11 0 11 -7.08 2.3 393ms
12 0 12 -8.27 1.0 312ms
13 1 1 -7.53 17.8 1.67s Restart
14 1 2 -7.89 3.2 397ms
15 1 3 -8.68 2.1 343ms
19.2 1.53s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.40s Non-interacting
1 0 1 1.03 15.2 1.32s
2 0 2 0.53 14.5 1.21s
3 0 3 -0.01 14.1 1.18s
4 0 4 -0.87 13.7 1.17s
5 0 5 -1.74 11.8 1.04s
6 0 6 -2.43 10.0 911ms
7 0 7 -3.33 8.9 830ms
8 0 8 -4.02 7.8 772ms
9 0 9 -5.04 6.4 662ms
10 0 10 -6.06 3.9 488ms
11 0 11 -7.08 2.3 405ms
12 0 12 -8.26 1.0 305ms
13 1 1 -7.52 17.9 2.60s Restart
14 1 2 -7.88 3.2 386ms
15 1 3 -8.67 2.1 323ms
19.2 1.48s Final orbitals
135.379599 seconds (101.89 M allocations: 30.817 GiB, 4.23% gc time, 25.14% 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