Eigenvalues of the dielectric matrix
We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively.
using DFTK
using Plots
using KrylovKit
using Printf
# Calculation parameters
kgrid = [1, 1, 1]
Ecut = 5
# Silicon lattice
a = 10.26
lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]
Si = ElementPsp(:Si, psp=load_psp("hgh/lda/Si-q4"))
atoms = [Si, Si]
positions = [ones(3)/8, -ones(3)/8]
# Compute the dielectric operator without symmetries
model = model_LDA(lattice, atoms, positions, symmetries=false)
basis = PlaneWaveBasis(model; Ecut, kgrid)
scfres = self_consistent_field(basis, tol=1e-8);
n Energy log10(ΔE) log10(Δρ) Diag Δtime
--- --------------- --------- --------- ---- ------
1 -7.234478649958 -0.50 8.0
2 -7.250171245484 -1.80 -1.40 1.0 6.85ms
3 -7.251011182982 -3.08 -1.96 1.0 6.87ms
4 -7.251066942492 -4.25 -1.93 2.0 8.53ms
5 -7.251326110505 -3.59 -2.56 1.0 7.23ms
6 -7.251338118449 -4.92 -3.15 1.0 7.08ms
7 -7.251338693024 -6.24 -3.51 2.0 8.57ms
8 -7.251338786124 -7.03 -4.00 2.0 8.44ms
9 -7.251338797098 -7.96 -4.55 1.0 7.16ms
10 -7.251338798614 -8.82 -5.05 2.0 9.09ms
11 -7.251338798695 -10.09 -5.59 1.0 7.52ms
12 -7.251338798701 -11.26 -5.74 2.0 8.84ms
13 -7.251338798704 -11.50 -6.18 1.0 7.55ms
14 -7.251338798704 -12.18 -6.68 2.0 9.02ms
15 -7.251338798705 -13.30 -7.34 1.0 7.34ms
16 -7.251338798705 -14.75 -7.64 3.0 10.0ms
17 -7.251338798705 -15.05 -8.16 1.0 72.2ms
Applying $ε^† ≔ (1- χ_0 K)$ …
function eps_fun(δρ)
δV = apply_kernel(basis, δρ; ρ=scfres.ρ)
χ0δV = apply_χ0(scfres, δV)
δρ - χ0δV
end;
… eagerly diagonalizes the subspace matrix at each iteration
eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);
[ Info: Arnoldi iteration step 1: normres = 0.030486242182288893
[ Info: Arnoldi iteration step 2: normres = 0.6913080248779351
[ Info: Arnoldi iteration step 3: normres = 0.8315541251777673
[ Info: Arnoldi iteration step 4: normres = 0.33015558079865276
[ Info: Arnoldi iteration step 5: normres = 0.36029168496979086
[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (3.90e-02, 5.84e-02, 2.83e-01, 2.10e-01, 2.54e-02)
[ Info: Arnoldi iteration step 6: normres = 0.45068540331271567
[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (1.37e-02, 7.97e-02, 4.10e-01, 1.31e-01, 6.59e-02)
[ Info: Arnoldi iteration step 7: normres = 0.10274256649914587
[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (7.85e-04, 1.55e-02, 4.09e-02, 7.12e-02, 5.17e-02)
[ Info: Arnoldi iteration step 8: normres = 0.09517715295369383
[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (3.24e-05, 1.07e-03, 3.08e-03, 2.18e-02, 3.49e-02)
[ Info: Arnoldi iteration step 9: normres = 0.08085198857239494
[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (1.13e-06, 6.17e-05, 1.97e-04, 5.93e-03, 3.00e-02)
[ Info: Arnoldi iteration step 10: normres = 0.09395004241777424
[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (4.64e-08, 4.18e-06, 1.49e-05, 1.98e-03, 3.40e-02)
[ Info: Arnoldi iteration step 11: normres = 0.09075824011603416
[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (1.85e-09, 2.78e-07, 1.10e-06, 7.32e-04, 4.23e-02)
[ Info: Arnoldi iteration step 12: normres = 0.07754267943013957
[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (6.17e-11, 1.52e-08, 6.70e-08, 1.82e-04, 2.12e-02)
[ Info: Arnoldi iteration step 13: normres = 0.03486503841674215
[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (9.12e-13, 3.66e-10, 1.78e-09, 1.84e-05, 3.95e-03)
[ Info: Arnoldi iteration step 14: normres = 0.7140210884611637
[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (3.45e-13, 2.67e-10, 1.52e-09, 7.09e-01, 1.47e-02)
[ Info: Arnoldi iteration step 15: normres = 0.06792027948492378
[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (1.99e-14, 1.32e-09, 5.40e-02, 2.48e-05, 5.86e-05)
[ Info: Arnoldi iteration step 16: normres = 0.6335492321064565
[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (6.71e-15, 1.15e-09, 3.53e-02, 6.00e-05, 5.99e-01)
[ Info: Arnoldi iteration step 17: normres = 0.04837002859044906
[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (2.44e-16, 3.39e-08, 8.10e-03, 1.85e-05, 3.60e-02)
[ Info: Arnoldi iteration step 18: normres = 0.020326641274435515
[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (2.04e-18, 1.06e-04, 2.23e-05, 2.13e-04, 4.84e-04)
[ Info: Arnoldi iteration step 19: normres = 0.10792425537125168
[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (9.20e-20, 1.66e-08, 7.85e-06, 2.16e-08, 4.23e-05)
[ Info: Arnoldi iteration step 20: normres = 0.11540792802384545
[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (5.16e-21, 2.60e-07, 7.46e-07, 6.15e-07, 4.81e-06)
[ Info: Arnoldi iteration step 21: normres = 0.026930119762307823
[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (5.87e-23, 2.61e-09, 1.44e-08, 6.88e-08, 7.19e-08)
[ Info: Arnoldi iteration step 22: normres = 0.015439594275496297
[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (3.73e-25, 1.99e-11, 1.47e-10, 8.31e-10, 7.33e-10)
[ Info: Arnoldi iteration step 23: normres = 0.3230769711709697
[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (5.08e-26, 4.39e-12, 3.23e-11, 1.91e-10, 1.91e-10)
[ Info: Arnoldi iteration step 24: normres = 0.05420182326602657
[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (2.56e-27, 1.62e-12, 1.19e-11, 1.92e-08, 2.07e-08)
[ Info: Arnoldi iteration step 25: normres = 0.015510144018129042
[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 3 values converged, normres = (1.63e-29, 1.65e-14, 1.21e-13, 6.76e-09, 1.62e-08)
[ Info: Arnoldi iteration step 26: normres = 0.10355532090420419
[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (7.06e-31, 1.16e-15, 8.51e-15, 1.53e-05, 2.63e-05)
[ Info: Arnoldi iteration step 27: normres = 0.030398207470579117
[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (9.56e-33, 2.63e-17, 1.93e-16, 1.45e-07, 1.40e-08)
[ Info: Arnoldi iteration step 28: normres = 0.050109472613595586
[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (1.97e-34, 8.62e-19, 6.34e-18, 9.04e-09, 1.34e-08)
[ Info: Arnoldi iteration step 29: normres = 0.14421826923406125
[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (1.31e-35, 9.94e-20, 7.31e-19, 4.42e-09, 2.11e-09)
[ Info: Arnoldi iteration step 30: normres = 0.11975352256034372
[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (7.25e-37, 9.46e-21, 6.96e-20, 4.88e-10, 3.12e-10)
[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (7.25e-37, 9.46e-21, 6.96e-20, 4.88e-10, 3.12e-10)
[ Info: Arnoldi iteration step 20: normres = 0.049846088991676904
[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 3 values converged, normres = (1.55e-38, 3.31e-22, 2.43e-21, 1.87e-11, 1.25e-11)
[ Info: Arnoldi iteration step 21: normres = 0.0763460035907213
[ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 3 values converged, normres = (5.07e-40, 1.78e-23, 1.31e-22, 1.11e-12, 7.49e-13)
[ Info: Arnoldi iteration step 22: normres = 0.015338319529993571
┌ Info: Arnoldi eigsolve finished after 2 iterations:
│ * 6 eigenvalues converged
│ * norm of residuals = (3.2516026580614316e-42, 1.8387330884594443e-25, 1.3233999554401576e-24, 1.2679624756329092e-14, 8.25184799001653e-15, 3.370235314928955e-15)
└ * number of operations = 33