Hi Junsen,

Thanks for the question. Based on your other questions, I believe you're using the Julia version of ITensor, though conserving two (or more) U(1) symmetries is straightforward to do in both versions of ITensor.

Actually by default the "Electron" site type, which is the type used by the Hubbard model, will conserve two different U(1) symmetries when you set conserve*qns=true in the function siteinds("Electron",N;conserve*qns=true). These two QNs will be the charge ("Nf") and z-component of spin ("Sz") quantum numbers which are both U(1) symmetries.

More generally you can conserve up to four different Abelian quantum numbers by defining a QN object with various "slots" with unique names and QN values. By default all of the "slots" are U(1) quantum numbers obeying regular addition rules. But optionally you can specify a modulus such as 2 or 3 to make quantum numbers obey Z*2 or Z*3 etc. addition rules.

But anyway, based on your question it sounds like the "Electron" site type with conserve_qns=true may already give what you want.

If not, or if you're not sure or have more questions, can you explain more about the precise quantum numbers you are trying to conserve, what values they take on a single site and what names you'd prefer them to have?

Miles