I had some problems with implementing my own model. The Hamiltonian I want do analyze with DMRG is
\(
\begin{equation}
H= \sum_{i,l}(-t\, c^\dagger_{i+1,l}c_{i,\bar{l}}+i\,s_l \,t \,c^\dagger_{i+1,l}c_{i,l}+ H.c.)+\sum_{i,l} \frac{\Delta \epsilon}{2}s_l n_{i,l}+\sum_{i,l} \frac{V}{2}n_{i,l} n_{i,\bar{l}}
\end{equation}
\)
where l={u,d} represents the rung of the ladder, and \(s_u=1 \) and \(s_d=-1 \). c are fermionic creation and annihilation operators. In the first term, if l=u, \(\bar{l}=d\) and vice versa, so there are hoppings between different rungs. For more information see this paper https://www.researchgate.net/publicatio ... gures?lo=1.
Since we have a spatial index i and the binary index l, I chose to build the model with the prebuilt class Ladder and FermionSite. Here is the code
Code: Select all
import matplotlib.pyplot as plt
import numpy as np
import tenpy.linalg.np_conserved as npc
from tenpy.networks.site import FermionSite
from tenpy.models.model import CouplingModel, MPOModel, CouplingMPOModel
from tenpy.models.lattice import Ladder
from tenpy.tools.params import get_parameter
import cmath
class CreutzHubbardLadder(CouplingModel,MPOModel):
def __init__(self,model_params):
name="creutz"
L=get_parameter(model_params,'L',2,name)
t=get_parameter(model_params,'t',1.,name)
V=get_parameter(model_params,'V',1.,name)
e=get_parameter(model_params,'e',1.,name)
n=get_parameter(model_params,'n',0.5,name)
bc_MPS=get_parameter(model_params,'bc_MPS','finite',name)
site= FermionSite(None,filling=n)
bc='periodic' if bc_MPS=='infinite' else 'open'
lat=Ladder(L,site,bc=bc,bc_MPS=bc_MPS) #not sure mit bc und bc_MPS
CouplingModel.__init__(self, lat)
self.add_coupling(-t,0,'Cd',1,'C',-1,'JW', True) #term1.1
self.add_coupling(-np.conj(t),1,'Cd',0,'C',1,'JW', True) #h.c. term
self.add_coupling(-t,1,'Cd',0,'C',-1,'JW', True) #term1.2 PROBLEM!
self.add_coupling(-np.conj(t),0,'Cd',0,'C',1,'JW', True) #h.c. term
self.add_coupling(t*1j,1,'Cd',1,'C',-1,'JW', True) #term2.1
self.add_coupling(np.conj(t*1j),1,'Cd',1,'C',1,'JW', True) #h.c. term
self.add_coupling(-t*1j,0,'Cd',0,'C',-1,'JW', True) #term2.2
self.add_coupling(-np.conj(t*1j),0,'Cd',0,'C',1,'JW', True) #h.c. term
self.add_coupling(V/2,0,'N',1,'N',0) #onsite interactions
self.add_coupling(V/2,1,'N',0,'N',0)
self.add_onsite(-e/2,0,'N')
self.add_onsite(e/2,1,'N') #onsiteterms
MPOModel.__init__(self,lat,self.calc_H_MPO())
Now I have the following question:
1. Is the Ladder automatically mapped to a 1d-chain as shown in https://github.com/tenpy/tenpy/blob/mas ... Ladder.pdf. If so, is the problem that the term 1.2. connects site 0 and 3 and 2,5...?
2. Can the Hubbard-like interactions be implemented \( \sum_{i,l} \frac{V}{2}n_{i,l} n_{i,\bar{l}} \) as I did it?
I hope there is some obvious mistake in my thinking.
Thanks for your help
Lukas