Heisenberg XXZ chain with stagger interaction
Posted: 23 Jul 2021, 08:24
Hi, happy new day!
I try to use tenpy to calculate the entropy of Heisenberg XXZ chain (open boundary) with alternating interaction.
Hailtonian:\(H=\sum_{i=1}^{L} {J ( 1 + \gamma (-1)^{i} ) (S_{i}^{x} S_{i+1}^{x} + S_{i}^{y} S_{i+1}^{y} + J_{z} S_{i}^{z} S_{i+1}^{z})}\)
This is my program.
I find that when the anosptropic parameter J_{z} increases to more bigger value (e.g. J_{z}=3.4), an error will occur. Is this because my program parameter setting is wrong? Or is it because the symmetry of the system makes it impossible to find the correct ground state? What should I do?
Looking forward to your reply.
I try to use tenpy to calculate the entropy of Heisenberg XXZ chain (open boundary) with alternating interaction.
Hailtonian:\(H=\sum_{i=1}^{L} {J ( 1 + \gamma (-1)^{i} ) (S_{i}^{x} S_{i+1}^{x} + S_{i}^{y} S_{i+1}^{y} + J_{z} S_{i}^{z} S_{i+1}^{z})}\)
This is my program.
Code: Select all
from tenpy.models.lattice import Site, Chain
from tenpy.models.model import CouplingModel, MPOModel, CouplingMPOModel, NearestNeighborModel
from tenpy.tools.params import asConfig
from tenpy.networks.site import SpinHalfSite
from tenpy.linalg import np_conserved as npc
import numpy as np
from lattice import StaggerLadder
class StaggerLineModel(CouplingMPOModel):
def __init__(self, model_params={}):
model_params = asConfig(model_params, "StaggerLadderModel")
L = model_params.get('L', 4)
bc_MPS = model_params.get('bc_MPS', 'finite')
site = SpinHalfSite(conserve=None)
bc = 'periodic' if bc_MPS == 'infinite' else 'open'
lat = StaggerLadder(L, site, bc=bc, bc_MPS=bc_MPS)
model_params.setdefault('lattice', lat)
self.params = model_params
CouplingMPOModel.__init__(self, model_params)
def init_sites(self, model_params):
return SpinHalfSite(conserve=None)
def init_terms(self, model_params):
J = model_params.get('J', 1.)
Jz = model_params.get('Jz', 1.)
gamma = model_params.get('gamma', 0.2)
h = model_params.get('hz', 0.)
# add terms
for u1, u2, dx in self.lat.pairs['J1']:
self.add_coupling((1 - gamma)*(J) , u1, 'Sx', u2, 'Sx', dx)
self.add_coupling((1 - gamma)*(J) , u1, 'Sy', u2, 'Sy', dx)
self.add_coupling((1 - gamma)*Jz*J, u1, 'Sz', u2, 'Sz', dx)
for u1, u2, dx in self.lat.pairs['J2']:
self.add_coupling((1 + gamma)*(J) , u1, 'Sx', u2, 'Sx', dx)
self.add_coupling((1 + gamma)*(J) , u1, 'Sy', u2, 'Sy', dx)
self.add_coupling((1 + gamma)*Jz*J, u1, 'Sz', u2, 'Sz', dx)
for u in range(len(self.lat.unit_cell)):
self.add_onsite(h, u, 'Sz')
Looking forward to your reply.