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.916331837602 -0.69 4.2 710ms
2 -7.921172241278 -2.32 -1.52 1.0 317ms
3 -7.921407966757 -3.63 -2.48 1.4 362ms
4 -7.921440933647 -4.48 -2.84 2.3 486ms
5 -7.921441779557 -6.07 -3.17 1.0 328ms
6 -7.921442007333 -6.64 -4.39 1.0 322ms
7 -7.921442022005 -7.83 -4.91 2.4 522ms
8 -7.921442022131 -9.90 -5.24 1.8 528ms
9 -7.921442022143 -10.94 -5.93 1.1 1.06s
10 -7.921442022144 -11.87 -6.23 1.7 397ms
11 -7.921442022144 -12.75 -7.14 1.1 315ms
12 -7.921442022144 -13.80 -7.54 2.1 439ms
13 -7.921442022144 -14.57 -8.28 1.0 363ms
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.94s Non-interacting
1 0 1 1.03 15.1 12.9s
2 0 2 0.53 14.5 1.39s
3 0 3 -0.01 14.1 1.32s
4 0 4 -0.87 13.7 1.30s
5 0 5 -1.74 11.8 1.18s
6 0 6 -2.43 10.0 1.02s
7 0 7 -3.33 8.9 928ms
8 0 8 -4.02 7.8 861ms
9 0 9 -5.04 6.4 743ms
10 0 10 -6.06 3.9 549ms
11 0 11 -7.08 2.3 436ms
12 0 12 -8.27 1.0 350ms
13 1 1 -7.53 17.8 2.05s Restart
14 1 2 -7.87 3.1 460ms
15 1 3 -8.68 2.1 371ms
19.2 2.31s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.59s Non-interacting
1 0 1 1.03 15.1 1.50s
2 0 2 0.53 14.5 2.18s
3 0 3 -0.01 14.1 1.30s
4 0 4 -0.87 13.7 1.23s
5 0 5 -1.74 11.8 1.15s
6 0 6 -2.43 10.0 1.01s
7 0 7 -3.33 8.9 921ms
8 0 8 -4.02 7.8 857ms
9 0 9 -5.04 6.4 739ms
10 0 10 -6.06 3.9 539ms
11 0 11 -7.08 2.3 437ms
12 0 12 -8.28 1.0 342ms
13 1 1 -7.53 17.8 1.88s Restart
14 1 2 -7.88 3.1 438ms
15 1 3 -8.66 2.1 381ms
19.2 1.73s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.60s Non-interacting
1 0 1 1.03 15.1 1.49s
2 0 2 0.53 14.5 1.36s
3 0 3 -0.01 14.1 1.32s
4 0 4 -0.87 13.8 1.32s
5 0 5 -1.74 11.8 1.18s
6 0 6 -2.43 10.0 1.02s
7 0 7 -3.33 8.9 937ms
8 0 8 -4.02 7.8 845ms
9 0 9 -5.04 6.4 731ms
10 0 10 -6.06 3.9 534ms
11 0 11 -7.08 2.3 428ms
12 0 12 -8.27 1.0 350ms
13 1 1 -7.54 17.8 1.86s Restart
14 1 2 -7.89 3.1 436ms
15 1 3 -8.67 2.1 393ms
19.2 1.73s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.58s Non-interacting
1 0 1 1.03 15.1 2.30s
2 0 2 0.53 14.5 1.29s
3 0 3 -0.01 14.1 1.23s
4 0 4 -0.87 13.7 1.28s
5 0 5 -1.74 11.8 1.17s
6 0 6 -2.43 10.0 1.02s
7 0 7 -3.33 8.9 939ms
8 0 8 -4.02 7.9 870ms
9 0 9 -5.04 6.4 743ms
10 0 10 -6.06 3.9 556ms
11 0 11 -7.08 2.3 438ms
12 0 12 -8.27 1.0 340ms
13 1 1 -7.53 17.8 1.83s Restart
14 1 2 -7.89 3.1 442ms
15 1 3 -8.68 2.1 363ms
19.2 1.70s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.55s Non-interacting
1 0 1 1.03 15.1 1.46s
2 0 2 0.53 14.5 1.33s
3 0 3 -0.01 14.1 1.33s
4 0 4 -0.87 13.7 1.32s
5 0 5 -1.74 11.8 1.17s
6 0 6 -2.43 10.0 976ms
7 0 7 -3.33 8.9 937ms
8 0 8 -4.02 7.9 864ms
9 0 9 -5.04 6.5 717ms
10 0 10 -6.06 3.9 546ms
11 0 11 -7.08 2.3 442ms
12 0 12 -8.28 1.0 333ms
13 1 1 -7.54 17.8 1.86s Restart
14 1 2 -7.89 3.1 422ms
15 1 3 -8.67 2.0 377ms
19.2 1.73s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 2.36s Non-interacting
1 0 1 1.03 15.1 1.43s
2 0 2 0.53 14.5 1.30s
3 0 3 -0.01 14.1 1.32s
4 0 4 -0.87 13.8 1.30s
5 0 5 -1.74 11.8 1.16s
6 0 6 -2.43 10.0 1.02s
7 0 7 -3.33 8.9 921ms
8 0 8 -4.02 7.8 849ms
9 0 9 -5.04 6.4 729ms
10 0 10 -6.06 3.9 548ms
11 0 11 -7.08 2.3 437ms
12 0 12 -8.27 1.0 347ms
13 1 1 -7.54 17.8 1.85s Restart
14 1 2 -7.90 3.1 444ms
15 1 3 -8.69 2.1 376ms
19.2 1.70s Final orbitals
147.165364 seconds (143.91 M allocations: 31.725 GiB, 3.44% gc time, 23.10% 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