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.916282211117 -0.69 4.0 577ms
2 -7.921172215610 -2.31 -1.52 1.0 281ms
3 -7.921410913922 -3.62 -2.47 1.5 284ms
4 -7.921440941715 -4.52 -2.87 2.2 388ms
5 -7.921441813633 -6.06 -3.24 1.1 266ms
6 -7.921442009519 -6.71 -4.47 1.2 270ms
7 -7.921442022041 -7.90 -4.97 2.5 495ms
8 -7.921442022132 -10.04 -5.26 1.5 1.05s
9 -7.921442022143 -10.97 -6.01 1.1 253ms
10 -7.921442022144 -11.94 -6.27 2.0 331ms
11 -7.921442022144 -12.84 -6.94 1.0 257ms
12 -7.921442022144 -13.80 -7.65 1.9 339ms
13 -7.921442022144 -15.05 -8.27 2.0 397ms
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.82s Non-interacting
1 0 1 1.03 15.2 12.6s
2 0 2 0.53 14.5 1.11s
3 0 3 -0.01 14.1 1.04s
4 0 4 -0.87 13.7 1.04s
5 0 5 -1.74 11.8 925ms
6 0 6 -2.43 10.0 806ms
7 0 7 -3.33 8.9 744ms
8 0 8 -4.02 7.8 687ms
9 0 9 -5.04 6.4 594ms
10 0 10 -6.06 3.9 446ms
11 0 11 -7.08 2.3 360ms
12 0 12 -8.27 1.0 289ms
13 1 1 -7.53 17.9 1.62s Restart
14 1 2 -7.87 3.2 379ms
15 1 3 -8.68 2.1 341ms
19.2 1.97s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.23s Non-interacting
1 0 1 1.03 15.2 1.16s
2 0 2 0.53 14.5 1.06s
3 0 3 -0.01 14.1 1.04s
4 0 4 -0.87 13.8 1.03s
5 0 5 -1.74 11.8 918ms
6 0 6 -2.43 10.0 802ms
7 0 7 -3.33 8.9 734ms
8 0 8 -4.02 7.8 671ms
9 0 9 -5.04 6.4 590ms
10 0 10 -6.06 3.9 436ms
11 0 11 -7.08 2.3 352ms
12 0 12 -8.27 1.0 282ms
13 1 1 -7.53 17.9 2.33s Restart
14 1 2 -7.87 3.2 324ms
15 1 3 -8.65 2.1 314ms
19.2 1.28s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.19s Non-interacting
1 0 1 1.03 15.2 1.17s
2 0 2 0.53 14.5 1.06s
3 0 3 -0.01 14.1 1.04s
4 0 4 -0.87 13.8 1.02s
5 0 5 -1.74 11.8 917ms
6 0 6 -2.43 10.0 798ms
7 0 7 -3.33 8.9 732ms
8 0 8 -4.02 7.9 669ms
9 0 9 -5.04 6.4 578ms
10 0 10 -6.06 3.9 437ms
11 0 11 -7.08 2.3 346ms
12 0 12 -8.27 1.0 270ms
13 1 1 -7.53 17.9 1.47s Restart
14 1 2 -7.86 3.2 355ms
15 1 3 -8.65 2.1 305ms
19.2 1.33s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.24s Non-interacting
1 0 1 1.03 15.2 1.20s
2 0 2 0.53 14.5 1.08s
3 0 3 -0.01 14.1 1.07s
4 0 4 -0.87 13.7 1.05s
5 0 5 -1.74 11.8 935ms
6 0 6 -2.43 10.0 818ms
7 0 7 -3.33 8.9 750ms
8 0 8 -4.02 7.8 683ms
9 0 9 -5.04 6.4 596ms
10 0 10 -6.06 3.9 444ms
11 0 11 -7.08 2.3 361ms
12 0 12 -8.27 1.0 290ms
13 1 1 -7.54 17.8 1.50s Restart
14 1 2 -7.89 3.2 359ms
15 1 3 -8.69 2.1 316ms
19.2 1.36s 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.06s
3 0 3 -0.01 14.1 1.04s
4 0 4 -0.87 13.8 1.11s
5 0 5 -1.74 11.8 1.68s
6 0 6 -2.43 10.0 751ms
7 0 7 -3.33 8.9 708ms
8 0 8 -4.02 7.8 687ms
9 0 9 -5.04 6.4 580ms
10 0 10 -6.06 3.9 431ms
11 0 11 -7.08 2.3 382ms
12 0 12 -8.27 1.0 286ms
13 1 1 -7.52 17.9 1.47s Restart
14 1 2 -7.88 3.2 361ms
15 1 3 -8.68 2.1 315ms
19.2 1.35s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.22s Non-interacting
1 0 1 1.03 15.2 1.17s
2 0 2 0.53 14.5 1.05s
3 0 3 -0.01 14.1 1.03s
4 0 4 -0.87 13.8 1.02s
5 0 5 -1.74 11.8 907ms
6 0 6 -2.43 10.0 798ms
7 0 7 -3.33 8.9 728ms
8 0 8 -4.02 7.9 676ms
9 0 9 -5.04 6.4 580ms
10 0 10 -6.06 3.9 431ms
11 0 11 -7.08 2.3 360ms
12 0 12 -8.27 1.0 279ms
13 1 1 -7.53 17.8 1.46s Restart
14 1 2 -7.88 3.2 353ms
15 1 3 -8.67 2.1 309ms
19.2 1.34s Final orbitals
125.737791 seconds (62.72 M allocations: 33.018 GiB, 3.67% gc time, 29.60% 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