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.916288423073 -0.69 4.0 619ms
2 -7.921172573963 -2.31 -1.52 1.0 258ms
3 -7.921410979478 -3.62 -2.47 1.5 309ms
4 -7.921440944166 -4.52 -2.87 2.2 457ms
5 -7.921441815252 -6.06 -3.24 1.1 862ms
6 -7.921442009038 -6.71 -4.48 1.1 270ms
7 -7.921442022048 -7.89 -4.99 2.5 418ms
8 -7.921442022133 -10.07 -5.26 1.6 289ms
9 -7.921442022143 -11.02 -5.87 1.0 259ms
10 -7.921442022144 -11.89 -6.35 1.6 332ms
11 -7.921442022144 -12.88 -6.94 1.4 301ms
12 -7.921442022144 -13.80 -7.59 1.8 330ms
13 -7.921442022144 + -14.75 -8.46 1.8 335ms
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.91s Non-interacting
1 0 1 1.03 15.2 12.7s
2 0 2 0.53 14.5 1.08s
3 0 3 -0.01 14.1 1.01s
4 0 4 -0.87 13.7 995ms
5 0 5 -1.74 11.8 884ms
6 0 6 -2.43 10.0 772ms
7 0 7 -3.33 8.9 708ms
8 0 8 -4.02 7.8 657ms
9 0 9 -5.04 6.4 562ms
10 0 10 -6.06 3.9 413ms
11 0 11 -7.08 2.3 339ms
12 0 12 -8.28 1.0 267ms
13 1 1 -7.54 17.8 1.57s Restart
14 1 2 -7.88 3.2 357ms
15 1 3 -8.67 2.1 308ms
19.2 1.95s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.22s Non-interacting
1 0 1 1.03 15.2 1.18s
2 0 2 0.53 14.5 1.76s
3 0 3 -0.01 14.1 1.03s
4 0 4 -0.87 13.8 1.04s
5 0 5 -1.74 11.8 874ms
6 0 6 -2.43 10.0 766ms
7 0 7 -3.33 8.9 701ms
8 0 8 -4.02 7.8 653ms
9 0 9 -5.04 6.5 570ms
10 0 10 -6.06 3.9 414ms
11 0 11 -7.08 2.3 330ms
12 0 12 -8.27 1.0 261ms
13 1 1 -7.52 17.8 1.41s Restart
14 1 2 -7.88 3.2 335ms
15 1 3 -8.69 2.1 290ms
19.2 1.31s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.20s Non-interacting
1 0 1 1.03 15.2 1.17s
2 0 2 0.53 14.6 1.08s
3 0 3 -0.01 14.1 1.05s
4 0 4 -0.87 13.8 1.04s
5 0 5 -1.74 11.8 924ms
6 0 6 -2.43 10.0 810ms
7 0 7 -3.33 8.9 738ms
8 0 8 -4.02 7.9 674ms
9 0 9 -5.04 6.4 583ms
10 0 10 -6.06 3.9 422ms
11 0 11 -7.08 2.3 344ms
12 0 12 -8.26 1.0 265ms
13 1 1 -7.52 17.9 1.47s Restart
14 1 2 -7.85 3.2 345ms
15 1 3 -8.69 2.1 297ms
19.2 1.96s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.15s Non-interacting
1 0 1 1.03 15.2 1.10s
2 0 2 0.53 14.5 1.02s
3 0 3 -0.01 14.1 1.00s
4 0 4 -0.87 13.7 990ms
5 0 5 -1.74 11.8 880ms
6 0 6 -2.43 10.0 767ms
7 0 7 -3.33 8.9 706ms
8 0 8 -4.02 7.8 651ms
9 0 9 -5.04 6.4 563ms
10 0 10 -6.06 3.9 419ms
11 0 11 -7.08 2.3 334ms
12 0 12 -8.28 1.0 265ms
13 1 1 -7.54 17.8 1.41s Restart
14 1 2 -7.88 3.2 334ms
15 1 3 -8.68 2.1 298ms
19.2 1.30s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.20s Non-interacting
1 0 1 1.03 15.2 1.17s
2 0 2 0.53 14.5 1.07s
3 0 3 -0.01 14.1 1.06s
4 0 4 -0.87 13.8 1.04s
5 0 5 -1.74 11.8 918ms
6 0 6 -2.43 10.0 805ms
7 0 7 -3.33 8.9 738ms
8 0 8 -4.02 7.8 674ms
9 0 9 -5.04 6.5 582ms
10 0 10 -6.06 3.9 421ms
11 0 11 -7.08 2.3 342ms
12 0 12 -8.27 1.0 265ms
13 1 1 -7.53 17.8 1.47s Restart
14 1 2 -7.89 3.2 344ms
15 1 3 -8.70 2.1 293ms
19.2 1.96s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.18s Non-interacting
1 0 1 1.03 15.2 1.11s
2 0 2 0.53 14.6 1.03s
3 0 3 -0.01 14.1 998ms
4 0 4 -0.87 13.8 1000ms
5 0 5 -1.74 11.8 885ms
6 0 6 -2.43 10.0 771ms
7 0 7 -3.33 8.9 711ms
8 0 8 -4.02 7.9 651ms
9 0 9 -5.04 6.4 567ms
10 0 10 -6.06 3.9 417ms
11 0 11 -7.08 2.3 332ms
12 0 12 -8.26 1.0 262ms
13 1 1 -7.53 17.9 1.43s Restart
14 1 2 -7.86 3.2 333ms
15 1 3 -8.69 2.1 293ms
19.2 1.31s Final orbitals
124.711184 seconds (63.71 M allocations: 33.070 GiB, 3.80% gc time, 30.50% 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