I am doing calculations for XXX chains for which total magnetization is conserved. I need data till large times and to speed up the calculation, I am thinking of exploiting the quantum number conservation. I was trying to implement the calculation in C++ version of the iTensor. The application of the raising and lowering operator here in the calculation changes the QN number block and I guess we can not apply the operator/MPOâ€™s which changes the quantum number block to the states defined over site set with conserved quantum number in general.

My question is whether is there a way to calculate the above-mentioned correlator in the Quantum number conservation framework.

I think I see what youâ€™re asking. Actually, it is totally ok to apply operators which change the total quantum number (QN) of a state when using the QN-conserving mode of ITensor.

The thing which is not allowed is to create or use operators which do not change the QN in a â€śwell definedâ€ť way (I can say more below). However, the operators \sigma^+ and \sigma^- do change the QN in a well-defined way so it is ok to use those. Please try it and it should work the same as for the non-QN-conserving case.

About the idea of â€śwell definedâ€ť, what we mean is that an operator should always change the QN of a state it acts on by the same amount. So \sigma^+ \ket{\psi} = \ket{\psi'} always outputs a state \ket{\psi'} whose magnetization is one higher than \ket{\psi}. But on the other hand, if we applied \sigma^x\ket{\psi}, that would output a state which is a sum of one term with higher magnetization and another term with lower magnetization. So \sigma^x does not change the QN in a well defined way. The term we use is that \sigma^+ has a well-defined QN flux (is â€śequivariantâ€ť i.e. transforms as an irrep of U(1)) while \sigma^x does not (is a sum of operators transforming under different irreps of U(1)).