Accessing zero-magnetization sector in Hamiltonian MPO

Hello, is there a way in ITensor to construct a Hamiltonian MPO in only the zero-magnetization sector? That is, not just specify conservation of qn, but work with an MPO consisting only of the reduced Hilbert space. For ex in the following Heisenberg spin-1/2 system can I access directly the reduced 2x2 sector only including basis states of equal number of spin up and spin down? Thanks!

let
    L=2;
    s = siteinds("S=1/2", L; conserve_qns=true)
    os = OpSum()
    for i in 1:L_tot-1
        os .+= (1, "Sz",i,"Sz",(i+1))
        os .+= (0.5, "S+",i,"S-",(i+1))
        os .+= (0.5, "S-",i,"S+",(i+1))
    end
    H = MPO(os,s)

    Hitensor = ITensor(1.)
    for i = 1:L
        Hitensor *= H[i]
    end
    A=ITensors.Array(Hitensor, s',s)
    display(reshape(A,2^L,2^L))
end

I’m not sure of an easy way to do that. (If by “in ITensor” you mean, do we have a function you can call to do that, the answer is ‘no’.) It may be the kind of transformation of an MPO that one would need to develop a novel method to perform, and it’s also not totally clear to me that if one could perform it, that the MPO afterward would still have a small bond dimension. Basically I think this kind of thing might be more at the frontier of research and could require developing a new, currently unknown method.

1 Like

Ah okay understood! Thanks for the help!