## Bipartitioning infinite MPS into 2 semi-infinite chains

How do I use this algorithm? What does that parameter do?
jamarks
Posts: 1
Joined: 01 May 2020, 19:14

### Bipartitioning infinite MPS into 2 semi-infinite chains

I'm trying to compute the Resta Polarization of a Fermionic SSH chain according to the method described in https://arxiv.org/pdf/1810.07043.pdf equations 13-15. In particular, I need to compute 'particle imbalance' by partitioning the system into 2 semi-infinite chains, and tracing out one of these to get components of the reduced density matrix. When I use the

Code: Select all

get_rho_segment(, 1)
function, I end up getting a trivial 2x2 matrix, and I'm pretty sure I'm not accurately cutting the system into semi-infinite chains.

Does anyone know how to bipartition an infinite MPS into 2 semi-infinite chains so that I can compute the Resta polarization?

Thank you in advance for the help gunheepark0229
Posts: 7
Joined: 15 May 2020, 10:52

### Re: Bipartitioning infinite MPS into 2 semi-infinite chains

There is a relevant post here!

viewtopic.php?f=7&t=95

Johannes
Posts: 156
Joined: 21 Jul 2018, 12:52
Location: UC Berkeley

### Re: Bipartitioning infinite MPS into 2 semi-infinite chains

You want to cut the system into two halves, but get_rho_segment extracts the density matrix for the *few* sites you give as argument, so that's the wrong function.

The equations from the cited paper is really what's calculated by average_charge of the MPS (up to the prefactor constants, I believe), take a look at the (two-line) implementation of the function and probablity_per_charge.

Note that for infinite MPS this value is only defined modulo 1, i.e. 0.123 and 1.123 are equivalent: we need to subtract (somewhat) arbitrary integer numbers of charges to get a finite value.
However, adiabatically following the change of the value still makes sence, since then really you are interested in the *differences* of the charge values only - this is what's done in the paper.

The examples/chern_insulators/chiral_pi_flux.py make a similar "experiment" of flux pumping and following the value of the average charge, you can probably base your code on that example.