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.916282955627 -0.69 4.0 575ms
2 -7.921172278555 -2.31 -1.52 1.0 257ms
3 -7.921410044806 -3.62 -2.47 1.4 283ms
4 -7.921440933603 -4.51 -2.86 2.2 376ms
5 -7.921441804574 -6.06 -3.23 1.0 247ms
6 -7.921442008336 -6.69 -4.45 1.1 269ms
7 -7.921442022026 -7.86 -4.94 2.5 414ms
8 -7.921442022128 -9.99 -5.20 1.4 287ms
9 -7.921442022143 -10.83 -5.97 1.1 263ms
10 -7.921442022144 -11.85 -6.32 1.9 342ms
11 -7.921442022144 -12.90 -6.86 1.0 260ms
12 -7.921442022144 -13.75 -7.68 1.9 332ms
13 -7.921442022144 -14.75 -8.18 2.0 378ms
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.7s
2 0 2 0.53 14.5 1.13s
3 0 3 -0.01 14.1 1.05s
4 0 4 -0.87 13.7 1.06s
5 0 5 -1.74 11.8 1.53s
6 0 6 -2.43 10.0 753ms
7 0 7 -3.33 8.9 733ms
8 0 8 -4.02 7.8 675ms
9 0 9 -5.04 6.4 595ms
10 0 10 -6.06 3.9 434ms
11 0 11 -7.08 2.3 356ms
12 0 12 -8.27 1.0 277ms
13 1 1 -7.53 17.8 1.63s Restart
14 1 2 -7.88 3.2 369ms
15 1 3 -8.70 2.2 318ms
19.2 2.00s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.26s Non-interacting
1 0 1 1.03 15.2 1.17s
2 0 2 0.53 14.5 1.08s
3 0 3 -0.01 14.1 1.05s
4 0 4 -0.87 13.8 1.05s
5 0 5 -1.74 11.8 925ms
6 0 6 -2.43 10.0 812ms
7 0 7 -3.33 8.9 743ms
8 0 8 -4.02 7.8 677ms
9 0 9 -5.04 6.4 590ms
10 0 10 -6.06 3.9 440ms
11 0 11 -7.08 2.3 349ms
12 0 12 -8.27 1.0 277ms
13 1 1 -7.52 17.8 1.49s Restart
14 1 2 -7.88 3.2 355ms
15 1 3 -8.69 2.1 308ms
19.2 1.38s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.26s Non-interacting
1 0 1 1.03 15.2 1.78s
2 0 2 0.53 14.6 986ms
3 0 3 -0.01 14.1 1.02s
4 0 4 -0.87 13.8 1.04s
5 0 5 -1.74 11.8 917ms
6 0 6 -2.43 10.0 810ms
7 0 7 -3.33 8.9 742ms
8 0 8 -4.02 7.9 691ms
9 0 9 -5.04 6.4 589ms
10 0 10 -6.06 3.9 439ms
11 0 11 -7.08 2.3 346ms
12 0 12 -8.27 1.0 278ms
13 1 1 -7.53 17.9 1.49s Restart
14 1 2 -7.87 3.2 354ms
15 1 3 -8.64 2.1 309ms
19.2 1.38s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.26s Non-interacting
1 0 1 1.03 15.2 1.19s
2 0 2 0.53 14.6 1.08s
3 0 3 -0.01 14.1 1.06s
4 0 4 -0.87 13.7 1.05s
5 0 5 -1.74 11.8 942ms
6 0 6 -2.43 10.0 812ms
7 0 7 -3.33 8.9 757ms
8 0 8 -4.02 7.8 690ms
9 0 9 -5.04 6.4 597ms
10 0 10 -6.06 3.9 447ms
11 0 11 -7.08 2.3 353ms
12 0 12 -8.27 1.0 282ms
13 1 1 -7.54 17.8 1.50s Restart
14 1 2 -7.89 3.2 980ms
15 1 3 -8.71 2.1 289ms
19.2 1.29s 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.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 939ms
6 0 6 -2.43 10.0 819ms
7 0 7 -3.33 8.9 754ms
8 0 8 -4.02 7.8 690ms
9 0 9 -5.04 6.4 589ms
10 0 10 -6.06 3.9 437ms
11 0 11 -7.08 2.3 359ms
12 0 12 -8.27 1.0 277ms
13 1 1 -7.52 17.8 1.49s Restart
14 1 2 -7.89 3.2 356ms
15 1 3 -8.70 2.1 313ms
19.2 1.38s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.27s Non-interacting
1 0 1 1.03 15.2 1.20s
2 0 2 0.53 14.6 1.09s
3 0 3 -0.01 14.1 1.07s
4 0 4 -0.87 13.8 1.05s
5 0 5 -1.74 11.8 940ms
6 0 6 -2.43 10.0 822ms
7 0 7 -3.33 8.9 751ms
8 0 8 -4.02 7.9 696ms
9 0 9 -5.04 6.4 593ms
10 0 10 -6.06 3.9 436ms
11 0 11 -7.08 2.3 952ms
12 0 12 -8.27 1.0 290ms
13 1 1 -7.54 17.8 1.37s Restart
14 1 2 -7.88 3.2 347ms
15 1 3 -8.67 2.1 280ms
19.2 1.36s Final orbitals
126.736615 seconds (63.82 M allocations: 33.075 GiB, 4.00% gc time, 29.18% 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