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.916314154966 -0.69 4.2 652ms
2 -7.921169745969 -2.31 -1.52 1.0 267ms
3 -7.921406806913 -3.63 -2.48 1.4 317ms
4 -7.921440851197 -4.47 -2.84 2.3 406ms
5 -7.921441745710 -6.05 -3.13 1.1 278ms
6 -7.921442008305 -6.58 -4.53 1.0 273ms
7 -7.921442022076 -7.86 -5.09 2.6 457ms
8 -7.921442022140 -10.20 -5.44 1.9 349ms
9 -7.921442022143 -11.46 -5.96 1.0 276ms
10 -7.921442022144 -12.10 -6.11 1.4 394ms
11 -7.921442022144 -12.69 -7.27 1.0 262ms
12 -7.921442022144 -13.82 -7.37 2.3 1.24s
13 -7.921442022144 -15.05 -8.08 1.0 278ms
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.32s
3 0 3 -0.01 14.1 1.29s
4 0 4 -0.87 13.7 1.28s
5 0 5 -1.74 11.8 1.13s
6 0 6 -2.43 10.0 998ms
7 0 7 -3.33 8.9 907ms
8 0 8 -4.02 7.8 840ms
9 0 9 -5.04 6.4 721ms
10 0 10 -6.06 3.9 534ms
11 0 11 -7.08 2.3 435ms
12 0 12 -8.27 1.0 333ms
13 1 1 -7.53 17.8 2.00s Restart
14 1 2 -7.90 3.1 441ms
15 1 3 -8.71 2.1 380ms
19.2 2.27s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.52s Non-interacting
1 0 1 1.03 15.2 1.43s
2 0 2 0.53 14.6 1.31s
3 0 3 -0.01 14.1 1.28s
4 0 4 -0.87 13.8 1.27s
5 0 5 -1.74 11.8 1.12s
6 0 6 -2.43 10.0 973ms
7 0 7 -3.33 8.9 903ms
8 0 8 -4.02 7.8 830ms
9 0 9 -5.04 6.4 806ms
10 0 10 -6.06 3.9 1.39s
11 0 11 -7.08 2.2 427ms
12 0 12 -8.27 1.0 346ms
13 1 1 -7.53 17.8 1.63s Restart
14 1 2 -7.89 3.1 419ms
15 1 3 -8.69 2.1 328ms
19.2 1.64s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.48s Non-interacting
1 0 1 1.03 15.2 1.44s
2 0 2 0.53 14.6 1.32s
3 0 3 -0.01 14.1 1.29s
4 0 4 -0.87 13.8 1.27s
5 0 5 -1.74 11.8 1.13s
6 0 6 -2.43 10.0 990ms
7 0 7 -3.33 8.9 895ms
8 0 8 -4.02 7.8 841ms
9 0 9 -5.04 6.5 719ms
10 0 10 -6.06 3.9 530ms
11 0 11 -7.08 2.2 421ms
12 0 12 -8.27 1.0 335ms
13 1 1 -7.52 17.8 1.81s Restart
14 1 2 -7.88 3.1 430ms
15 1 3 -8.67 2.1 372ms
19.2 1.67s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.53s Non-interacting
1 0 1 1.03 15.1 1.43s
2 0 2 0.53 14.5 1.32s
3 0 3 -0.01 14.1 1.28s
4 0 4 -0.87 13.7 1.26s
5 0 5 -1.74 11.8 1.13s
6 0 6 -2.43 10.0 984ms
7 0 7 -3.33 8.9 909ms
8 0 8 -4.02 7.8 831ms
9 0 9 -5.04 6.4 716ms
10 0 10 -6.06 3.9 533ms
11 0 11 -7.08 2.3 425ms
12 0 12 -8.27 1.0 422ms
13 1 1 -7.53 17.8 2.60s Restart
14 1 2 -7.90 3.1 388ms
15 1 3 -8.71 2.1 318ms
19.2 1.65s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.50s Non-interacting
1 0 1 1.03 15.2 1.42s
2 0 2 0.53 14.6 1.31s
3 0 3 -0.01 14.1 1.28s
4 0 4 -0.87 13.8 1.27s
5 0 5 -1.74 11.8 1.13s
6 0 6 -2.43 10.0 986ms
7 0 7 -3.33 8.9 903ms
8 0 8 -4.02 7.8 838ms
9 0 9 -5.04 6.4 723ms
10 0 10 -6.06 3.9 522ms
11 0 11 -7.08 2.2 421ms
12 0 12 -8.27 1.0 331ms
13 1 1 -7.53 17.8 1.82s Restart
14 1 2 -7.90 3.1 428ms
15 1 3 -8.70 2.0 362ms
19.2 1.68s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.52s Non-interacting
1 0 1 1.03 15.2 1.43s
2 0 2 0.53 14.6 1.30s
3 0 3 -0.01 14.1 1.28s
4 0 4 -0.87 13.8 1.27s
5 0 5 -1.74 11.8 1.13s
6 0 6 -2.43 10.0 990ms
7 0 7 -3.33 8.9 906ms
8 0 8 -4.02 7.8 834ms
9 0 9 -5.04 6.5 717ms
10 0 10 -6.06 3.9 524ms
11 0 11 -7.08 2.2 430ms
12 0 12 -8.27 1.0 337ms
13 1 1 -7.53 17.8 2.68s Restart
14 1 2 -7.89 3.1 418ms
15 1 3 -8.67 2.1 331ms
19.2 1.52s Final orbitals
146.156329 seconds (96.42 M allocations: 30.481 GiB, 3.76% gc time, 25.42% 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