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.232993692324 -0.50 7.0 2 -7.249581092803 -1.78 -1.40 1.0 7.01ms 3 -7.251072239149 -2.83 -1.88 2.0 8.26ms 4 -7.251011770409 + -4.22 -1.90 1.0 6.99ms 5 -7.251329914374 -3.50 -2.72 1.0 50.3ms 6 -7.251337729214 -5.11 -3.13 2.0 8.07ms 7 -7.251338701750 -6.01 -3.57 2.0 8.57ms 8 -7.251338788850 -7.06 -4.13 1.0 7.22ms 9 -7.251338796977 -8.09 -4.47 2.0 8.74ms 10 -7.251338798470 -8.83 -5.00 1.0 7.24ms 11 -7.251338798695 -9.65 -5.51 2.0 8.96ms 12 -7.251338798702 -11.16 -5.87 1.0 7.42ms 13 -7.251338798704 -11.65 -6.26 2.0 8.77ms 14 -7.251338798705 -12.34 -6.93 2.0 8.87ms 15 -7.251338798705 -13.51 -7.48 3.0 10.5ms 16 -7.251338798705 + -14.75 -8.04 2.0 8.86ms
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.05786104761270987 [ Info: Arnoldi iteration step 2: normres = 0.7212084074816676 [ Info: Arnoldi iteration step 3: normres = 0.655478199457947 [ Info: Arnoldi iteration step 4: normres = 0.21694125027914068 [ Info: Arnoldi iteration step 5: normres = 0.3273328140708042 [ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (8.74e-03, 4.69e-02, 2.55e-01, 1.99e-01, 4.99e-03) [ Info: Arnoldi iteration step 6: normres = 0.5660839287260718 [ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (3.93e-03, 1.36e-01, 5.04e-01, 1.34e-01, 1.69e-01) [ Info: Arnoldi iteration step 7: normres = 0.07299570772088708 [ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (1.72e-04, 3.34e-02, 1.19e-02, 4.40e-02, 3.36e-02) [ Info: Arnoldi iteration step 8: normres = 0.09789435002333843 [ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (7.31e-06, 2.33e-03, 9.25e-04, 1.36e-02, 2.42e-02) [ Info: Arnoldi iteration step 9: normres = 0.09124814097284249 [ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (2.88e-07, 1.52e-04, 6.67e-05, 4.27e-03, 2.91e-02) [ Info: Arnoldi iteration step 10: normres = 0.0903190360596701 [ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (1.15e-08, 1.02e-05, 4.99e-06, 1.60e-03, 4.88e-02) [ Info: Arnoldi iteration step 11: normres = 0.07395055446269212 [ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (3.67e-10, 5.30e-07, 2.88e-07, 3.93e-04, 2.46e-02) [ Info: Arnoldi iteration step 12: normres = 0.07823820455542502 [ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (1.23e-11, 2.92e-08, 1.76e-08, 9.73e-05, 1.15e-02) [ Info: Arnoldi iteration step 13: normres = 0.046727849693438225 [ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (2.43e-13, 9.30e-10, 6.21e-10, 1.24e-05, 2.58e-03) [ Info: Arnoldi iteration step 14: normres = 0.6863531329154221 [ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (1.11e-13, 1.07e-09, 9.34e-10, 6.81e-01, 1.46e-02) [ Info: Arnoldi iteration step 15: normres = 0.1182029571279364 [ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (8.16e-15, 5.66e-10, 7.04e-02, 3.94e-04, 3.69e-05) [ Info: Arnoldi iteration step 16: normres = 0.42980120181790904 [ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (3.24e-15, 2.01e-09, 2.02e-01, 7.13e-03, 3.77e-01) [ Info: Arnoldi iteration step 17: normres = 0.02747153694086166 [ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (4.19e-17, 1.04e-08, 6.48e-03, 3.07e-07, 5.52e-03) [ Info: Arnoldi iteration step 18: normres = 0.021908266718919704 [ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (3.77e-19, 4.95e-08, 9.31e-05, 3.56e-05, 7.95e-05) [ Info: Arnoldi iteration step 19: normres = 0.21679994960800547 [ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (3.59e-20, 1.24e-05, 7.92e-06, 3.25e-08, 1.53e-05) [ Info: Arnoldi iteration step 20: normres = 0.06245063676753702 [ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (1.05e-21, 2.29e-08, 7.59e-07, 8.87e-07, 1.29e-07) [ Info: Arnoldi iteration step 21: normres = 0.024320461106877883 [ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (1.07e-23, 8.88e-09, 8.57e-09, 5.50e-09, 1.51e-08) [ Info: Arnoldi iteration step 22: normres = 0.014865946546674072 [ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (6.51e-26, 1.11e-10, 4.50e-11, 3.75e-11, 1.68e-10) [ Info: Arnoldi iteration step 23: normres = 0.15140592054861735 [ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (4.07e-27, 1.11e-11, 4.50e-12, 4.14e-12, 1.85e-11) [ Info: Arnoldi iteration step 24: normres = 0.1443291244053131 [ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (6.53e-28, 1.06e-11, 4.30e-12, 5.95e-11, 2.67e-10) [ Info: Arnoldi iteration step 25: normres = 0.09401840301007694 [ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 3 values converged, normres = (2.18e-29, 7.12e-13, 2.88e-13, 1.58e-10, 7.00e-10) [ Info: Arnoldi iteration step 26: normres = 0.03724897199763652 [ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (3.64e-31, 2.01e-14, 8.13e-15, 8.66e-05, 1.20e-04) [ Info: Arnoldi iteration step 27: normres = 0.01669706130720581 [ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (2.49e-33, 2.20e-16, 8.88e-17, 8.62e-11, 3.90e-10) [ Info: Arnoldi iteration step 28: normres = 0.0956751599905577 [ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (1.00e-34, 1.43e-17, 5.79e-18, 9.42e-11, 5.23e-10) [ Info: Arnoldi iteration step 29: normres = 0.021527488961754666 [ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (9.39e-37, 2.21e-19, 8.93e-20, 1.01e-11, 1.73e-09) [ Info: Arnoldi iteration step 30: normres = 0.030566576810141025 [ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 4 values converged, normres = (1.18e-38, 4.43e-21, 1.79e-21, 2.27e-13, 9.51e-11) [ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 4 values converged, normres = (1.18e-38, 4.43e-21, 1.79e-21, 2.27e-13, 9.51e-11) [ Info: Arnoldi iteration step 20: normres = 0.19410303228968878 [ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (1.04e-39, 6.57e-22, 2.66e-22, 3.76e-14, 1.58e-11) [ Info: Arnoldi iteration step 21: normres = 0.11972686543373572 [ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 4 values converged, normres = (5.76e-41, 6.36e-23, 2.57e-23, 4.11e-15, 1.72e-12) [ Info: Arnoldi iteration step 22: normres = 0.02133925507091388 ┌ Info: Arnoldi eigsolve finished after 2 iterations: │ * 6 eigenvalues converged │ * norm of residuals = (5.245439753977714e-43, 9.487670557440135e-25, 4.690810676852894e-25, 6.813651634105719e-17, 2.785047502003835e-14, 9.159985879503366e-15) └ * number of operations = 33