# MPS with different QN

+1 vote
asked

Is it possible to define an MPS with different quantum number on difference sites? For example if I want the particle numbers in every 2 sites conserved. I know that one way to do it is to define dummy quantum numbers by giving only the value zero, but this will make each tensor having many quantum numbers, most are dummy except one. Is there a better way to do it?

## 2 Answers

+1 vote
answered by (11.1k points)

At least in the Julia version it is pretty simple:

using ITensors

N = 10

space_odd = [QN("Podd", 0, 2) => 1, QN("Podd", 1, 2) => 1]
space_even = [QN("Peven", 0, 2) => 1, QN("Peven", 1, 2) => 1]
index_space(n) = isodd(n) ? space_odd : space_even
s = [Index(index_space(n), "Qubit,n=\$n") for n in 1:N]

# Alternatively using siteinds
#s_odd = siteinds("Qubit", N÷2; conserve_parity=true, qnname_parity="Podd")
#s_even = siteinds("Qubit", N÷2; conserve_parity=true, qnname_parity="Peven")
#s = collect(Iterators.flatten(zip(s_odd, s_even)))

state_odd = [isodd(n) ? 1 : 2 for n in 1:N÷2]
state_even = [isodd(n) ? 1 : 2 for n in 1:N÷2]
psi0 = productMPS(s, collect(Iterators.flatten(zip(state_odd, state_even))))

function random_gate(s, i, j)
return randomITensor(dag(s[i]), dag(s[j]), s[i]', s[j]')
end

rg = [random_gate(s, i, j) for i in 1:N, j in 1:N]
g1 = [rg[n, n+1] for n in 1:N-1]
g = copy(g1)
nlayers = 8
for _ in 1:nlayers
append!(g, g1)
end
psi = apply(g, psi0)


I showed the custom one first to show you that you can really generalize the QNs however you want to, the siteinds version is basically doing the same thing internally but with some hardcoded options for the QNs.

+1 vote
answered by (55.1k points)

Hi Chia Min,
Not sure if this exactly gets to your question, but have you seen this example of mixing two different site types in ITensor?
http://itensor.org/docs.cgi?vers=cppv3&page=formulas/gs_holst_polaron

In version 3 of ITensor, the quantum numbers on different sites no longer have to be the same at all. For example, if one of the sites has a quantum number "N" and the other one "Sz", then it's fine if the one with "N" does not define the quantum number "Sz" on that site. When the QNs get added together later on inside the library, it figures out for you that if "Sz" is missing, just to treat it as zero.

Hope that helps or please comment below if you still have a question about this capability -

Miles

commented by (550 points)
Thanks Miles. I think this is exactly what I was looking for. Fantastic.