Skip to content
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

Sparse diagonalization methods for getting the relevant spectrum of the projected Hamiltonian? #38

Open
noh827 opened this issue May 6, 2024 · 1 comment

Comments

@noh827
Copy link

noh827 commented May 6, 2024

I’ve understood that a dense/exact diagonalization method (e.g., LinearAlgebra.jl's eigen()) is currently used for diagonalizing projected Hamiltonians during the sweeps (please correct me if I’m wrong). If this is the case, I'm curious if sparse diagonalization methods are already available (or easy to be implemented) as an alternative method for this step. Is this something that has been discussed?

At glance, it seems that DMRG implementation has an argument like solver_krylovdim, suggesting it might work with sparse diagonalization methods. I wonder if the same is true for DMRG-X as well, and if not whether we can implement this as an option.

@mtfishman
Copy link
Member

mtfishman commented May 6, 2024

That's correct, it just uses a dense diagonalization right now. I would say that my goal for dmrg_x was to present the simplest demonstration of a standard method, and not provide an extensive suite of DMRG-X-like algorithms (of which there are a surprising number of variants).

So my recommendation would be to look at how dmrg_x is implemented, which is very simple: https://github.com/ITensor/ITensorTDVP.jl/blob/46695737f57317d49e46a2e8c800cfb7228df0fc/src/dmrg_x.jl, and try out other variants yourself. Feel free to share an example/PR to discuss as an alternative implementation.

As for using a Krylov solver in particular, for this variant of DMRG-X where you try to find a state with the highest overlap with the previous state, I don't think there is a Krylov method for doing that directly. However, some kind of Krylov method could be used to target a certain energy, however I believe the energy targeting method is not as good (I think I read it causes the eigenstate to drift over the course of DMRG sweeps). EDIT: Something you could maybe do is use a shift-and-invert method to target eigenstates with energies close to the previous one and then choose the one with a maximal overlap with the previous state, if that was implemented in a simple and reliable way I could imagine that replacing the current full diagonalization implementation.

@mtfishman mtfishman transferred this issue from ITensor/ITensorTDVP.jl Oct 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants