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.916286992758 -0.69 4.0 635ms
2 -7.921172622944 -2.31 -1.52 1.0 302ms
3 -7.921410105929 -3.62 -2.47 1.4 326ms
4 -7.921440909312 -4.51 -2.86 2.2 423ms
5 -7.921441803125 -6.05 -3.22 1.1 304ms
6 -7.921442008345 -6.69 -4.45 1.1 300ms
7 -7.921442022021 -7.86 -4.93 2.5 469ms
8 -7.921442022127 -9.97 -5.18 1.4 398ms
9 -7.921442022142 -10.82 -5.88 1.1 830ms
10 -7.921442022144 -11.81 -6.32 1.8 361ms
11 -7.921442022144 -12.86 -6.91 1.1 302ms
12 -7.921442022144 -13.67 -7.62 1.9 356ms
13 -7.921442022144 + -14.75 -8.33 2.0 451ms
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 11.7s
2 0 2 0.53 14.4 1.24s
3 0 3 -0.01 14.1 1.20s
4 0 4 -0.87 13.7 1.18s
5 0 5 -1.74 11.8 1.08s
6 0 6 -2.43 10.0 932ms
7 0 7 -3.33 8.9 858ms
8 0 8 -4.02 7.8 771ms
9 0 9 -5.04 6.4 667ms
10 0 10 -6.06 3.9 506ms
11 0 11 -7.08 2.3 405ms
12 0 12 -8.27 1.0 327ms
13 1 1 -7.55 17.9 1.84s Restart
14 1 2 -7.86 3.2 431ms
15 1 3 -8.67 2.1 374ms
19.2 2.19s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.47s Non-interacting
1 0 1 1.03 15.1 1.38s
2 0 2 0.53 14.5 1.21s
3 0 3 -0.01 14.1 1.23s
4 0 4 -0.87 13.8 1.87s
5 0 5 -1.74 11.8 1.04s
6 0 6 -2.43 10.0 907ms
7 0 7 -3.33 8.9 854ms
8 0 8 -4.02 7.9 768ms
9 0 9 -5.04 6.4 620ms
10 0 10 -6.06 3.9 488ms
11 0 11 -7.08 2.2 399ms
12 0 12 -8.27 1.0 314ms
13 1 1 -7.54 18.0 1.68s Restart
14 1 2 -7.86 3.2 405ms
15 1 3 -8.66 2.1 362ms
19.2 1.58s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.43s Non-interacting
1 0 1 1.03 15.2 1.37s
2 0 2 0.53 14.5 1.23s
3 0 3 -0.01 14.1 1.19s
4 0 4 -0.87 13.8 1.21s
5 0 5 -1.74 11.8 1.08s
6 0 6 -2.43 10.0 954ms
7 0 7 -3.33 8.9 863ms
8 0 8 -4.02 7.9 807ms
9 0 9 -5.04 6.4 688ms
10 0 10 -6.06 3.9 513ms
11 0 11 -7.08 2.2 406ms
12 0 12 -8.27 1.0 332ms
13 1 1 -7.53 18.1 1.75s Restart
14 1 2 -7.84 3.2 399ms
15 1 3 -8.61 2.1 361ms
19.2 1.60s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.46s Non-interacting
1 0 1 1.03 15.1 2.01s
2 0 2 0.53 14.5 1.22s
3 0 3 -0.01 14.1 1.19s
4 0 4 -0.87 13.7 1.17s
5 0 5 -1.74 11.8 1.01s
6 0 6 -2.43 10.0 894ms
7 0 7 -3.33 8.9 860ms
8 0 8 -4.02 7.8 773ms
9 0 9 -5.04 6.4 683ms
10 0 10 -6.06 3.9 509ms
11 0 11 -7.08 2.3 409ms
12 0 12 -8.27 1.0 325ms
13 1 1 -7.56 17.9 1.70s Restart
14 1 2 -7.87 3.1 413ms
15 1 3 -8.68 2.1 357ms
19.2 1.59s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.46s Non-interacting
1 0 1 1.03 15.1 1.36s
2 0 2 0.53 14.5 1.21s
3 0 3 -0.01 14.1 1.23s
4 0 4 -0.87 13.8 1.23s
5 0 5 -1.74 11.8 1.08s
6 0 6 -2.43 10.0 928ms
7 0 7 -3.33 8.9 868ms
8 0 8 -4.02 7.9 789ms
9 0 9 -5.04 6.4 645ms
10 0 10 -6.06 3.9 474ms
11 0 11 -7.08 2.2 411ms
12 0 12 -8.27 1.0 310ms
13 1 1 -7.54 17.9 1.67s Restart
14 1 2 -7.87 3.2 405ms
15 1 3 -8.67 2.1 360ms
19.2 2.22s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
19.9 1.32s Non-interacting
1 0 1 1.03 15.2 1.36s
2 0 2 0.53 14.5 1.25s
3 0 3 -0.01 14.1 1.20s
4 0 4 -0.87 13.8 1.22s
5 0 5 -1.74 11.8 1.06s
6 0 6 -2.43 10.0 944ms
7 0 7 -3.33 8.9 863ms
8 0 8 -4.02 7.9 812ms
9 0 9 -5.04 6.4 706ms
10 0 10 -6.06 3.9 516ms
11 0 11 -7.08 2.3 390ms
12 0 12 -8.27 1.0 326ms
13 1 1 -7.54 18.0 1.75s Restart
14 1 2 -7.86 3.2 419ms
15 1 3 -8.64 2.1 342ms
19.2 1.62s Final orbitals
135.844365 seconds (63.58 M allocations: 33.069 GiB, 3.78% gc time, 24.86% 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