Translationally invariant simulation of XXZ

How do I use this algorithm? What does that parameter do?
Post Reply
timperone
Posts: 1
Joined: 11 May 2023, 19:15

Translationally invariant simulation of XXZ

Post by timperone »

Hi. I've recently begun using TeNPy because it offered support for iMPS and methods to do a ground-state search on them.

My only goal is to be able to accurately simulate the ground state in the Sz=0 sector of the XXZ chain in a translationally-invariant representation (no boundary, no even-odd effects). I'm quite confused by the behavior of the library and any help would be very appreciated, thanks. :)

If you need more details about the tests I did let me know. My two main attempts have been the following:

(1) Ideally I would like to use:

Code: Select all

XXZChain({..., "L": 1, "bc_MPS": "infinite"})
With an initial state \(...\uparrow\downarrow\uparrow...+...\downarrow\uparrow\downarrow...\); trying this, I always get errors from both iTEBD and single-site iDMRG. The state was implemented as follows:

Code: Select all

X = np.zeros([2,2,2])
X[0,0,1],X[1,1,0] = 1,1
psi = MPS.from_Bflat(sites,[X],bc='infinite')
psi.canonical_form_infinite2()
Here I'm using canonical_form_infinite2(), because canonical_form_infinite1() projects this to a product state for some reason.

(2) Another possibility would be to use L=2 in the iMPS and trying to prevent the two tensors from becoming too different from each-other. This is basically impossible to do with iDMRG, while iTEBD works fine, but ends up producing non-canonical states in the critical phase (psi.correlation_length() is absurdly high; using canonical_form() halves the link-dimension and breaks translational symmetry); iTEBD in the antiferromagnetic phase produces non-symmetric states.

Also it would be helpful if I were able to sum an infinite MPS with its translations, to easily produce translationally invariant states.
User avatar
Johannes
Site Admin
Posts: 428
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Translationally invariant simulation of XXZ

Post by Johannes »

When you have a perfect ground state degeneracy, DMRG is by definition allowed to give you any superposition (of the ground states) it wants, and it tends to break the translation invariance if it can.
The state you wrote down is what we call a "cat" state, because it is a global superposition of two states that don't have common Schmidt states - the MPS tensors are block-diagonal. As soon as you loose the perfect degeneracy between the two independent sectors (e.g. due to numerical floating point rounding errors...) and have significant trunctation, DMRG will select just one of them.
In general, you also want to avoid cat states in MPS/DMRG simulations, because they just require larger bond dimensions than keeping those states separate, making everything more expensive - it's cheaper to run two separte DMRG runs converging each of the symmetry-broken states in the cat state separately.

Why do you really need the explicitly translation invariant state in the first place?
It's easy to apply the translation operator to an iMPS (basically just call roll_mps_unit_cell) so if you really need it, you can regenerate a translation invariant state from the translationally broken one, but I wouldn't recommend this before you thought about the how and why. E.g. the addition of two MPS in block-diagonal fashion (which gives you such a cat state as you wrote it down) assumes that the Schmidt states are orthogonal.
Post Reply