Open GiggleLiu opened 5 months ago
Hello why is issue this closed? I would also be interested in a Block Lanczos version.
It is not closed; the issue FFS-julia#28 was closed.
Hello, for your case, I tried ArnoldiMethod.jl and get the output
julia> using ArnoldiMethod
julia> decomp, history = partialschur(-mat(h),nev=10,which=:SR)
julia> decomp.eigenvalues
10-element Vector{ComplexF64}:
-16.000000000000053 + 2.6842207305417474e-16im
-16.00000000000003 - 6.6951290300828266e-18im
-14.000000000000016 + 1.3094008837548432e-15im
-14.000000000000012 + 2.78841710585368e-17im
-12.000000000000014 - 2.796888294211598e-17im
-12.000000000000005 + 7.040218273262716e-16im
-10.000000000000005 + 2.315044958024994e-16im
-9.999999999999998 + 1.5382714567093696e-17im
-8.000000000000004 - 2.1014552699603364e-16im
-8.000000000000002 + 1.5056230642491578e-17im
Is that what you want? @GiggleLiu
Hello, for your case, I tried ArnoldiMethod.jl and get the output
julia> using ArnoldiMethod julia> decomp, history = partialschur(-mat(h),nev=10,which=:SR) julia> decomp.eigenvalues 10-element Vector{ComplexF64}: -16.000000000000053 + 2.6842207305417474e-16im -16.00000000000003 - 6.6951290300828266e-18im -14.000000000000016 + 1.3094008837548432e-15im -14.000000000000012 + 2.78841710585368e-17im -12.000000000000014 - 2.796888294211598e-17im -12.000000000000005 + 7.040218273262716e-16im -10.000000000000005 + 2.315044958024994e-16im -9.999999999999998 + 1.5382714567093696e-17im -8.000000000000004 - 2.1014552699603364e-16im -8.000000000000002 + 1.5056230642491578e-17im
Is that what you want? @GiggleLiu
It seems not all minimum eigenvalues are resolved. There should be a 4 fold degeneracy.
Hello, for your case, I tried ArnoldiMethod.jl and get the output
julia> using ArnoldiMethod julia> decomp, history = partialschur(-mat(h),nev=10,which=:SR) julia> decomp.eigenvalues 10-element Vector{ComplexF64}: -16.000000000000053 + 2.6842207305417474e-16im -16.00000000000003 - 6.6951290300828266e-18im -14.000000000000016 + 1.3094008837548432e-15im -14.000000000000012 + 2.78841710585368e-17im -12.000000000000014 - 2.796888294211598e-17im -12.000000000000005 + 7.040218273262716e-16im -10.000000000000005 + 2.315044958024994e-16im -9.999999999999998 + 1.5382714567093696e-17im -8.000000000000004 - 2.1014552699603364e-16im -8.000000000000002 + 1.5056230642491578e-17im
Is that what you want? @GiggleLiu
It seems not all minimum eigenvalues are resolved. There should be a 4 fold degeneracy.
giving a smaller tolerance seems to fix that, the default tolerance is sqrt(eps(Float64))
julia> decomp, history = partialschur(-mat(h),nev=10,which=:SR,tol=eps(Float64))
julia> decomp.eigenvalues
10-element Vector{ComplexF64}:
-16.000000000000057 + 9.443067557412728e-16im
-16.000000000000025 - 8.669250062378378e-16im
-15.999999999999991 + 9.371613795987999e-17im
-15.999999999999973 + 2.1420403513366442e-16im
-14.000000000000103 + 8.87374359267708e-16im
-14.000000000000096 - 3.807368843242745e-15im
-14.000000000000094 - 1.8643396423708125e-15im
-14.000000000000009 - 1.6927771517392586e-16im
-13.99999999999999 - 1.6784039256327937e-15im
-12.000000000000073 + 7.913181027740124e-16im
Oops, degeneracy around -14
seems weird...
Krylovkit.jl also works well at small tolerance. However, we see instability in the first excited states. I agree block lanczos is neccessary.
julia> using KrylovKit
julia> eigsolve(-mat(h), 10, :SR,tol=eps(Float64))[1]
12-element Vector{Float64}:
-16.000000000000014
-16.000000000000007
-15.99999999999999
-15.999999999999979
-14.000000000000057
-14.000000000000027
-14.000000000000023
-14.000000000000014
-14.000000000000007
-14.000000000000007
-13.999999999999988
-13.999999999999961
I used the following code for demonstrating the 4-fold degeneracy of toric code model, without success. I leave an issue here so that someone (including me) could inspect it in the future.
I got the following output:
I hope block Lanczos could be supported in the future so that degeneracies could be resolved correctly. For someone who might be interested in implementing this, please check: