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.916284869330 -0.69 4.0 588ms
2 -7.921172114054 -2.31 -1.52 1.0 259ms
3 -7.921409869599 -3.62 -2.47 1.4 290ms
4 -7.921440915730 -4.51 -2.86 2.2 414ms
5 -7.921441802626 -6.05 -3.22 1.1 265ms
6 -7.921442008479 -6.69 -4.45 1.1 279ms
7 -7.921442022026 -7.87 -4.97 2.5 433ms
8 -7.921442022129 -9.99 -5.22 1.5 307ms
9 -7.921442022143 -10.86 -6.20 1.1 273ms
10 -7.921442022144 -12.08 -6.14 2.2 416ms
11 -7.921442022144 -12.61 -6.84 1.0 299ms
12 -7.921442022144 -13.69 -7.69 1.8 332ms
13 -7.921442022144 -14.75 -8.11 2.0 381ms
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.93s Non-interacting
1 0 1 1.03 15.1 13.5s
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.07s
5 0 5 -1.74 11.8 961ms
6 0 6 -2.43 10.0 839ms
7 0 7 -3.33 8.9 762ms
8 0 8 -4.02 7.8 707ms
9 0 9 -5.04 6.4 608ms
10 0 10 -6.06 3.9 453ms
11 0 11 -7.08 2.3 366ms
12 0 12 -8.27 1.0 289ms
13 1 1 -7.55 17.8 1.69s Restart
14 1 2 -7.88 3.2 384ms
15 1 3 -8.71 2.1 329ms
19.2 2.07s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.31s Non-interacting
1 0 1 1.03 15.1 1.22s
2 0 2 0.53 14.5 1.11s
3 0 3 -0.01 14.1 1.08s
4 0 4 -0.87 13.8 1.08s
5 0 5 -1.74 11.8 952ms
6 0 6 -2.43 10.0 837ms
7 0 7 -3.33 8.9 762ms
8 0 8 -4.02 7.8 704ms
9 0 9 -5.04 6.4 612ms
10 0 10 -6.06 3.9 446ms
11 0 11 -7.08 2.3 365ms
12 0 12 -8.27 1.0 286ms
13 1 1 -7.53 17.9 1.54s Restart
14 1 2 -7.88 3.2 366ms
15 1 3 -8.67 2.1 384ms
19.2 1.96s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.25s Non-interacting
1 0 1 1.03 15.1 1.20s
2 0 2 0.53 14.5 1.11s
3 0 3 -0.01 14.1 1.09s
4 0 4 -0.87 13.8 1.12s
5 0 5 -1.74 11.8 957ms
6 0 6 -2.43 10.0 836ms
7 0 7 -3.33 8.9 763ms
8 0 8 -4.02 7.9 706ms
9 0 9 -5.04 6.4 605ms
10 0 10 -6.06 3.9 443ms
11 0 11 -7.08 2.3 365ms
12 0 12 -8.27 1.0 286ms
13 1 1 -7.53 17.9 1.55s Restart
14 1 2 -7.87 3.2 361ms
15 1 3 -8.67 2.1 326ms
19.2 1.41s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.33s Non-interacting
1 0 1 1.03 15.1 1.21s
2 0 2 0.53 14.5 1.11s
3 0 3 -0.01 14.1 1.09s
4 0 4 -0.87 13.7 1.08s
5 0 5 -1.74 11.8 957ms
6 0 6 -2.43 10.0 840ms
7 0 7 -3.33 8.9 760ms
8 0 8 -4.02 7.8 703ms
9 0 9 -5.04 6.4 612ms
10 0 10 -6.06 3.9 455ms
11 0 11 -7.08 2.3 361ms
12 0 12 -8.27 1.0 290ms
13 1 1 -7.55 17.9 2.10s Restart
14 1 2 -7.87 3.2 343ms
15 1 3 -8.68 2.2 282ms
19.2 1.39s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.28s Non-interacting
1 0 1 1.03 15.1 1.21s
2 0 2 0.53 14.5 1.10s
3 0 3 -0.01 14.1 1.09s
4 0 4 -0.87 13.8 1.07s
5 0 5 -1.74 11.8 945ms
6 0 6 -2.43 10.0 832ms
7 0 7 -3.33 8.9 753ms
8 0 8 -4.02 7.8 701ms
9 0 9 -5.04 6.4 605ms
10 0 10 -6.06 3.9 443ms
11 0 11 -7.08 2.3 368ms
12 0 12 -8.27 1.0 290ms
13 1 1 -7.54 17.9 1.53s Restart
14 1 2 -7.89 3.2 362ms
15 1 3 -8.67 2.1 314ms
19.2 1.41s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.35s Non-interacting
1 0 1 1.03 15.1 1.23s
2 0 2 0.53 14.5 1.13s
3 0 3 -0.01 14.1 1.09s
4 0 4 -0.87 13.8 1.10s
5 0 5 -1.74 11.8 964ms
6 0 6 -2.43 10.0 843ms
7 0 7 -3.33 8.9 776ms
8 0 8 -4.02 7.9 713ms
9 0 9 -5.04 6.4 610ms
10 0 10 -6.06 3.9 452ms
11 0 11 -7.08 2.3 453ms
12 0 12 -8.27 1.0 829ms
13 1 1 -7.54 17.9 1.50s Restart
14 1 2 -7.87 3.2 346ms
15 1 3 -8.67 2.1 290ms
19.2 1.38s Final orbitals
129.863569 seconds (63.49 M allocations: 33.056 GiB, 4.00% gc time, 28.84% 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