Skip to content

Add NTU bond environments #144

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

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

Yue-Zhengyuan
Copy link
Collaborator

@Yue-Zhengyuan Yue-Zhengyuan commented Feb 27, 2025

This PR adds the construction of bond environments using neighboring tensors and Schmidt weights of a bond. They are intended to be used in Neighborhood Tensor Update for InfiniteWeightPEPS. The code is adapted from YASTN, and I have put the credit in src/algorithms/contractions/bondenv/benv_ntu.jl.

TODO

  • The direction names t/l/b/r are directly borrowed from YASTN, and need to be changed to north, west, south, east to follow PEPSKit convention after everything else have been figured out.
  • Determine the best codomain/domain choice for the PEPSOrths (the X and Y tensors) that can reduce the number of permutes and twists.
  • enlarge_corner_se, enlarge_corner_nw may reuse functions in existing CTMRG code.

Copy link

codecov bot commented Feb 27, 2025

Codecov Report

Attention: Patch coverage is 88.77551% with 11 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/algorithms/contractions/bondenv/benv_tools.jl 81.66% 11 Missing ⚠️
Files with missing lines Coverage Δ
src/PEPSKit.jl 100.00% <ø> (ø)
src/algorithms/contractions/bondenv/benv_ntu.jl 100.00% <100.00%> (ø)
src/algorithms/contractions/bondenv/benv_tools.jl 81.66% <81.66%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Yue-Zhengyuan
Copy link
Collaborator Author

The NTU bondenvs can also be constructed for InfinitePEPS without Schmidt weights on bonds (this is the approach in YASTN). But I found that NTU works better (at least for Heisenberg model) if I include the weights. At $D = 4$ with NTUEnvNN, the NTU energy for InfinitePEPS is -0.66858; for InfiniteWeightPEPS it can be further improved a bit to -0.66885.

I think the reason is quite simple. For InfinitePEPS, the NTUEnvNN bondenv is (I only draw the ket layer without physical axes; the open ends are contracted with the bra layer)

            |   |
        ----T---T----
            |   |
    ---T---()   ()---T---
            |   |
        ----T---T----
            |   |

For InfiniteWeightPEPS with bond weights, the NTUEnvNN bondenv is (assume the weights have been absorbed into the tensors)

                |       |
                √λ      √λ
                |       |
        ---√λ---T-------T---√λ---
                |       |
    ---√λ---T---()      ()---T---√λ---
                |       |
        ---√λ---T-------T---√λ---
                |       |
                √λ      √λ
                |       |

So the bondenv has an additional circle of $\sqrt{\lambda}$'s, which is intuitively a more accurate than the bondenv for InfinitePEPS. This is why I modified the NTU in YASTN to work with InfiniteWeightPEPS instead of InfinitePEPS.

@Yue-Zhengyuan Yue-Zhengyuan marked this pull request as ready for review May 7, 2025 02:58
@Yue-Zhengyuan
Copy link
Collaborator Author

Edit: I'll soon add an option to control whether to further absorb the additional circle of weights when constructing the NTU bond environment.

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

Successfully merging this pull request may close these issues.

1 participant