implementing idrmg

I’m curious if there is any existing way of implementing iDRMG in the Julia version. If not, is there any smart way of approximately obtaining the result of an iDMRG run using the open boundary conditions algorithm?

I had thought that simply taking the MPS tensors in the middle of a large open chain would work, but running DMRG on some simple translation invariant Hamiltonians (e.g. the ZXZ chain) does not seem to produce ground-state MPS tensors which are translation invariant, even near the middle of the chain.

1 Like

Hi, yes so one can implement iDMRG using the ITensor Library, since it is a general purpose tensor library. Is your question whether an iDMRG code is currently available? We do have a prototype one available (actually the “VUMPS” algorithm which is a kind of improved iDMRG) through the ITensorInfiniteMPS.jl package, however that package is still under some development.

Regarding your other question, there are definitely some very good ways to obtain bulk properties (properties equivalent to infinite systems) using open-boundary, finite DMRG calculations. It seems you are asking for the MPS tensors themselves, but what do you need these for specifically? If you are trying to obtain a local property like the bulk magnetization or density then there are some really good ways to do this using finite DMRG that I could comment on more. If you are trying to use the bulk MPS tensors themselves to do something like compute the correlation length, however, then I’d agree that infinite MPS methods are a better way to go.

Yes — I was wondering if doing iDMRG was already supported with a built-in function, or whether I would need to code it myself. Thanks for the pointer to the new package! Still being somewhat of a newbie, I couldn’t quite tell how to call VUMPS from the source code — is it easy to give an example of how one might do so?

And that’s right, I am looking for the MPS tensors themselves: I am trying to apply a rather special type of translation-invariant quantum circuit to an SPT ground state, and imagined that this would be easier to do using the output of an iDRMG / VUMPS calculation, rather than applying the full circuit to a (large) finite-sized wavefunction.

Also, out of curiosity, why are the MPS tensors obtained from finite-size DMRG (apparently) often very far from being translation invariant, even deep in the bulk?

Thanks for the help!

That’s really helpful to know more about what you’re planning. Here are some thoughts:

  1. I believe the VUMPS examples in this folder https://github.com/ITensor/ITensorInfiniteMPS.jl/tree/main/examples/vumps are all or mostly all working, so you might be able to get going pretty quickly optimizing some infinite MPS that way. Please give it a try if you decide infinite MPS is the way to go (the main page of that code repo also shows you how you can install the package).

  2. for the project you describe, if it’s a simple enough 1D Hamiltonian, then you can actually treat some pretty huge sizes with finite DMRG. It’s not hard in practice to obtain great results for systems with hundreds of sites, again if the entanglement isn’t too bad. (So like a 1D spin chain, especially if it’s gapped, would be no problem here.) Also edges in SPTs can be pretty interesting as you likely know so it might be a chance to gain some more insight into the physics.

  3. the reason why the MPS tensors in finite-size DMRG aren’t themselves translation invariant is mainly that MPS have a very large “gauge” degree of freedom where you can redefine pairs of MPS tensors by sticking in a matrix and its inverse on one of the links, so like

A^{s_j} A^{s_{j+1}} = A^{s_j} X X^{-1} A^{s_{j+1}} = B^{s_j} B^{s_{j+1}}

where the A’s are two neighboring MPS tensors before the transformation and the B’s are after the transformation. Finite DMRG can generally mix up this gauge in a fairly arbitrary (though definitely not entirely arbitrary way, since it obeys a kind of left- or right-canonical form or constraint).

That being said, I believe there are methods nevertheless, or one could certainly imagine methods to extract translation invariant bulk tensors from a finite MPS. There is even a planned feature to do this in the ITensorInfiniteMPS package! (See this example code.) However, that particular feature is currently broken unfortunately. But maybe you could learn a bit about how it works and implement a similar idea?

1 Like

Hello Miles, could you comment on how to use finite DMRG to calculate local properties like the ones you mentioned? Thanks

I’m not sure which part you are asking about. Could you please post a new question asking with more details? If it’s about a code to work with infinite DMRG, right now we just have the ITensorInfiniteMPS.jl package linked above.

Hello Miles, I have a question concerning VUMPS. It is well known that iDMRG might get stuck in a local minima, especially for cases where there are long-range interactions (e.g., when treating 2d systems as quasi-1d). One solution to that is to add noise terms that account for long-range interactions missing from projection to 2 sites. I wonder whether VUMPS is completely free from this issue.

Please when asking a new question post it as a new topic, versus appending to different topics from a long period of time earlier. I just asked the person above also to please start a new topic.

We would be happy to answer your question then.