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.916319548576 -0.69 4.2 1.53s
2 -7.921173118227 -2.31 -1.52 1.0 302ms
3 -7.921409113338 -3.63 -2.48 1.5 329ms
4 -7.921440956409 -4.50 -2.85 2.2 564ms
5 -7.921441784701 -6.08 -3.18 1.0 382ms
6 -7.921442007782 -6.65 -4.42 1.1 332ms
7 -7.921442022059 -7.85 -5.17 2.5 491ms
8 -7.921442022140 -10.09 -5.55 2.1 449ms
9 -7.921442022143 -11.44 -6.06 1.1 328ms
10 -7.921442022144 -12.30 -6.16 1.3 330ms
11 -7.921442022144 -12.76 -7.16 1.0 330ms
12 -7.921442022144 -13.97 -7.81 2.1 485ms
13 -7.921442022144 -14.45 -8.79 1.6 414ms
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.09s Non-interacting
1 0 1 1.03 15.1 14.1s
2 0 2 0.53 14.5 1.32s
3 0 3 -0.01 14.1 1.26s
4 0 4 -0.87 13.8 2.23s
5 0 5 -1.74 11.8 1.09s
6 0 6 -2.43 10.0 916ms
7 0 7 -3.33 8.9 919ms
8 0 8 -4.02 7.8 863ms
9 0 9 -5.04 6.4 768ms
10 0 10 -6.06 3.9 520ms
11 0 11 -7.08 2.3 411ms
12 0 12 -8.27 1.0 331ms
13 1 1 -7.53 17.8 2.01s Restart
14 1 2 -7.89 3.1 446ms
15 1 3 -8.68 2.1 411ms
19.2 2.28s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.51s Non-interacting
1 0 1 1.03 15.1 1.46s
2 0 2 0.53 14.5 1.37s
3 0 3 -0.01 14.1 1.31s
4 0 4 -0.87 13.7 1.33s
5 0 5 -1.74 11.8 1.15s
6 0 6 -2.43 10.0 993ms
7 0 7 -3.33 8.9 890ms
8 0 8 -4.02 7.8 848ms
9 0 9 -5.04 6.5 712ms
10 0 10 -6.06 3.9 530ms
11 0 11 -7.08 2.3 433ms
12 0 12 -8.28 1.0 325ms
13 1 1 -7.54 17.8 1.82s Restart
14 1 2 -7.90 3.1 424ms
15 1 3 -8.69 2.0 361ms
19.2 1.67s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 2.43s Non-interacting
1 0 1 1.03 15.1 1.34s
2 0 2 0.53 14.5 1.22s
3 0 3 -0.01 14.1 1.26s
4 0 4 -0.87 13.8 1.17s
5 0 5 -1.74 11.8 1.06s
6 0 6 -2.43 10.0 1.00s
7 0 7 -3.33 8.9 926ms
8 0 8 -4.02 7.8 842ms
9 0 9 -5.04 6.4 718ms
10 0 10 -6.06 3.9 534ms
11 0 11 -7.08 2.3 390ms
12 0 12 -8.27 1.0 324ms
13 1 1 -7.54 17.8 1.82s Restart
14 1 2 -7.89 3.1 413ms
15 1 3 -8.69 2.0 359ms
19.2 1.69s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.56s Non-interacting
1 0 1 1.03 15.1 1.44s
2 0 2 0.53 14.5 1.27s
3 0 3 -0.01 14.1 1.30s
4 0 4 -0.87 13.8 1.27s
5 0 5 -1.74 11.8 1.11s
6 0 6 -2.43 10.0 949ms
7 0 7 -3.33 8.9 901ms
8 0 8 -4.02 7.8 855ms
9 0 9 -5.04 6.4 722ms
10 0 10 -6.06 3.9 512ms
11 0 11 -7.08 2.3 433ms
12 0 12 -8.27 1.0 336ms
13 1 1 -7.53 17.8 1.91s Restart
14 1 2 -7.88 3.1 1.24s
15 1 3 -8.68 2.1 367ms
19.2 1.52s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.43s Non-interacting
1 0 1 1.03 15.1 1.32s
2 0 2 0.53 14.6 1.23s
3 0 3 -0.01 14.1 1.27s
4 0 4 -0.87 13.7 1.28s
5 0 5 -1.74 11.8 1.16s
6 0 6 -2.43 10.0 980ms
7 0 7 -3.33 8.9 894ms
8 0 8 -4.02 7.8 856ms
9 0 9 -5.04 6.4 715ms
10 0 10 -6.06 3.9 529ms
11 0 11 -7.08 2.3 409ms
12 0 12 -8.28 1.0 332ms
13 1 1 -7.54 17.8 1.80s Restart
14 1 2 -7.89 3.1 431ms
15 1 3 -8.68 2.0 362ms
19.2 1.70s Final orbitals
Iter Restart Krydim log10(res) avg(CG) Δtime Comment
---- ------- ------ ---------- ------- ------ ---------------
20.0 1.55s Non-interacting
1 0 1 1.03 15.1 1.47s
2 0 2 0.53 14.5 1.34s
3 0 3 -0.01 14.1 1.30s
4 0 4 -0.87 13.8 1.33s
5 0 5 -1.74 11.8 1.17s
6 0 6 -2.43 10.0 991ms
7 0 7 -3.33 8.9 913ms
8 0 8 -4.02 7.8 880ms
9 0 9 -5.04 6.4 710ms
10 0 10 -6.06 3.9 517ms
11 0 11 -7.08 2.3 441ms
12 0 12 -8.27 1.0 408ms
13 1 1 -7.53 17.8 2.67s Restart
14 1 2 -7.88 3.1 390ms
15 1 3 -8.68 2.1 329ms
19.2 1.56s Final orbitals
148.938693 seconds (143.90 M allocations: 31.720 GiB, 4.53% gc time, 25.07% 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