Purification for Finite Temperature Simulations

How do I use this algorithm? What does that parameter do?
Post Reply
nnit
Posts: 4
Joined: 12 May 2023, 08:44

Purification for Finite Temperature Simulations

Post by nnit »

Hi everyone,

I am currently working on finite temperature simulations using the purification approach in TeNPy. I have tried both the applyMPO and TEBD algorithms to perform imaginary time evolution on a purified MPS and I have some questions.

1) I didn't quite get the following line in 'II'-order approximation for applyMPO in the purification.py example:

Python: Select all

Us = [M.H_MPO.make_U(-d * dt, approx) for d in [0.5 + 0.5j, 0.5 - 0.5j]]
Why do we assume these values for the coefficient d?

2) As reported in a previous post:
viewtopic.php?p=577&hilit=how+to+define ... emble#p577
I noticed that the TEBD algorithm has some problems with particle conservation with MPS from_infiniteT_canonical, while with the PurificationApplyMPO algorithm everything looks fine. Did you understand which could be the source of this O(dt) error? Do you suggest me to use only the applyMPO method if I am interested in conservation of some quantities?

3) I tried to insert the options 'chi_list' and 'min_sweeps' in the options list for PurificationApplyMPO simulations, but the simulations finishes after a maximum of only 3 steps and I don't understand why. Did I do something wrong or these options are not implemented yet?

4) I tried also some iMPS simulations. By using TEBD I obtain the following error:

Python: Select all

NotImplementedError: Use DMRG instead...
while PurificationApplyMPO works also for iMPS. Is this a limitation of the TEBD algorithm, or is it simply not yet implemented for iMPS in TeNPy?

Thank you in advance for your help.
User avatar
Johannes
Site Admin
Posts: 456
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Purification for Finite Temperature Simulations

Post by Johannes »

1) these `d` are the time steps for the time evolution that give you a second-order instead of first-order precision by canceling the error terms of O(dt^2).

2) The the new post in that topic. As I said there, it's fixed if you call psi.canonical_form() once more (at least for finite systems).
Fix is PR #414.

3) chi_list is in principle implemented in VariationalApplyMPO, which PurificationApplyMPO is derived from - but it probably doesn't do what you might expect?
It's increasing the chi as a function of the sweep number within each eng.run() e.g here in the purification.py example, which evolves by just a single time step!
That's usually a bad idea to first truncate the already evolved state to something smaller just to re-increase it again in more additional sweeps.
Similarly, `min_sweeps` should work, but again applies to each of the eng.run() updates - it's not saying how many time steps you do in the outer loop, which you might be thinking about?

4) This comes from the TEBD class, where imaginary TEBD is usually used to get ground states, and DMRG is much better at this.
It's the same issue 2) is talking about that I wanted to avoid here.
nnit
Posts: 4
Joined: 12 May 2023, 08:44

Re: Purification for Finite Temperature Simulations

Post by nnit »

Thank you very much for your quick reply and your explanations.
Regarding point 3, Yes I had something different in mind.
If now I understand correctly, the chi_list option acts over the entire loop of temperatures, and I can change the bond dimension after a certain number of dt steps. Is my understanding correct?
Thank you again
Post Reply