ITensorTDVP.jl icon indicating copy to clipboard operation
ITensorTDVP.jl copied to clipboard

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

Open noh827 opened this issue 1 year ago • 1 comments

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.

noh827 avatar May 06 '24 02:05 noh827

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 avatar May 06 '24 02:05 mtfishman