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.235051883263 -0.50 9.0
2 -7.250381077594 -1.81 -1.40 1.0 7.94ms
3 -7.251153592677 -3.11 -2.15 1.0 7.92ms
4 -7.251146713485 + -5.16 -2.02 2.0 10.0ms
5 -7.251335697645 -3.72 -2.74 1.0 8.08ms
6 -7.251338212704 -5.60 -3.27 1.0 8.11ms
7 -7.251338675460 -6.33 -3.47 2.0 9.65ms
8 -7.251338791505 -6.94 -4.06 1.0 8.28ms
9 -7.251338797491 -8.22 -4.71 1.0 8.32ms
10 -7.251338798464 -9.01 -4.75 2.0 10.2ms
11 -7.251338798673 -9.68 -5.30 1.0 8.59ms
12 -7.251338798691 -10.74 -5.39 2.0 10.5ms
13 -7.251338798701 -11.02 -5.73 1.0 9.05ms
14 -7.251338798704 -11.46 -6.23 2.0 10.6ms
15 -7.251338798704 -12.46 -6.71 1.0 8.51ms
16 -7.251338798705 -13.18 -7.14 3.0 11.9ms
17 -7.251338798705 -15.05 -7.53 1.0 8.46ms
18 -7.251338798705 + -Inf -7.87 1.0 8.70ms
19 -7.251338798705 -14.75 -8.49 1.0 8.63ms
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.040924683645279604
[ Info: Arnoldi iteration step 2: normres = 0.832043493997001
[ Info: Arnoldi iteration step 3: normres = 0.5520802070584976
[ Info: Arnoldi iteration step 4: normres = 0.35580071744026154
[ Info: Arnoldi iteration step 5: normres = 0.2182679628732112
[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (8.68e-03, 6.11e-02, 1.52e-01, 1.41e-01, 2.73e-02)
[ Info: Arnoldi iteration step 6: normres = 0.6310650853924479
[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (3.53e-03, 7.54e-02, 5.99e-01, 1.53e-01, 8.78e-02)
[ Info: Arnoldi iteration step 7: normres = 0.12010648735946347
[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (3.21e-04, 7.65e-02, 3.24e-02, 5.24e-02, 5.91e-02)
[ Info: Arnoldi iteration step 8: normres = 0.12399053652956012
[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (1.77e-05, 7.09e-03, 3.08e-03, 2.48e-02, 6.14e-02)
[ Info: Arnoldi iteration step 9: normres = 0.0714059611991857
[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (5.42e-07, 3.57e-04, 1.72e-04, 6.14e-03, 2.87e-02)
[ Info: Arnoldi iteration step 10: normres = 0.07525648325091512
[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (1.78e-08, 1.95e-05, 1.05e-05, 1.65e-03, 1.69e-02)
[ Info: Arnoldi iteration step 11: normres = 0.09342180461198935
[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (7.12e-10, 1.27e-06, 7.58e-07, 4.74e-04, 9.77e-03)
[ Info: Arnoldi iteration step 12: normres = 0.06850131631327519
[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (2.11e-11, 6.22e-08, 4.11e-08, 1.09e-04, 5.09e-03)
[ Info: Arnoldi iteration step 13: normres = 0.029519256718962262
[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (2.63e-13, 1.26e-09, 9.20e-10, 8.99e-06, 7.99e-04)
[ Info: Arnoldi iteration step 14: normres = 0.21403503401481752
[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (2.34e-14, 1.80e-10, 1.45e-10, 4.71e-06, 6.53e-04)
[ Info: Arnoldi iteration step 15: normres = 0.177607401105371
[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (3.95e-15, 2.34e-10, 1.57e-01, 7.98e-02, 8.22e-04)
[ Info: Arnoldi iteration step 16: normres = 0.46087334937746216
[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (8.40e-16, 1.09e-10, 6.66e-02, 2.43e-04, 3.86e-05)
[ Info: Arnoldi iteration step 17: normres = 0.09111735295965835
[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (7.53e-17, 1.35e-09, 7.31e-02, 3.67e-02, 2.53e-02)
[ Info: Arnoldi iteration step 18: normres = 0.02263254902702899
[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (7.06e-19, 5.84e-09, 1.09e-03, 5.01e-04, 5.46e-04)
[ Info: Arnoldi iteration step 19: normres = 0.2068494632816318
[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (6.28e-20, 1.27e-04, 9.41e-05, 8.18e-09, 1.20e-04)
[ Info: Arnoldi iteration step 20: normres = 0.06145476464180513
[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (1.84e-21, 5.75e-09, 8.26e-06, 4.79e-06, 5.26e-06)
[ Info: Arnoldi iteration step 21: normres = 0.025309838310357408
[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (1.95e-23, 9.18e-08, 1.07e-07, 1.96e-08, 1.32e-07)
[ Info: Arnoldi iteration step 22: normres = 0.013735807187517145
[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (1.10e-25, 9.04e-10, 8.87e-10, 1.41e-10, 1.32e-09)
[ Info: Arnoldi iteration step 23: normres = 0.2449872365178772
[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (1.13e-26, 1.06e-10, 1.81e-10, 2.61e-11, 2.41e-10)
[ Info: Arnoldi iteration step 24: normres = 0.07285247639857975
[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (7.68e-28, 5.30e-11, 8.85e-11, 8.81e-10, 5.56e-09)
[ Info: Arnoldi iteration step 25: normres = 0.029902590054501018
[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 1 values converged, normres = (9.45e-30, 1.78e-12, 1.05e-12, 1.76e-09, 2.91e-08)
[ Info: Arnoldi iteration step 26: normres = 0.09698765676245108
[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (4.09e-31, 1.30e-13, 7.63e-14, 3.36e-05, 3.10e-05)
[ Info: Arnoldi iteration step 27: normres = 0.021253306656499958
[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (3.63e-33, 1.85e-15, 1.09e-15, 3.40e-10, 2.95e-09)
[ Info: Arnoldi iteration step 28: normres = 0.10031073596343697
[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (1.53e-34, 7.45e-17, 1.27e-16, 8.78e-08, 9.02e-09)
[ Info: Arnoldi iteration step 29: normres = 0.042347948708433274
[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (2.83e-36, 2.27e-18, 3.86e-18, 1.40e-10, 4.97e-09)
[ Info: Arnoldi iteration step 30: normres = 0.19038513730715084
[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (2.53e-37, 3.56e-19, 6.04e-19, 2.37e-11, 6.64e-10)
[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (2.53e-37, 6.04e-19, 3.56e-19, 2.37e-11, 6.64e-10)
[ Info: Arnoldi iteration step 20: normres = 0.047019452523478236
[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (5.21e-39, 1.22e-20, 2.08e-20, 9.30e-13, 2.69e-11)
[ Info: Arnoldi iteration step 21: normres = 0.06983721457167204
[ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 4 values converged, normres = (1.56e-40, 1.02e-21, 6.00e-22, 5.07e-14, 1.46e-12)
[ Info: Arnoldi iteration step 22: normres = 0.014717290109079406
┌ Info: Arnoldi eigsolve finished after 2 iterations:
│ * 6 eigenvalues converged
│ * norm of residuals = (9.548330603299915e-43, 9.074557410793526e-24, 9.074557410793526e-24, 5.490570678542788e-16, 1.578987175229383e-14, 1.0283398284268426e-14)
└ * number of operations = 33