-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request: block lanczos for solving degenerate ground states #87
Comments
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 |
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 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 |
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:
The text was updated successfully, but these errors were encountered: