ITensorNetworks.jl icon indicating copy to clipboard operation
ITensorNetworks.jl copied to clipboard

Define `tree_orthogonalize(tn::ITensorNetwork, vertex[, distance=nv(tn)])`

Open mtfishman opened this issue 3 years ago • 1 comments

Define tree_orthogonalize(tn::ITensorNetwork, vertex[, distance=nv(tn)]) for performing a tree orthogonalization of a tensor network, as defined in Section II C and Fig. 3 of https://arxiv.org/abs/2206.07044 (referred to as the tree gauge in that reference). This would create a spanning tree of the tensor network with a source node/vertex vertex and orthogonalize the resulting tree using QR/SVD towards that source vertex.

distance would define a neighborhood around the source vertex, which could be implemented using Graphs.neighborhood(tn, vertex, distance).

Note that this is already used within the apply/tebd function when ortho=true, but it doesn't currently support an optional distance, so implicitly orthogonalizes all tensors in the network which isn't necessary in general. See the implementation here: https://github.com/mtfishman/ITensorNetworks.jl/blob/4c108fe34cdf6135ca4ecb2a8d7fa747d1ca9c1e/src/abstractitensornetwork.jl#L368

Also, some options should be given for creating the spanning tree which may take into account the bond dimensions as weights, or passing a custom spanning tree function.

mtfishman avatar Nov 06 '22 17:11 mtfishman

See Issue here: @mtfishman/. I think if we can import the shortest path algorithms for graphs.jl to NamedGraphs.jl then we can easily create a function which creates the subgraph of a graph centered on some path distance r from a source_vertex. If this function can be wrapped onto a ITensorNetwork then it should be easy to add an argument to orthogonalize! which includes the distance as above.

JoeyT1994 avatar Nov 25 '22 21:11 JoeyT1994