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.916318595502 -0.69 4.1 1.45s
2 -7.921174340606 -2.31 -1.52 1.0 268ms
3 -7.921407982054 -3.63 -2.48 1.4 300ms
4 -7.921440897288 -4.48 -2.84 2.3 413ms
5 -7.921441777201 -6.06 -3.18 1.0 319ms
6 -7.921442007340 -6.64 -4.40 1.1 297ms
7 -7.921442022008 -7.83 -4.93 2.4 450ms
8 -7.921442022130 -9.91 -5.19 1.8 334ms
9 -7.921442022142 -10.92 -5.77 1.0 270ms
10 -7.921442022144 -11.71 -6.25 1.5 332ms
11 -7.921442022144 -12.65 -6.97 1.5 323ms
12 -7.921442022144 -13.82 -7.42 2.0 373ms
13 -7.921442022144 -14.57 -8.02 1.1 297ms
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.1s
2 0 2 0.53 14.5 1.21s
3 0 3 -0.01 14.1 1.16s
4 0 4 -0.87 13.7 1.13s
5 0 5 -1.74 11.8 1.02s
6 0 6 -2.43 10.0 874ms
7 0 7 -3.33 8.9 809ms
8 0 8 -4.02 7.8 749ms
9 0 9 -5.04 6.4 643ms
10 0 10 -6.06 4.0 470ms
11 0 11 -7.08 2.3 387ms
12 0 12 -8.27 1.0 299ms
13 1 1 -7.54 17.8 1.80s Restart
14 1 2 -7.88 3.1 389ms
15 1 3 -8.69 2.1 324ms
19.2 2.15s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.32s Non-interacting
1 0 1 1.03 15.1 1.28s
2 0 2 0.53 14.5 1.17s
3 0 3 -0.01 14.1 1.14s
4 0 4 -0.87 13.8 1.13s
5 0 5 -1.74 11.8 1.02s
6 0 6 -2.43 10.0 878ms
7 0 7 -3.33 8.9 805ms
8 0 8 -4.02 7.8 767ms
9 0 9 -5.04 6.5 637ms
10 0 10 -6.06 3.9 465ms
11 0 11 -7.08 2.3 382ms
12 0 12 -8.27 1.0 299ms
13 1 1 -7.54 17.8 1.63s Restart
14 1 2 -7.90 3.1 377ms
15 1 3 -8.69 2.0 333ms
19.2 1.50s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.37s Non-interacting
1 0 1 1.03 15.1 1.29s
2 0 2 0.53 14.5 1.18s
3 0 3 -0.01 14.1 1.15s
4 0 4 -0.87 13.8 1.14s
5 0 5 -1.74 11.8 1.01s
6 0 6 -2.43 10.0 885ms
7 0 7 -3.33 8.9 806ms
8 0 8 -4.02 7.8 745ms
9 0 9 -5.04 6.4 646ms
10 0 10 -6.06 3.9 478ms
11 0 11 -7.08 2.3 378ms
12 0 12 -8.27 1.0 299ms
13 1 1 -7.54 17.8 2.44s Restart
14 1 2 -7.89 3.1 405ms
15 1 3 -8.68 2.1 308ms
19.2 1.46s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.36s Non-interacting
1 0 1 1.03 15.1 1.28s
2 0 2 0.53 14.5 1.19s
3 0 3 -0.01 14.1 1.18s
4 0 4 -0.87 13.7 1.16s
5 0 5 -1.74 11.8 1.01s
6 0 6 -2.43 10.0 893ms
7 0 7 -3.33 8.9 820ms
8 0 8 -4.02 7.8 740ms
9 0 9 -5.04 6.4 648ms
10 0 10 -6.06 3.9 478ms
11 0 11 -7.08 2.3 382ms
12 0 12 -8.27 1.0 302ms
13 1 1 -7.54 17.8 1.61s Restart
14 1 2 -7.89 3.1 382ms
15 1 3 -8.70 2.1 327ms
19.2 1.48s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.40s Non-interacting
1 0 1 1.03 15.1 1.32s
2 0 2 0.53 14.5 1.20s
3 0 3 -0.01 14.1 1.16s
4 0 4 -0.87 13.8 1.18s
5 0 5 -1.74 11.8 1.02s
6 0 6 -2.43 10.0 897ms
7 0 7 -3.33 8.9 818ms
8 0 8 -4.02 7.8 757ms
9 0 9 -5.04 6.4 650ms
10 0 10 -6.06 3.9 479ms
11 0 11 -7.08 2.2 388ms
12 0 12 -8.27 1.0 306ms
13 1 1 -7.53 17.8 2.50s Restart
14 1 2 -7.89 3.1 386ms
15 1 3 -8.68 2.1 314ms
19.2 1.44s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.38s Non-interacting
1 0 1 1.03 15.1 1.27s
2 0 2 0.53 14.5 1.17s
3 0 3 -0.01 14.1 1.15s
4 0 4 -0.87 13.8 1.13s
5 0 5 -1.74 11.8 1.03s
6 0 6 -2.43 10.0 889ms
7 0 7 -3.33 8.9 817ms
8 0 8 -4.02 7.8 740ms
9 0 9 -5.04 6.5 641ms
10 0 10 -6.06 3.9 476ms
11 0 11 -7.08 2.3 376ms
12 0 12 -8.27 1.0 303ms
13 1 1 -7.53 17.8 1.60s Restart
14 1 2 -7.89 3.1 381ms
15 1 3 -8.67 2.1 339ms
19.2 1.51s Final orbitals
134.946442 seconds (102.79 M allocations: 30.885 GiB, 3.85% gc time, 26.56% 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