As I do the Trotter evolution under the Heisenberg Hamiltonian, I know that the total \langle Sz \rangle should be conserved. However, presumably due to insufficient bond dimension, as the evolution time progresses, if I track the total \langle Sz \rangle it begins to deviate significantly, showing the truncation of singular values is causing the QN to be non-conserved? As I am starting from a randomMPS, I am unable to use the QN conserving MPS to automatically keep this constraint.
My question is that given the initial conditions, I know what the total \langle Sz \rangle should remain at, is there a way I can âcorrectâ the MPS after each Trotter step to keep the total \langle Sz \rangle fixed, and make the MPS evolution more physical?
I should say, though, that this constructor uses an algorithm which could be a little better. Given a state array that defines an initial product state, it generates a circuit of random, but QN-conserving, unitaries and applies them in a âbrick wallâ pattern for enough layers until the bond dimension meets the requested value. The reason I say it could be a little better is that this approach does impose strictly finite-range correlations due to the âlight coneâ property of this circuit. In the future I plan to upgrade this code to use a different type of circuit that would cover more uniformly the space of all random MPS (still constrained by the QN conservation property).
But perhaps the above kind of random MPS will be random enough for your purposes?
Finally, to answer your original question, the way to correct the MPS to keep the total Sz fixed would, I think, be to project the MPS onto some desired total Sz value. I do know of some ways to do this but they are technical and complicated and havenât been published or described in the literature as far as I know. This capability is another thing that would nice to add to ITensor but we havenât had a big need for it yet.