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.916289693288 -0.69 4.0 579ms
2 -7.921172412434 -2.31 -1.52 1.0 279ms
3 -7.921409805171 -3.62 -2.47 1.4 269ms
4 -7.921440948662 -4.51 -2.86 2.2 404ms
5 -7.921441803855 -6.07 -3.23 1.0 234ms
6 -7.921442008113 -6.69 -4.45 1.1 274ms
7 -7.921442022033 -7.86 -4.95 2.5 397ms
8 -7.921442022130 -10.01 -5.22 1.4 274ms
9 -7.921442022143 -10.89 -5.95 1.1 239ms
10 -7.921442022144 -11.88 -6.34 1.8 417ms
11 -7.921442022144 -12.92 -6.95 1.1 1.15s
12 -7.921442022144 -13.80 -7.75 2.0 314ms
13 -7.921442022144 -15.05 -8.31 2.0 364ms
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.90s Non-interacting
1 0 1 1.03 15.1 13.7s
2 0 2 0.53 14.5 1.08s
3 0 3 -0.01 14.1 979ms
4 0 4 -0.87 13.8 977ms
5 0 5 -1.74 11.8 876ms
6 0 6 -2.43 10.0 762ms
7 0 7 -3.33 8.9 705ms
8 0 8 -4.02 7.8 647ms
9 0 9 -5.04 6.4 553ms
10 0 10 -6.06 3.9 421ms
11 0 11 -7.08 2.3 334ms
12 0 12 -8.28 1.0 259ms
13 1 1 -7.54 17.9 1.55s Restart
14 1 2 -7.87 3.2 353ms
15 1 3 -8.67 2.1 310ms
19.2 1.95s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.25s Non-interacting
1 0 1 1.03 15.1 1.18s
2 0 2 0.53 14.5 1.07s
3 0 3 -0.01 14.0 1.05s
4 0 4 -0.87 13.7 1.03s
5 0 5 -1.74 11.8 917ms
6 0 6 -2.43 10.0 807ms
7 0 7 -3.33 8.9 773ms
8 0 8 -4.02 7.8 677ms
9 0 9 -5.04 6.4 595ms
10 0 10 -6.06 3.9 426ms
11 0 11 -7.08 2.3 352ms
12 0 12 -8.27 1.0 283ms
13 1 1 -7.54 17.9 1.48s Restart
14 1 2 -7.86 3.2 359ms
15 1 3 -8.65 2.1 312ms
19.2 2.41s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.18s Non-interacting
1 0 1 1.03 15.1 1.11s
2 0 2 0.53 14.5 988ms
3 0 3 -0.01 14.1 969ms
4 0 4 -0.87 13.7 956ms
5 0 5 -1.74 11.8 870ms
6 0 6 -2.43 10.0 757ms
7 0 7 -3.33 8.9 700ms
8 0 8 -4.02 7.8 646ms
9 0 9 -5.04 6.4 558ms
10 0 10 -6.06 3.9 417ms
11 0 11 -7.08 2.3 326ms
12 0 12 -8.27 1.0 250ms
13 1 1 -7.55 17.9 1.41s Restart
14 1 2 -7.87 3.2 341ms
15 1 3 -8.67 2.1 288ms
19.2 1.30s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.21s Non-interacting
1 0 1 1.03 15.1 1.17s
2 0 2 0.53 14.5 1.07s
3 0 3 -0.01 14.1 1.02s
4 0 4 -0.87 13.8 1.01s
5 0 5 -1.74 11.8 918ms
6 0 6 -2.43 10.0 799ms
7 0 7 -3.33 8.9 727ms
8 0 8 -4.02 7.8 658ms
9 0 9 -5.04 6.4 560ms
10 0 10 -6.06 3.9 447ms
11 0 11 -7.08 2.3 341ms
12 0 12 -8.28 1.0 273ms
13 1 1 -7.55 17.8 1.44s Restart
14 1 2 -7.88 3.2 347ms
15 1 3 -8.68 2.1 312ms
19.2 1.34s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.18s Non-interacting
1 0 1 1.03 15.1 1.13s
2 0 2 0.53 14.5 997ms
3 0 3 -0.01 14.0 996ms
4 0 4 -0.87 13.7 1.00s
5 0 5 -1.74 11.8 874ms
6 0 6 -2.43 10.0 753ms
7 0 7 -3.33 8.9 830ms
8 0 8 -4.02 7.8 1.61s
9 0 9 -5.04 6.4 533ms
10 0 10 -6.06 3.9 413ms
11 0 11 -7.08 2.3 334ms
12 0 12 -8.27 1.0 264ms
13 1 1 -7.53 17.9 1.47s Restart
14 1 2 -7.87 3.2 337ms
15 1 3 -8.67 2.1 319ms
19.2 1.34s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.18s Non-interacting
1 0 1 1.03 15.1 1.12s
2 0 2 0.53 14.5 1.02s
3 0 3 -0.01 14.1 1.00s
4 0 4 -0.87 13.7 994ms
5 0 5 -1.74 11.8 875ms
6 0 6 -2.43 10.0 767ms
7 0 7 -3.33 8.9 704ms
8 0 8 -4.02 7.8 652ms
9 0 9 -5.04 6.4 563ms
10 0 10 -6.06 3.9 413ms
11 0 11 -7.08 2.3 334ms
12 0 12 -8.27 1.0 263ms
13 1 1 -7.55 17.9 1.41s Restart
14 1 2 -7.87 3.2 331ms
15 1 3 -8.68 2.1 293ms
19.2 1.29s Final orbitals
126.679266 seconds (62.80 M allocations: 33.008 GiB, 4.40% gc time, 31.50% 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