-
Notifications
You must be signed in to change notification settings - Fork 13
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
Add full update algorithm #106
base: master
Are you sure you want to change the base?
Conversation
Some recent design thoughts inspired by YASTN: The FU consists of two parts - updating the two tensors connected to a bond, and then updating the surrounding CTM tensors. When updating the two tensors, there can be multiple ways to build the environment around the bond (called the "bond metric" in YASTN). The usual FU use the CTM tensors as the environment, but there is a cheaper method (but still more accurate than SU) called the Neighboring Tensor Update (NTU). There, the bond metric is the exact contraction of a few neighboring tensors, like:
or approximate contraction (using boundary MPS approach) of a relatively larger portion of the network around the bond, like:
There is a large family of such of bond metrics in the YASTN documentation. Thus we may need to write the first part of FU in a more general manner that accepts different kinds of bond metrics, in preparation of adding NTU in the future. |
It might already be possible to achieve something like this by simply restricting the number of iterations in the CTMRG contraction. This is definitely not fully equivalent, so I agree that it would be beneficial to have an abstraction to allow different algorithms there. |
I've recently implemented NTU with a few choices of the bond metrics (NN, NNN and NNN+; these are evaluated exactly without any approximation), but some metrics in YASTN is a bit difficult to be rewritten in TensorKit. In some simple cases (such as the Heisenberg model, 2 x 2 unit cell, D = 4) it even performs better than current version of FU, possibly because the exactness of the simple metrics. I'll open a separate PR for NTU after the packages have been updated to work with latest TensorKit (#119), and return to the FU after NTU has been perfected. |
This PR adds the core part of the fast full update (arXiv 1503.05345) algorithm. Compared to simple update, the environment around a bond to be updated is more accurately represented by the CTM tensors, instead of diagonal weight matrices.
Limitations:
Things to do before merging: