Heisenberg model with just next-nearest-neighbor interaction

How do I use this algorithm? What does that parameter do?
Post Reply
hyang
Posts: 2
Joined: 16 Mar 2023, 17:38

Heisenberg model with just next-nearest-neighbor interaction

Post by hyang »

I want to consider model with sublattice A and B, but only interactions of AA BB ABA, when I test the Heisenberg model with next-nearest-neighbor interaction I found the result is not right.
My code is following:

Python: Select all

class Heisenberg(MultiCouplingModel, MPOModel):
    def __init__(self, model_params):
        #
        L = model_params.get('L', 10)
        self.bc_MPS=bc_MPS = model_params.get('bc_MPS', 'finite')
        bc='periodic' if bc_MPS=='infinite' else 'open'
        Heisenberg = site.SpinHalfSite(conserve='Sz')
        lat = Lattice([L],[Heisenberg],bc=bc,bc_MPS=bc_MPS)
        MultiCouplingModel.__init__(self, lat)
        #
        J = model_params.get('J', 1.)
        h = model_params.get('h', 0.)
        #self.add_coupling(J, 0,'Sz' ,0,'Sz',1)
        for i in range(L):
            if(i%2==0):
                self.add_local_term(J, [('Sz',[i,0]),( 'Sz', [i+2,0])])
                self.add_local_term(J*0.5, [('Sp',[i,0]),( 'Sm', [i+2,0])])
                self.add_local_term(J*0.5, [('Sm',[i,0]),( 'Sp', [i+2,0])])
        self.add_onsite(-h, 0,'Sz')
        MPOModel.__init__(self, lat, self.calc_H_MPO())

Python: Select all

H=Heisenberg({'L':L,'J':J,'h':h,'bc_MPS':'infinite'})
ni_state = []
for i in range(L):
    if(i%2==1):
        ini_state.append('up')
    else:
        ini_state.append('down')
sw_max=50
chi=100
dmrg_params = {'norm_tol': None,"trunc_params": {"chi_max":1000, "svd_min": 1.e-10}}
psi = MPS.from_product_state(H.lat.mps_sites(), ini_state, "infinite")
dmrg_params['trunc_params'] = {'chi_max': chi,'svd_min': 1.e-15}
dmrg_params['max_sweeps'] = sw_max
info = dmrg.run(psi, H, dmrg_params)
The result is wrong, becuase the correlation length is 0.
User avatar
Johannes
Site Admin
Posts: 456
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Heisenberg model with just next-nearest-neighbor interaction

Post by Johannes »

I'm not sure what you mean with "only interactions of AA BB ABA".

The way you define your model, if you consider the sites in a chain as A B A B ... you exclusively get the Heisenberg coupling between A-A sites only, nothing between B -B. Locally on B, you only have a Sz term, so there's nothing DMRG can do on B sites (since there's no off-diagonal terms!).

Also, DMRG actually does give you the correct state in this case, since you initialize the ABAB chain in a Neel state, so on A you're fully up spin polarized, which is a true eigenstate of the Heisenberg chain in that given charge sector - it's just the highest state possible (i.e. ground state of -H, up to a shift from the local field).

Also, note that you need the dmrg_params['mixer']=True, as you have next-nearest-neighbor interactions (in the original A B A B) chain.
Post Reply