It’s a system where magnetic properties emerge due to spontaneous symmetry breaking. However, when setting the spin quantum number Sz=0, it gets trapped in a local minimum, resulting in much worse outcomes compared to when quantum numbers are not used.
If it is getting trapped in a local minimum, you may need to try using a different initialization for the state. Some things that can help are setting the parameters of the Hamiltonian to a phase that is easier for VUMPS to find and then rerunning VUMPS as you tune the parameters towards the parameters you are interested in, running imaginary time TEBD to project towards the ground state and using that state to initialize VUMPS, or starting with a random state with a finite bond dimension (say by applying random unitaries to a product state, again using TEBD).
The process of. creating a TEBD state seems complex, so I chose an alternative workaround. (Because it is 2D system). I created a finite MPS with quantum numbers at random and attempted to convert it to an infinite MPS, increasing the initial bond dimension for the calculation. However, an issue arises in the infinitemps_approx function. The error message is as follows.
function initstate(n; N_a1=1, N_a2=2)
x = div(n-1, 2*N_a2) + 1
y = (n-1) % (2*N_a2) + 1
return iseven(x + y) ? "↑" : "↓"
end
SiteType="Electron"
N_site=8
s = siteinds(SiteType, 3*N_site, conserve_qns=true)
linkdims = [ 50 for n = 1:3*N_site-1 ]
st = [ initstate(n) for n = 1:3*N_site ]
autoMPS = random_mps(s, st ; linkdims = linkdims)
NR = [ N_site + n for n = 1:N_site]
ψ = infinitemps_approx(autoMPS; nrange=NR, nsites=N_site, nsweeps=2)
ERROR: LoadError: Attempting to contract IndexSet:
…
with IndexSet:
…
QN indices must have opposite direction to contract, but indices:
…
do not have opposite directions.
In principle that is a good idea, though the infinitemps_approx is pretty experimental right now and hasn’t been properly maintained, and as you can see probably has some bugs. I wrote it when I was initially writing the package in order to be able to test out VUMPS against DMRG results but haven’t had a chance to update it properly.
So far, I’ve checked that using the quantum number causes an issue with SVD. The functions right_orthogonalize, right_orthogonalize_polar, and mixed_canonical in orthogonalize.jl use polar function. However, when the polar function in .julia/packages/ITensors/FpnkY/src/tensor_operations/matrix_decomposition.jl is called, svd function gives error.