Translationally invariant simulation of XXZ
Posted: 11 May 2023, 21:37
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:
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:
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.
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"})
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()
(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.