@@ -17,32 +17,31 @@ $(TYPEDFIELDS)
1717 trscheme:: TruncationStrategy
1818end
1919
20- function changebonds(ψ:: InfiniteMPS , alg:: RandExpand )
21- T = eltype(ψ. AL)
22- AL′ = similar(ψ. AL)
23- AR′ = similar(ψ. AR, tensormaptype(spacetype(T), 1 , numind(T) - 1 , storagetype(T)))
24- for i in 1 : length(ψ)
25- # determine optimal expansion spaces around bond i
26- AC2 = randomize!(_transpose_front(ψ. AC[i]) * _transpose_tail(ψ. AR[i + 1 ]))
27-
28- # Use the nullspaces and SVD decomposition to determine the optimal expansion space
29- VL = left_null(ψ. AL[i])
30- VR = right_null!(_transpose_tail(ψ. AR[i + 1 ]))
31- intermediate = normalize!(adjoint(VL) * AC2 * adjoint(VR))
32- U, _, Vᴴ = svd_trunc!(intermediate; trunc = alg. trscheme, alg = alg. alg_svd)
20+ function changebonds!(ψ:: InfiniteMPS , alg:: RandExpand )
21+ AL′ = map(ψ. AL) do A
22+ # find random orthogonal vectors
23+ A_perp = randn!(similar(A))
24+ add!(A_perp, A * (A' * A_perp), -1)
25+ A′, _, _ = svd_trunc!(A_perp; alg = alg.alg_svd, trunc = alg.trscheme)
26+ return A′
27+ end
3328
34- AL′[i] = VL * U
35- AR′[i + 1 ] = Vᴴ * VR
29+ AR′ = map(ψ.AR) do A
30+ At = _transpose_tail(A)
31+ A_perp = randn!(similar(At))
32+ add!(A_perp, (A_perp * At' ) * At, - 1 )
33+ _, _, A′ = svd_trunc!(A_perp; alg = alg. alg_svd, trunc = alg. trscheme)
34+ return A′
3635 end
3736
38- return _expand(ψ, AL′, AR′)
37+ return _expand! (ψ, AL′, AR′)
3938end
4039
41- function changebonds(ψ:: MultilineMPS , alg:: RandExpand )
42- return Multiline(map(x -> changebonds(x, alg), ψ. data))
40+ function changebonds! (ψ:: MultilineMPS , alg:: RandExpand )
41+ return Multiline(map(x -> changebonds! (x, alg), ψ. data))
4342end
4443
45- changebonds(ψ:: AbstractFiniteMPS , alg:: RandExpand ) = changebonds!(copy(ψ), alg)
44+ changebonds(ψ:: AbstractMPS , alg:: RandExpand ) = changebonds!(copy(ψ), alg)
4645function changebonds!(ψ:: AbstractFiniteMPS , alg:: RandExpand )
4746 for i in 1 : (length(ψ) - 1 )
4847 AC2 = randomize!(_transpose_front(ψ. AC[i]) * _transpose_tail(ψ. AR[i + 1 ]))
0 commit comments