How to implement boundary pinning field in iDMRG appropriately?

How do I use this algorithm? What does that parameter do?
Post Reply
lww
Posts: 10
Joined: 09 Jan 2019, 13:27

How to implement boundary pinning field in iDMRG appropriately?

Post by lww »

I need to create edge quasiparticles at both ends of the (infinite) cylinder geometry, to access topological sectors (with a little higher energy) unreachable via usual random initial states.

I am not quite sure as of the standard way to do pinning in DMRG. Do I have to initialize an Engine and perform several sweeps with perturbed model to keep pinning fields at both ends, and then use Engine.init_env(original_model) to converge to the GS? Or I can just initialize MPS using perturbed model and then start an new engine with original model, as is done in tenpy/examples/xxz_groundstate.py?
User avatar
Johannes
Site Admin
Posts: 413
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: How to implement boundary pinning field in iDMRG appropriately?

Post by Johannes »

In iDMRG, the iMPS unit cell is the central part of a growing environment on the left and right. The idea of the Engine.init_env() is to re-use the environment (and state) from a previous run. If the state has a sufficiently large correlation length, the environmnet "pins" DMRG to find the same state during the update step e.g. when you have spontaneous symmetry breaking or topological order. Hence, the init_env allows to "smoothly" follow the change of the (bulk) groundstate with modified model parameters, by keeping the environment from previous runs.

lww wrote: 22 Mar 2019, 06:51 Do I have to initialize an Engine and perform several sweeps with perturbed model to keep pinning fields at both ends, and then use Engine.init_env(original_model) to converge to the GS?
I'm not 100% sure what you understand under the "boundary pinnning", but I think, this is what you want.
lww wrote: 22 Mar 2019, 06:51 Or I can just initialize MPS using perturbed model and then start an new engine with original model, as is done in tenpy/examples/xxz_groundstate.py?
If you start a new engine, the only "bias" you have for e.g. spontaneous symmetry breaking is the initial state.
You can use that as well to "pin" the state for (infinite) DMRG with the dmrg parameter "start_env", as this also initializes the environment with the given state. However, for an initial state with large correlation length, re-using the environments (with init_env() is a little bit more effective - you would need to do a lot of "start_env" sweeps to converge the environments.
lww
Posts: 10
Joined: 09 Jan 2019, 13:27

Re: How to implement boundary pinning field in iDMRG appropriately?

Post by lww »

Thank you for your instant reply! :D

Specifically, I want to obtain the complete set of ground states in 2D following the route in this paper: https://arxiv.org/abs/1309.5669. The authors obtained \(\psi_0\) with conventional DMRG and found \(\psi_\nu\) with an anyon line threaded in by pinning one site at both ends. I'm not sure if I understood it correctly, and I'm also not so familiar as how to implement it in iDMRG to obtain GS like \(\psi_\nu\).
Post Reply