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.916333425392 -0.69 4.1 677ms
2 -7.921174115538 -2.32 -1.52 1.0 277ms
3 -7.921407562137 -3.63 -2.48 1.4 344ms
4 -7.921440871636 -4.48 -2.84 2.3 449ms
5 -7.921441762972 -6.05 -3.16 1.0 288ms
6 -7.921442006983 -6.61 -4.49 1.0 299ms
7 -7.921442022056 -7.82 -4.96 2.6 480ms
8 -7.921442022135 -10.10 -5.25 1.7 354ms
9 -7.921442022142 -11.15 -5.75 1.0 296ms
10 -7.921442022144 -11.77 -6.28 1.2 326ms
11 -7.921442022144 -12.70 -7.17 1.8 379ms
12 -7.921442022144 -14.15 -7.36 2.0 442ms
13 -7.921442022144 -14.57 -8.12 1.0 305ms
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 2.02s Non-interacting
1 0 1 1.03 15.1 13.8s
2 0 2 0.53 14.5 1.22s
3 0 3 -0.01 14.1 1.17s
4 0 4 -0.87 13.7 1.22s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 972ms
7 0 7 -3.33 8.8 895ms
8 0 8 -4.02 7.9 823ms
9 0 9 -5.04 6.4 703ms
10 0 10 -6.06 3.9 526ms
11 0 11 -7.08 2.3 409ms
12 0 12 -8.27 1.0 320ms
13 1 1 -7.53 17.8 2.00s Restart
14 1 2 -7.88 3.1 430ms
15 1 3 -8.69 2.1 378ms
19.2 2.19s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.49s 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.29s
4 0 4 -0.87 13.8 1.23s
5 0 5 -1.74 11.8 1.10s
6 0 6 -2.43 9.9 959ms
7 0 7 -3.33 8.9 884ms
8 0 8 -4.02 7.8 816ms
9 0 9 -5.04 6.4 693ms
10 0 10 -6.06 3.9 509ms
11 0 11 -7.08 2.3 412ms
12 0 12 -8.27 1.0 324ms
13 1 1 -7.53 17.9 1.76s Restart
14 1 2 -7.88 3.1 421ms
15 1 3 -8.66 2.1 357ms
19.2 2.57s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.39s Non-interacting
1 0 1 1.03 15.1 1.35s
2 0 2 0.53 14.5 1.25s
3 0 3 -0.01 14.1 1.22s
4 0 4 -0.87 13.8 1.23s
5 0 5 -1.74 11.8 1.10s
6 0 6 -2.43 10.0 966ms
7 0 7 -3.33 8.9 870ms
8 0 8 -4.02 7.8 816ms
9 0 9 -5.04 6.4 695ms
10 0 10 -6.06 3.9 501ms
11 0 11 -7.08 2.3 414ms
12 0 12 -8.27 1.0 316ms
13 1 1 -7.53 18.0 1.78s Restart
14 1 2 -7.86 3.1 407ms
15 1 3 -8.65 2.1 352ms
19.2 1.62s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.48s Non-interacting
1 0 1 1.03 15.1 1.43s
2 0 2 0.53 14.5 1.34s
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 977ms
7 0 7 -3.33 8.8 890ms
8 0 8 -4.02 7.9 827ms
9 0 9 -5.04 6.4 714ms
10 0 10 -6.06 3.9 521ms
11 0 11 -7.08 2.2 412ms
12 0 12 -8.27 1.0 329ms
13 1 1 -7.52 17.8 1.80s Restart
14 1 2 -7.87 3.1 414ms
15 1 3 -8.67 2.1 456ms
19.2 2.44s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.41s Non-interacting
1 0 1 1.03 15.1 1.35s
2 0 2 0.53 14.5 1.23s
3 0 3 -0.01 14.1 1.23s
4 0 4 -0.87 13.8 1.24s
5 0 5 -1.74 11.8 1.07s
6 0 6 -2.43 10.0 952ms
7 0 7 -3.33 8.9 878ms
8 0 8 -4.02 7.8 812ms
9 0 9 -5.04 6.4 697ms
10 0 10 -6.06 3.9 509ms
11 0 11 -7.08 2.3 412ms
12 0 12 -8.27 1.0 322ms
13 1 1 -7.53 17.9 1.74s Restart
14 1 2 -7.88 3.1 407ms
15 1 3 -8.66 2.1 353ms
19.2 1.61s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.49s Non-interacting
1 0 1 1.03 15.1 1.41s
2 0 2 0.53 14.5 1.27s
3 0 3 -0.01 14.1 1.26s
4 0 4 -0.87 13.8 1.24s
5 0 5 -1.74 11.8 1.10s
6 0 6 -2.43 10.0 961ms
7 0 7 -3.33 8.9 873ms
8 0 8 -4.02 7.8 816ms
9 0 9 -5.04 6.4 701ms
10 0 10 -6.06 3.9 516ms
11 0 11 -7.08 2.2 409ms
12 0 12 -8.27 1.0 321ms
13 1 1 -7.53 17.9 2.68s Restart
14 1 2 -7.86 3.1 382ms
15 1 3 -8.65 2.1 335ms
19.2 1.52s Final orbitals
142.878890 seconds (102.28 M allocations: 30.824 GiB, 4.77% gc time, 24.54% 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