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.916314266416 -0.69 4.1 657ms
2 -7.921170251901 -2.31 -1.52 1.0 258ms
3 -7.921407829405 -3.62 -2.48 1.4 321ms
4 -7.921440924692 -4.48 -2.84 2.2 389ms
5 -7.921441775284 -6.07 -3.16 1.1 274ms
6 -7.921442008070 -6.63 -4.54 1.0 271ms
7 -7.921442022071 -7.85 -5.00 2.7 453ms
8 -7.921442022135 -10.19 -5.27 1.7 318ms
9 -7.921442022142 -11.11 -5.80 1.0 272ms
10 -7.921442022144 -11.80 -6.14 1.2 309ms
11 -7.921442022144 -12.58 -7.44 1.2 402ms
12 -7.921442022144 -13.75 -7.25 2.8 1.33s
13 -7.921442022144 -14.75 -8.47 1.0 259ms
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.88s Non-interacting
1 0 1 1.03 15.2 12.9s
2 0 2 0.53 14.6 1.19s
3 0 3 -0.01 14.1 1.12s
4 0 4 -0.87 13.7 1.11s
5 0 5 -1.74 11.8 999ms
6 0 6 -2.43 10.0 870ms
7 0 7 -3.33 8.9 791ms
8 0 8 -4.02 7.8 722ms
9 0 9 -5.04 6.4 625ms
10 0 10 -6.06 3.9 472ms
11 0 11 -7.08 2.3 369ms
12 0 12 -8.27 1.0 291ms
13 1 1 -7.52 17.8 1.76s Restart
14 1 2 -7.89 3.2 388ms
15 1 3 -8.70 2.1 336ms
19.2 2.06s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.35s Non-interacting
1 0 1 1.03 15.2 1.26s
2 0 2 0.53 14.6 1.16s
3 0 3 -0.01 14.1 1.13s
4 0 4 -0.87 13.8 1.11s
5 0 5 -1.74 11.8 988ms
6 0 6 -2.43 10.0 855ms
7 0 7 -3.33 8.9 794ms
8 0 8 -4.02 7.8 743ms
9 0 9 -5.04 6.4 622ms
10 0 10 -6.06 3.9 1.44s
11 0 11 -7.08 2.3 361ms
12 0 12 -8.27 1.0 292ms
13 1 1 -7.53 17.9 1.60s Restart
14 1 2 -7.89 3.2 376ms
15 1 3 -8.68 2.1 316ms
19.2 1.47s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.33s Non-interacting
1 0 1 1.03 15.2 1.26s
2 0 2 0.53 14.6 1.15s
3 0 3 -0.01 14.1 1.13s
4 0 4 -0.87 13.8 1.10s
5 0 5 -1.74 11.8 1.02s
6 0 6 -2.43 10.0 866ms
7 0 7 -3.33 8.9 785ms
8 0 8 -4.02 7.8 724ms
9 0 9 -5.04 6.4 637ms
10 0 10 -6.06 3.9 457ms
11 0 11 -7.08 2.3 376ms
12 0 12 -8.27 1.0 291ms
13 1 1 -7.52 17.8 1.57s Restart
14 1 2 -7.89 3.2 372ms
15 1 3 -8.69 2.1 329ms
19.2 1.44s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.33s Non-interacting
1 0 1 1.03 15.2 1.28s
2 0 2 0.53 14.5 1.15s
3 0 3 -0.01 14.1 1.13s
4 0 4 -0.87 13.7 1.11s
5 0 5 -1.74 11.8 994ms
6 0 6 -2.43 10.0 867ms
7 0 7 -3.33 8.9 788ms
8 0 8 -4.02 7.8 725ms
9 0 9 -5.04 6.4 626ms
10 0 10 -6.06 3.9 459ms
11 0 11 -7.08 2.3 365ms
12 0 12 -8.27 1.0 294ms
13 1 1 -7.52 17.8 1.57s Restart
14 1 2 -7.88 3.2 373ms
15 1 3 -8.70 2.2 327ms
19.2 2.51s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.30s Non-interacting
1 0 1 1.03 15.2 1.26s
2 0 2 0.53 14.6 1.13s
3 0 3 -0.01 14.1 1.11s
4 0 4 -0.87 13.8 1.11s
5 0 5 -1.74 11.8 985ms
6 0 6 -2.43 10.0 865ms
7 0 7 -3.33 8.9 789ms
8 0 8 -4.02 7.8 734ms
9 0 9 -5.04 6.4 623ms
10 0 10 -6.06 3.9 464ms
11 0 11 -7.08 2.3 370ms
12 0 12 -8.27 1.0 293ms
13 1 1 -7.53 17.9 1.58s Restart
14 1 2 -7.88 3.2 370ms
15 1 3 -8.66 2.1 322ms
19.2 1.47s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.34s Non-interacting
1 0 1 1.03 15.2 1.26s
2 0 2 0.53 14.6 1.16s
3 0 3 -0.01 14.1 1.12s
4 0 4 -0.87 13.8 1.10s
5 0 5 -1.74 11.8 989ms
6 0 6 -2.43 10.0 858ms
7 0 7 -3.33 8.9 785ms
8 0 8 -4.02 7.8 740ms
9 0 9 -5.04 6.4 626ms
10 0 10 -6.06 3.9 467ms
11 0 11 -7.08 2.3 368ms
12 0 12 -8.27 1.0 292ms
13 1 1 -7.52 17.9 1.58s Restart
14 1 2 -7.87 3.2 405ms
15 1 3 -8.67 2.1 325ms
19.2 1.45s Final orbitals
132.536611 seconds (102.04 M allocations: 30.820 GiB, 4.48% gc time, 26.33% 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