Since I currently do not have a fully general MPO construction method (which is beyond my knowledge), I use a pragmatic approach:
For sufficiently large finite systems, the bulk MPO constructed from ITensorMPS.jl becomes effectively translation invariant (at least in the models I have tested).
Therefore, I extract the central MPO tensor from a finite-size system and reuse it as the infinite MPO in iDMRG.
Environments are initialized via power iteration starting from the same finite-size MPO.
This seems to work for the models I have tested so far.
Hopefully this is useful to others.
Any comments, tests, or suggestions are very welcome.
In the early stages of my project, I used a similar approach, i.e., taking the central piece of the MPO generated by ITensor’s finite DMRG. This worked well for the toric code in one of my project, but it failed in another project involving the Heisenberg model with next nearest-neighbor interactions on a triangular lattice. The issue is that while the finite-state-machine construction in ITensor is translationally symmetric, ITensor may subsequently compress the MPO using MPS SVD compression algorithm, which can destroy the translational structure of the MPO.
For this reason, I think the best practice is still to construct the iMPO directly using the finite-state-machine algorithm. The algorithm is quite intuitive when spelled out on a piece of paper and is straightforward to implement. I’d be happy to explain it in more detail if you’re interested. You can also take a look at MPO_common.jl in my repository, where I implemented this construction. A related discussion for a finite MPO is MPO construction and compression principles (or: how does OpSum work?) - #4 by miles.
Thanks for your information and comments! I agree with you on the MPO part. I should be more careful here. I’m planning to incorporate this in the coming days.
The MPO constructor from ITensorMPS allows you to pass keyword cutoff to qn_svdMPO. Could you test with cutoff = -1.0 ? That should preserve all the singular values and avoid any compression.