Hello,
I am wondering in general if we can limit the bond dimension of an MPO upon its construction. I am interested in this because my MPO currently takes up far too much memory to be used efficiently. I suspect the bond dimension of my MPO could be greatly reduced with little cost in accuracy.
Here is my code. I use Opsum to make my MPO. I put in a cutoff paramter, but it is unclear to me how well this is working and I would prefer to limit bond dimension by specifying the number of bonds I would like to keep.
os = OpSum()
for i in 1:N, j in 1:N
if t[i,j] == 0
continue
end
ops = Any[]
push!(ops, t[i,j])
push!(ops, "Cdag", i, "C", j)
os .+= Tuple(ops)
end
for i in 1:N, j in 1:N, k in 1:N, l in 1:N
if Γ_mat[idx2B[i,j],idx2B[k,l]] == 0
continue
end
ops = Any[]
#println(Γ[i,j,k,l])
push!(ops, Γ_mat[idx2B[i,j],idx2B[k,l]] * (1/4))
if i == j
continue # c†_i c†_i = 0
elseif k == l
continue # c_k c_k = 0
else
push!(ops, "Cdag", i, "Cdag", j, "C", l, "C", k)
end
os .+= Tuple(ops)
end
println("done")
H = MPO(os, sites; cutoff = 1e-15)