Code: Select all
get_rho_segment([0], 1)
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
Code: Select all
get_rho_segment([0], 1)
0.123
and 1.123
are equivalent: we need to subtract (somewhat) arbitrary integer numbers of charges to get a finite value.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.chiral_pi_flux_charge_pump.pdf
, the equivalent of Fig. 4 in the paper you quote, and chiral_pi_flux_ent_spec_flow.pdf
, the equivalent of Fig. 8.P
from the paper is simply what's returned by average_charge.charge_sector=None
, but then the charge conservation should have no effect on the eigenvalues of the transfer matrix.Code: Select all
from tenpy.models.model import NearestNeighborModel, CouplingMPOModel
from tenpy.models.lattice import Site, Chain
from tenpy.networks.site import FermionSite, GroupedSite
class SSHIntModel(CouplingMPOModel):
def init_sites(self, model_params):
fs = FermionSite(conserve = 'N')
gs = GroupedSite([fs, fs], labels = ['A', 'B'], charges = 'drop')
gs.add_op('Sz', gs.NA - gs.NB, False)
return gs
def init_lattice(self, model_params):
bc_MPS = model_params.get('bc_MPS', 'infinite')
bc = 'periodic' if bc_MPS == 'infinite' else 'open'
nsys = model_params.get('nsys') if bc_MPS == 'finite' else 2
self.L = nsys
fs = self.init_sites(model_params)
lat = Chain(nsys, fs, bc=bc, bc_MPS=bc_MPS)
return lat
def init_terms(self, model_params):
J = model_params.get('J', 0.)
d = model_params.get('d', 1.)
tau = model_params.get('tau', 1.)
V = model_params.get('V', 0.)
dlt = model_params.get('dlt', 0.)
#### Staggered Onsite Potential ####
if dlt != 0.:
self.add_onsite(dlt, 0, 'Sz')
#### intracell hopping terms ####
self.add_onsite(-J, 0, 'CdA CB')
self.add_onsite(J, 0, 'CA CdB')
#### intercell hopping terms ####
hop_plus = (d + tau)/2.
self.add_coupling(-hop_plus, 0, 'CdB', 0, 'CA', [1])
self.add_coupling(-hop_plus, 0, 'CdA', 0, 'CB', [-1])
hop_minus = (d - tau)/2.
self.add_coupling(-hop_minus, 0, 'CdA', 0, 'CB', [1])
self.add_coupling(-hop_minus, 0, 'CdB', 0, 'CA', [-1])
#### interaction terms ####
if V != 0:
self.add_coupling(V, 0, 'NA', 0, 'NB', [1])
self.add_coupling(V, 0, 'NB', 0, 'NA', [1])
def get_sshint_model(model_params):
M = SSHIntModel(model_params)
return NearestNeighborModel.from_MPOModel(M)
"Adiabatically" implies that the time evolution is slow enough to always stay in the ground state of the system.arxiv 1810.07043, Sec. III a wrote: We define \(\theta = 2\pi t/T\), assume adiabaticity and work in the instantaneous eigenbasis of \(H(\theta)\). Hence, the charge transport becomes independent of the time scale \(T\).