Twisted Boundary Conditions for a CouplingMPOModel

How do I use this algorithm? What does that parameter do?
Post Reply
bart
Posts: 26
Joined: 23 Jan 2019, 09:35

Twisted Boundary Conditions for a CouplingMPOModel

Post by bart »

I would like to plot spectral flow plots similar to Fig.2.b)/d) of this paper https://arxiv.org/abs/1407.6985
Fig2.png
Fig2.png (93.16 KiB) Viewed 4360 times
Quote about implementation of Fig.2.b)/d) from the paper:
The flux \(\Phi_y\) threading through the cylinder is implemented in the MPO Hamiltonian by twisting the boundary conditions such that the electrons pick up a phase \(e^{\mathrm{i}\Phi_y}\) when circling around the cylinder.
Since I am using the FermionicHubbardModel(CouplingMPOModel), I was wondering about the best practice for implementing twisted boundary conditions like this in TeNPy.

I can't seem to find anything about boundary conditions around the circumference of a cylinder in the TeNPy source code, apart from...

-- bc_shift from lattice.py
-- bc_coupling in the CouplingModel class of model.py

...but I don't think that this is what am I after :cry:

What is the recommended way to implement twisted boundary conditions with a CouplingMPOModel?
Leon
Posts: 13
Joined: 23 Jul 2018, 09:08
Location: University of Kent

Re: Twisted Boundary Conditions for a CouplingMPOModel

Post by Leon »

For the paper you cite, an older version of TenPy was used. The external flux was implemented by defining an additional phase factor

Code: Select all

np.exp(1j*2*np.pi*phi_ext)
on one hopping term around the cylinder (i.e., collecting all flux on a single bond).

This might still be the way to go in the current TenPy; I am sure Johannes can give some advice.
User avatar
Johannes
Site Admin
Posts: 413
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Twisted Boundary Conditions for a CouplingMPOModel

Post by Johannes »

Yes, as Leon pointed out, you need to modify the prefactor for the hopping constants, such that an electron picks up a phase when going around the cylinder. This can be done by providing a (numpy) array instead of just a scalar as parameter.

Another very important thing here is to "reuse" the previous results of DMRG runs, in particular the environments.
This requires to explicitly initialize a DMRG Engine instead instead of just calling DMRG.run.
I'm currently working on examples for this and will shortly provide updates :)
lww
Posts: 10
Joined: 09 Jan 2019, 13:27

Re: Twisted Boundary Conditions for a CouplingMPOModel

Post by lww »

I performed charge pumping by gradually adding twisted phase as required and using previously obtained GS as initial state in the next run, and the change ratio of averaged charge was unreasonably larger than expected. How should I do about the environments to get right results? Thanks!

Update: Problem solved.
Post Reply