Sweeping algorithms for tree tensor networks #43
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Work in progress, a first working attempt at generalizing MPS sweeping algorithms to tensor networks on arbitrary tree geometries as defined in ITensorNetworks.jl. This relies on ITensor/ITensorNetworks.jl#18, which is also still a work in progress. All algorithms should just work with the current syntax for both
ITensors.MPS
andITensorNetworks.TreeTensorNetworksState
(except some of the newer additions which I haven't generalized yet).Aside from some patching to work with MPS and trees using a common interface, the main internal changes are how the sequence of update steps within an individual sweep is generated and how individual local updates are performed. The idea is that a sequence of
SweepStep
s is generated for the given geometry depending on the kind of sweeping being used (e.g. 1- or 2-site, reverse steps or not), where eachSweepStep
contains all the information needed for a single local update. This allows to split off the geometry-dependent part and adds flexibility in the sweeping sequences used. In addition, by treating each local update step in the same way we can use a single update routine for all local updates (whether it's a bond- or site-update, forwards or backwards evolution...) irrespective of what happens before or after in the sequence.There's still quite a few things to do, and I will keep updating this whenever I find the time.