Finite Temperature for canonical ensembles

I am currently working on numerically calculating the effects of temperature in my system. I am currently testing my routine on a Bose-Hubbard chain. I am starting by encoding a purified maximally entangle state and running imaginary TEBD to get to the temperature I desire. It is working well, but this routine does not enforce total number conservation. Is there a way to impose this condition in iTensor.jl ?

The purification approach does not very naturally lead to a fixed particle number ensemble. Even if you use QN-conserving tensors, which you can and which ITensor offers, the usual purification approach computes properties in the ‘canonical ensemble’ which includes all different particle number sections for the “system” or “physical” sites of the purification.

There are some works proposing modifications to purification to work with fixed total particle number, but I have not tried them so can’t be too sure how well they work or not. I believe one such paper is this one:
https://journals.aps.org/prb/abstract/10.1103/PhysRevB.93.045137
And you may find 1 or 2 others.

The METTS algorithm, on the other hand, can be run in a way that conserves total particle number. So you might want to consider that.

Also keep in mind that for large enough systems, local properties of the particle-number conserving and non-particle-number-conserving ensembles are indistinguishable.

I think a similar idea to that paper is also discussed into the paper I was looking into: https://journals.aps.org/prb/pdf/10.1103/PhysRevB.94.115157 . Interestingly, this paper is also referenced in the TenPy coding.

As it was also explained in that paper, I reverted to just naively creating bosons on my ancilla-physical rungs. It seems to work for the 1D chain, but trying it on more involved systems like on a ladder with 6 total sites gives me wrong results. I suspect this is now a problem with TEBD trotterising over too many tensors/sites, but I would be glad to be wrong.

As for the METTS algorithm, is there any protocol in ITensor.jl that would be applicable to bosonic statistics?

Sorry to have missed your question. The METTS algorithm should be immediately applicable to bosons or bosonic statistics without needing any special changes. (I wouldn’t say this is about a protocol in ITensor, but rather just a fact about METTS and tensor networks for bosonic degrees of freedom.) Let me know if you have a more specific question about METTS for this case.