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.916345553590 -0.69 4.2 648ms
2 -7.921177855996 -2.32 -1.52 1.0 247ms
3 -7.921408584057 -3.64 -2.48 1.4 278ms
4 -7.921440926928 -4.49 -2.84 2.3 389ms
5 -7.921441775656 -6.07 -3.16 1.1 263ms
6 -7.921442008154 -6.63 -4.50 1.0 252ms
7 -7.921442022051 -7.86 -4.97 2.6 424ms
8 -7.921442022132 -10.09 -5.22 1.7 307ms
9 -7.921442022143 -10.98 -5.95 1.0 264ms
10 -7.921442022144 -11.93 -6.15 1.6 311ms
11 -7.921442022144 -12.67 -7.12 1.0 261ms
12 -7.921442022144 -13.75 -7.54 2.0 372ms
13 -7.921442022144 + -Inf -8.48 1.1 270ms
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.62s Non-interacting
1 0 1 1.03 15.2 10.0s
2 0 2 0.53 14.5 1.11s
3 0 3 -0.01 14.1 1.16s
4 0 4 -0.87 13.7 1.62s
5 0 5 -1.74 11.8 906ms
6 0 6 -2.43 10.0 799ms
7 0 7 -3.33 8.8 739ms
8 0 8 -4.02 7.8 686ms
9 0 9 -5.04 6.4 592ms
10 0 10 -6.06 3.9 442ms
11 0 11 -7.08 2.3 347ms
12 0 12 -8.27 1.0 277ms
13 1 1 -7.53 17.8 1.64s Restart
14 1 2 -7.87 3.2 377ms
15 1 3 -8.70 2.1 332ms
19.2 1.84s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.25s 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.05s
4 0 4 -0.87 13.7 1.03s
5 0 5 -1.74 11.8 925ms
6 0 6 -2.43 10.0 810ms
7 0 7 -3.33 8.9 744ms
8 0 8 -4.02 7.8 678ms
9 0 9 -5.04 6.5 584ms
10 0 10 -6.06 3.9 438ms
11 0 11 -7.08 2.2 346ms
12 0 12 -8.27 1.0 278ms
13 1 1 -7.53 17.9 1.47s Restart
14 1 2 -7.88 3.2 357ms
15 1 3 -8.67 2.1 303ms
19.2 1.35s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.92s Non-interacting
1 0 1 1.03 15.2 1.11s
2 0 2 0.53 14.5 1.05s
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 922ms
6 0 6 -2.43 10.0 809ms
7 0 7 -3.33 8.9 741ms
8 0 8 -4.02 7.8 675ms
9 0 9 -5.04 6.4 598ms
10 0 10 -6.06 3.9 431ms
11 0 11 -7.08 2.2 356ms
12 0 12 -8.27 1.0 273ms
13 1 1 -7.52 17.9 1.48s Restart
14 1 2 -7.87 3.2 359ms
15 1 3 -8.65 2.1 306ms
19.2 1.35s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.25s Non-interacting
1 0 1 1.03 15.2 1.18s
2 0 2 0.53 14.5 1.07s
3 0 3 -0.01 14.1 1.05s
4 0 4 -0.87 13.7 1.04s
5 0 5 -1.74 11.8 927ms
6 0 6 -2.43 10.0 814ms
7 0 7 -3.33 8.9 745ms
8 0 8 -4.02 7.8 678ms
9 0 9 -5.04 6.4 590ms
10 0 10 -6.06 3.9 440ms
11 0 11 -7.08 2.3 348ms
12 0 12 -8.27 1.0 274ms
13 1 1 -7.53 17.9 1.49s Restart
14 1 2 -7.88 3.2 350ms
15 1 3 -8.71 2.1 1.02s
19.2 1.32s 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.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.7 1.04s
5 0 5 -1.74 11.8 918ms
6 0 6 -2.43 10.0 807ms
7 0 7 -3.33 8.9 744ms
8 0 8 -4.02 7.8 674ms
9 0 9 -5.04 6.4 585ms
10 0 10 -6.06 3.9 435ms
11 0 11 -7.08 2.2 344ms
12 0 12 -8.27 1.0 275ms
13 1 1 -7.53 17.9 1.47s Restart
14 1 2 -7.87 3.2 356ms
15 1 3 -8.67 2.1 304ms
19.2 1.35s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.24s Non-interacting
1 0 1 1.03 15.2 1.18s
2 0 2 0.53 14.5 1.08s
3 0 3 -0.01 14.1 1.04s
4 0 4 -0.87 13.8 1.04s
5 0 5 -1.74 11.8 927ms
6 0 6 -2.43 10.0 803ms
7 0 7 -3.33 8.9 761ms
8 0 8 -4.02 7.8 676ms
9 0 9 -5.04 6.4 592ms
10 0 10 -6.06 3.9 439ms
11 0 11 -7.08 2.2 347ms
12 0 12 -8.27 1.0 274ms
13 1 1 -7.52 17.9 1.60s Restart
14 1 2 -7.87 3.2 925ms
15 1 3 -8.65 2.1 283ms
19.2 1.31s Final orbitals
119.849260 seconds (64.68 M allocations: 29.581 GiB, 5.03% gc time, 23.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